Guide To La Te X Kopka, Helmut Et Al
Guide%20to%20LaTeX%20-%20Kopka%2C%20Helmut%20et%20al
Guide%20to%20LaTeX%20-%20Kopka%2C%20Helmut%20et%20al
Guide%20to%20LaTeX%20-%20Kopka%2C%20Helmut%20et%20al
User Manual:
Open the PDF directly: View PDF .
Page Count: 658
Download | |
Open PDF In Browser | View PDF |
A Guide to A LT X E and Electronic Publishing Fourth edition Helmut Kopka Patrick W. Daly Addison-Wesley Harlow, England Reading, Massachusetts Menlo Park, California New York Don Mills, Ontario Amsterdam Bonn Sydney Singapore Tokyo Madrid San Juan Milan Mexico City Seoul Taipei © Addison Wesley Longman Limited 2004 Addison Wesley Longman Limited Edinburgh Gate Harlow Essex CM20 2JE England and Associated Companies throughout the World. The rights of Helmut Kopka and Patrick W. Daly to be identified as authors of this Work have been asserted by them in accordance with the Copyright, Designs and Patents Act 1988. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without either the prior written permission of the publisher or a licence permitting restricted copying in the United Kingdom issued by the Copyright Licensing Agency Ltd, 90 Tottenham Court Road, London W1P 9HE. The programs in this book have been included for their instructional value. They have been tested with care but are not guaranteed for any particular purpose. The publisher does not offer any warranties or representations nor does it accept any liabilities with respect to the programs. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Addison Wesley Longman Limited has made every attempt to supply trademark information about manufacturers and their products mentioned in this book. A list of the trademark designations and their owners appears on page v. Cover designed by Designers & Partners, Oxford Typeset by the authors with the LATEX Documentation System Printed in Great Britain by Henry Ling Ltd, at the Dorset Press, Dorchester, Dorset First published 1993 Second edition 1995 Third edition 1999. Reprinted 1999, 2000 Fourth edition 2004 ISBN ???????????? British Library Cataloguing-in-Publication Data A catalogue record for this book is available from the British Library Library of Congress Cataloging-in-Publication Data Kopka, Helmut. A guide to LATEX : and Electronic Publishing / Helmut Kopka, Patrick W. Daly -- 4th ed. p. cm. Includes bibliographical references and index. ISBN 0-201-39825-7 1. LATEX (Computer file) 2. Computerized typesetting. I. Daly, Patrick W. II. Title. ???????????? ??????????? ??????? CIP v Trademark notices METAFONT™ is a trademark of Addison-Wesley Publishing Company. TEX™, AMS-TEX™, and AMS-LATEX™ are trademarks of the American Mathematical Society. Lucida™ is a trademark of Bigelow & Holmes. Microsoft , MS-DOS , Windows , Internet Explorer are registered trademarks of Microsoft Corporation. PostScript , Acrobat Reader , Acrobat logo are registered trademarks and PDF™ a trademark of Adobe Systems Incorporated. UNIX is a registered trademark in the United States and other countries, licensed exclusively through X/Open Company, Limited. VAX™ and VMS™ are trademarks of Digital Equipment Corporation. IBM is a registered trademark and techexplorer Hypermedia Browser™ a trademark of International Business Machines Corporation. Netscape™ and Netscape Navigator™ are trademarks of Netscape Communications Corporation. TrueType™ is a trademark and Apple and Macintosh are registered trademarks of Apple Computer Inc. ® ® ® ® ® ® ® ® ® ® ® Preface A new edition to A Guide to LATEX begs the fundamental question: Has LATEX changed so much since the appearance of the third edition in 1999 that a new release of this manual is justified? The simple answer to that question is ‘Well . . . .’ In 1994, the LATEX world was in upheaval with the issue of the new version LATEX 2ε , and the second edition of the Guide came out just then to act as the bridge between the old and new versions. By 1998, the initial teething problems had been worked out and corrected through semi-annual releases, and the third edition could describe an established, working system. However, homage was still paid to the older 2.09 version since many users still employed its familiar syntax, although they were most likely to be using it in a LATEX 2ε environment. LATEX has now reached a degree of stability that since 2000 the regular updates have been reduced to annual events, which often appear months after the nominal date, something that does not worry anyone. The old version 2.09 is obsolete and should no longer play any role in such a manual. In this fourth edition, it is reduced to an appendix just to document its syntax and usage. But if LATEX itself has not changed substantially since 1999, many of its peripherals have. The rise of programs like pdfTEX and dvipdfm for PDF output adds new possibilities, which are realized, not in LATEX directly, but by means of more modern packages to extend the basic features. The distribution of TEX/LATEX installations has changed, such that most users are given a complete, ready-to-run setup, with all the ‘extras’ that one used to have to obtain oneself. Those extras include user-contributed packages, many of which are now considered indispensable. Today ‘the LATEX system’ includes much more than the basic kernel by Leslie Lamport, encompassing the contributions of hundreds of other people. This edition reflects this increase in breadth. The changes to the fourth edition are mainly those of emphasis. 1. The material has been reorganized into ‘Basics’ and ‘Beyond the Basics’ (‘advanced’ sounds too intimidating) while the appendices contain topics that really can be skipped by most everyday users. Exception: Appendix H is an alphabetized command summary that many people find extremely useful (including ourselves). This reorganizing is meant to stress certain aspects over others. For vii viii Preface example, the section on graphics inclusion and color was originally treated as an exotic freak, relegated to an appendix on extensions; in the third edition, it moved up to be included in a front chapter along with the picture environment and floats; now it dominates Chapter 6 all on its own, the floats come in the following Chapter 7, and picture is banished to the later Chapter 13. This is not to say that the picture features are no good, but only that they are very specialized. We add descriptions of additional drawing possibilities there too. 2. It is stressed as much as possible that LATEX is a markup language, with separation of content and form. Typographical settings should be placed in the preamble, while the body contains only logical markup. This is in keeping with the modern ideas of XML, where form and content are radically segregated. 3. Throughout this edition, contributed packages are explained at that point in the text where they are most relevant. The fancyhdr package comes in the section on page styles, natbib where literature citations are explained. This stresses that these ‘extensions’ are part of the LATEX system as a whole. However, to remind the user that they must still be explicitly loaded, a marginal note is placed at the start of their descriptions. 4. PDF output is taken for granted throughout the book, in addition to the classical DVI format. This means that the added possibilities of pdfTEX and dvipdfm are explained where they are relevant. A separate Chapter 10 on PostScript and PDF is still necessary, and the best interface to PDF output, the hyperref package by Sebastian Rahtz, is explained in detail. PDF is also included in Chapter 15 on presentation material. On the other hand, the other Web output formats, HTML and XML, are only dealt with briefly in Appendix E, since these are large topics treated in other books, most noticeably the LATEX Web Companion. 5. This book is being distributed with the TEXLive CD, with the kind permission of Sebastian Rahtz who maintains it for the TEX Users Group. It contains a full TEX and LATEX installation for Windows, Macintosh, and Linux, plus many of the myriad extensions that exist. We once again express our hope that this Guide will prove more than useful to all those who wish to find their way through the intricate world of LATEX. And with the addition of the TEXLive CD, that world is brought even closer to their doorsteps. Helmut Kopka and Patrick W. Daly June, 2003 Contents Preface I 1 Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 6 10 11 14 Command names and arguments Environments . . . . . . . . . . . . Declarations . . . . . . . . . . . . . Lengths . . . . . . . . . . . . . . . . Special characters . . . . . . . . . . Exercises . . . . . . . . . . . . . . . Fine-tuning text . . . . . . . . . . . Word division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 19 20 21 22 27 28 34 Document Layout and Organization 3.1 3.2 3.3 3.4 4 Just what is LATEX? . . . . . Markup Languages . . . . TEX and its offspring . . . How to use this book . . . Basics of a LATEX file . . . . TEX processing procedure Text, Symbols, and Commands 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 3 1 Introduction 1.1 1.2 1.3 1.4 1.5 1.6 2 vii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 42 52 58 Changing font . . . . . . . . Centering and indenting . . Lists . . . . . . . . . . . . . . Generalized lists . . . . . . Theorem-like declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 61 67 69 74 80 Document class . . . . Page style . . . . . . . . Parts of the document Table of contents . . . . . . . . . . . Displayed Text 4.1 4.2 4.3 4.4 4.5 ix x CONTENTS 4.6 4.7 4.8 4.9 4.10 4.11 5 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 . 85 . 95 . 110 . 112 . 118 Mathematical environments . Main elements of math mode Mathematical symbols . . . . . Additional elements . . . . . . Fine-tuning mathematics . . . Beyond standard LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 119 120 124 130 145 151 153 The graphics packages . . . . . . . . . . . . . . . . . . . . . . 153 Adding color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 169 171 171 173 174 177 178 Counters . . . . . . . . . . . . . . . . . . . . . . Lengths . . . . . . . . . . . . . . . . . . . . . . . User-defined commands . . . . . . . . . . . . . User-defined environments . . . . . . . . . . . Some comments on user-defined structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 181 184 185 195 200 Float placement . . . . . . . . . . Postponing floats . . . . . . . . . Style parameters for floats . . . Float captions . . . . . . . . . . . Float examples . . . . . . . . . . . References to figures and tables Some float packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in text . . . . . . . . . . . . . . . . . . . User Customizations 8.1 8.2 8.3 8.4 8.5 II . . . . . . Floating tables and figures 7.1 7.2 7.3 7.4 7.5 7.6 7.7 8 . . . . . . Graphics Inclusion and Color 6.1 6.2 7 . . . . . . Mathematical Formulas 5.1 5.2 5.3 5.4 5.5 5.6 6 Tabulator stops . . . . . . . . . Boxes . . . . . . . . . . . . . . . Tables . . . . . . . . . . . . . . . Printing literal text . . . . . . . Footnotes and marginal notes Comments within text . . . . . Beyond the Basics 205 Document Management 9.1 9.2 9.3 9.4 Processing parts of a In-text references . . Bibliographies . . . . Keyword index . . . . document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 207 213 216 225 CONTENTS xi 10 PostScript and PDF 231 10.1 LATEX and PostScript . . . . . . . . . . . . . . . . . . . . . . . . 231 10.2 Portable Document Format . . . . . . . . . . . . . . . . . . . . 236 11 Multilingual LATEX 251 11.1 The babel system . . . . . . . . . . . . . . . . . . . . . . . . . 252 11.2 Contents of the language.dat file . . . . . . . . . . . . . . . 256 12 Math Extensions with AMS-LATEX 12.1 12.2 12.3 12.4 Invoking AMS-LATEX . . . . . . . Standard features of AMS-LATEX Further AMS-LATEX packages . . The AMS fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 258 258 280 283 13 Drawing with LATEX 287 13.1 The picture environment . . . . . . . . . . . . . . . . . . . . 287 13.2 Extended pictures . . . . . . . . . . . . . . . . . . . . . . . . . . 302 13.3 Other drawing packages . . . . . . . . . . . . . . . . . . . . . . 307 14 Bibliographic Databases and BIBTEX 309 14.1 The BIBTEX program . . . . . . . . . . . . . . . . . . . . . . . . . 309 14.2 Creating a bibliographic database . . . . . . . . . . . . . . . . 311 14.3 Customizing bibliography styles . . . . . . . . . . . . . . . . 321 15 Presentation Material 15.1 15.2 15.3 15.4 Slide production with SLITEX . . . . . . . . Slide production with seminar . . . . . . Electronic documents for screen viewing Special effects with PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 324 330 340 343 16 Letters 351 16.1 The LATEX letter class . . . . . . . . . . . . . . . . . . . . . . . 351 16.2 A house letter style . . . . . . . . . . . . . . . . . . . . . . . . . 356 16.3 A model letter customization . . . . . . . . . . . . . . . . . . 359 Appendices A The New Font Selection Scheme (NFSS) A.1 A.2 A.3 367 Font attributes under NFSS . . . . . . . . . . . . . . . . . . . . 368 Simplified font selection . . . . . . . . . . . . . . . . . . . . . . 370 Installing fonts with NFSS . . . . . . . . . . . . . . . . . . . . . 372 xii CONTENTS B The LATEX Clockwork B.1 B.2 B.3 B.4 B.5 B.6 Installing LATEX . . . . . . . Obtaining the Adobe euro TEX directory structure . . The CTAN server . . . . . Additional standard files The various LATEX files . . . . . . fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 381 387 387 389 391 396 C Error Messages C.1 C.2 C.3 C.4 C.5 C.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 401 409 415 424 429 435 Class and package files . . . . . . . LATEX programming commands . . . Sample packages . . . . . . . . . . . Changing preprogrammed text . . Direct typing of special letters . . . Alternatives for special symbols . . Managing code and documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 437 440 451 459 461 462 462 Basic structure of error messages Some sample errors . . . . . . . . List of LATEX error messages . . . . TEX error messages . . . . . . . . . Warnings . . . . . . . . . . . . . . . Search for subtle errors . . . . . . D LATEX Programming D.1 D.2 D.3 D.4 D.5 D.6 D.7 E LATEX and World Wide Web E.1 E.2 E.3 F 475 Converting to HTML . . . . . . . . . . . . . . . . . . . . . . . . 476 The Extensible Markup Language: XML . . . . . . . . . . . . . 478 The techexplorer Hypermedia Browser . . . . . . . . . . . 481 Obsolete LATEX F.1 F.2 F.3 483 The 2.09 preamble . . . . . . . . . . . . . . . . . . . . . . . . . 483 Font selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Obsolete means obsolete . . . . . . . . . . . . . . . . . . . . . 485 G TEX Fonts G.1 G.2 G.3 G.4 G.5 G.6 Font metrics and bitmaps . . . . Computer Modern fonts . . . . . The METAFONT program . . . . Extended Computer fonts . . . . PostScript fonts . . . . . . . . . . Computer Modern as PostScript . . . . . . . . . . . . . . . . . . . . fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 487 488 497 498 503 505 LIST OF TABLES xiii H Command Summary H.1 H.2 507 Brief description of the LATEX commands . . . . . . . . . . . . 507 Summary tables and figures . . . . . . . . . . . . . . . . . . . 595 Bibliography 605 Index 607 List of Tables 10.1 The psnfss packages and their fonts . . . . . . . . . . . . . 234 10.2 Acrobat menu actions . . . . . . . . . . . . . . . . . . . . . . . 248 A.1 A.2 A.3 The NFSS encoding schemes . . . . . . . . . . . . . . . . . . . 368 The NFSS series attributes . . . . . . . . . . . . . . . . . . . . . 369 Attributes of the Computer Modern fonts . . . . . . . . . . . 370 D.1 D.2 Input coding schemes for inputenc package . . . . . . . . . 462 Alternative commands for special symbols . . . . . . . . . . 463 G.1 G.2 G.3 Computer Modern text fonts . . . . . . . . . . . . . . . . . . . 491 Root names of the 35 standard PostScript fonts . . . . . . . 504 Encoding suffixes . . . . . . . . . . . . . . . . . . . . . . . . . . 505 H.1 H.2 H.3 H.4 H.5 H.6 H.7 H.8 H.9 H.10 H.11 H.12 H.13 H.14 H.15 H.16 H.17 H.18 H.19 H.20 H.21 Font attribute commands . . . . . . . Math alphabet commands . . . . . . . Font sizes . . . . . . . . . . . . . . . . . LATEX 2.09 font declarations . . . . . . Dimensions . . . . . . . . . . . . . . . . Accents . . . . . . . . . . . . . . . . . . Special letters from other languages Special symbols . . . . . . . . . . . . . Command symbols . . . . . . . . . . . Greek letters . . . . . . . . . . . . . . . Binary operation symbols . . . . . . . Relational symbols . . . . . . . . . . . Negated relational symbols . . . . . . Brackets . . . . . . . . . . . . . . . . . . Arrows . . . . . . . . . . . . . . . . . . Miscellaneous symbols . . . . . . . . Mathematical symbols in two sizes . Function names . . . . . . . . . . . . . Math accents . . . . . . . . . . . . . . . AMS arrows . . . . . . . . . . . . . . . AMS binary operation symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 595 595 595 596 596 596 596 596 596 597 597 597 597 598 598 598 598 599 599 599 xiv CONTENTS H.22 H.23 H.24 H.25 H.26 AMS Greek and Hebrew letters . AMS delimiters . . . . . . . . . . . AMS relational symbols . . . . . . AMS negated relational symbols Miscellaneous AMS symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 600 600 601 601 1.1 Sample display with the WinEdt editor . . . . . . . . . . . . . 16 3.1 3.2 Page layout parameters . . . . . . . . . . . . . . . . . . . . . . Sample title page . . . . . . . . . . . . . . . . . . . . . . . . . . 48 53 4.1 The list parameters . . . . . . . . . . . . . . . . . . . . . . . 76 6.1 An embellished image file . . . . . . . . . . . . . . . . . . . . . 160 List of Figures 10.1 Output produced by pdfTEX with the hyperref package . . 240 13.1 Comparison of eepic with eepicemu . . . . . . . . . . . . . 306 15.2 Title page of a pdfscreen document . . . . . . . . . . . . . . 341 B.1 B.2 B.3 B.4 The TEXLive welcome . . . . . . . . . . . The TEXLive documentation browser . The TDS directory tree . . . . . . . . . . Partial directory tree of CTAN servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 384 388 390 E.1 Example of TEX4ht and techexplorer output . . . . . . . . 482 H.1 H.2 H.3 Single column page format . . . . . . . . . . . . . . . . . . . . 602 Double column page format . . . . . . . . . . . . . . . . . . . 603 Format of the list environment . . . . . . . . . . . . . . . . 604 Part I Basics Introduction 1 1.1 Just what is LATEX? To summarize very briefly: • LATEX is a comprehensive set of markup commands used with the powerful typesetting program TEX for the preparation of a wide variety of documents, from scientific articles, reports, to complex books. • LATEX like TEX is an open software system, available free of charge. Its core is maintained by the LATEX3 Project Group but it also benefits from extensions written by hundreds of user/contributors, with all the advantages and disadvantages of such a democracy. • A LATEX document consists of one or more source files containing plain text characters, the actual textual content plus markup commands. These include instructions which can insert graphical material produced by other programs. • It is processed by the TEX program to produce a binary file in DVI (device independent) format, containing precise directions for the typesetting of each character. This in turn can be viewed on a monitor, or converted into printer instructions, or some other electronic form such as PostScript, HTML, XML, or PDF. • A variant on the TEX program called pdfTEX produces PDF output directly from the source file without going through the DVI intermediary. With this, LATEX can automatically include internal links and bookmarks with little or no extra effort, plus PDF buttons and external links, in addition to graphics in a wide range of common formats. • TEX activities are coordinated by the TEX Users Group, TUG (www. tug.org) who distribute a set of CDs, called TEXLive, annually to its 3 4 Chapter 1. Introduction members, containing a TEX/LATEX installation for various computer types. The rest of this book attempts to fill in the gaps in the above summary. With the help of the included TEXLive CD for Windows, Macintosh, and Linux, which also contains a directory specific to this book (\books\ Kopka_and_Daly\), we hope that the user will have additional pleasure in learning the joys of LATEX. 1.2 Markup Languages 1.2.1 Typographical markup In the days before computers, an author would prepare a manuscript either by hand or by typewriter, which he or she would submit to a publisher. Once accepted for publication (and after several rounds of corrections and modifications, each requiring a rewrite of the paper manuscript), it would be sent to a copy editor, a human being who would decorate the manuscript with markup, marginal notes that inform the typesetter (another human being) which fonts and spacings and other typographical features should be used to convert it to the final printed form that one expects of books and articles. Electronic processing of text today follows a similar procedure, except that the humans have been replaced by computer programs. (So far the author has avoided this fate, but they are working on it.) The markup is normally included directly in the manuscript in such a way that it is converted immediately to its output form and displayed on the computer monitor. This is known as WYSIWYG, or ‘what you see is what you get’. However, what you see is not always what you’ve got. An alternative that is used more and more by major publishers is markup languages, in which the raw text is interspersed with indicators ‘for the typesetter.’ The result as seen on the monitor is much the same as a typewritten manuscript, except that the markup is no longer abbreviated marginal notes, but cryptic code within the actual text. This source text, which can be prepared by a simple, dumb text editor program, is converted into typographically set output by a separate program. For example, to code the line He took a bold step forward. with HTML, the classical markup language of the World Wide Web, one enters in the source text: He took a bold step forward. In Plain TEX, the same sentence would be coded as: 1.2. Markup Languages 5 He took a {\bf bold step} forward. The first example is to be processed (displayed) by a Web browser program that decides to set everything between and as bold face. The second example is intended for the TEX program (Section 1.3). The markup in these two examples follow different rules, different syntax, but the functionality is the same. 1.2.2 Logical markup The above examples illustrate typographical markup, where the inserted commands or tags give direct instructions to alter the appearance of the output, here a change of font. An alternative is to indicate the purpose of the text. For example, HTML recognizes several levels of headings; to place a title into the highest level one enters:Logical Markup
The equivalent LATEX entry would be: \section{Logical Markup} With this logical markup, the author concentrates entirely on the content and leaves the typographical considerations to the experts. One merely marks the structure of the document, and has no means of controlling how the logical elements, like section titles, are to be rendered typographically. This information is put into HTML style sheets or LATEX classes and packages, which are external to the actual source file. This means that the entire layout of a document can be overhauled with only minimal or even no alterations to the source file. Today much effort is being put into XML, the Extensible Markup Language, as the ultimate markup system, since it allows the markup, or tags, to be defined as needed, without any indication of how they are to be implemented. That is left to XSL, the Extensible Stylesheet Language. It must be emphasized that neither XML nor XSL are programs at all; they are specifications for how documents and databases may be marked up, and how the markup tags may be translated into real output. Programs still need to be found to do the actual job. And that is the fundamental idea behind markup languages: that the source text indicates the logical structure of its contents. Such source files, being written in plain ascii text, are extremely robust, not being married to any particular software package or computer type. What does all this have to do with LATEX? In the next Section we outline the development of TEX and LATEX, and go on to show that LATEX, a product of the mid 1980’s, is a programmable markup language that is ideally suited for the modern world of electronic publishing. 6 Chapter 1. Introduction 1.3 TEX and its offspring The most powerful formatting program for producing book quality text of scientific and technical works is that of Donald E. Knuth (Knuth, 1986a, 1986b, 1986c, 1986d, 1986e). The program is called TEX, which is a rendering in capitals of the Greek letters τχ. For this reason the last letter is pronounced not as an x, but as the ch in Scottish loch or German ach, or as the Spanish j or Russian kh. The name is meant to emphasize that the printing of mathematical texts is an integral part of the program and not a cumbersome add-on. In addition to TEX, the same author has developed a further program called METAFONT for the production of character fonts. The standard TEX program package contains 75 fonts in various design sizes, each of which is also available in up to eight magnification steps. All these fonts were produced with the program METAFONT. With additional applications, further character fonts have been created, such as for Cyrillic, Chinese, and Japanese, with which texts in these alphabets can be printed in book quality. The TEX program is free, and the source code is readily available. Anybody may take it and modify it as they like, provided they call the result something other than TEX. This indeed has occurred, and several TEX variants do exist, including pdfTEX which we deal with later in this Chapter. Only Knuth is allowed to alter TEX itself, which he does only to correct any obvious bugs. Otherwise, he considers TEX to be completed; the current version number is 3.14159, and with his death, the code will be frozen for all time, and the version number will become exactly π . 1.3.1 The TEX program The basic TEX program only understands a set of very primitive commands that are adequate for the simplest of typesetting operations and programming functions. However, it does allow more complex, higherlevel commands to be defined in terms of the primitive ones. In this way, a more user-friendly environment can be constructed out of the low-level building blocks. During a processing run, the program first reads in a so-called format file which contains the definitions of the higher-level commands in terms of the primitive ones, and which also contains the hyphenation patterns for word division. Only then does it read in the author’s source file containing the actual text to be processed, including formatting commands that are predefined in the format file. Creating new formats is something that should be left to very knowledgeable programmers. The definitions are written to a source file which is then processed with a special version of the TEX program called initex. It stores the new format file in a compact manner so that it can be read in quickly by the regular TEX program. 1.3. TEX and its offspring 7 Although the normal user will almost never write such a format, he or she may be presented with a new format source file that will need to be installed with initex. For example, this is just what must be done to upgrade LATEX periodically. How to do this is described in Appendix B. 1.3.2 Plain TEX Knuth has provided a basic format named Plain TEX to interact with TEX at its simplest level. This is such a fundamental part of TEX processing that one tends to forget the distinction between the actual processing program TEX and this particular format. Most people who claim to ‘work only with TEX’ really mean that they only work with Plain TEX. Plain TEX is also the basis of every other format, something that only reinforces the impression that TEX and Plain TEX are one and the same. 1.3.3 LATEX The emphasis of Plain TEX is still very much at the typesetter’s level, rather than the author’s. Furthermore, the exploitation of all its potential demands considerable experience with programming techniques. Its application thus remains the exclusive domain of typographic and programming professionals. For this reason, the American computer scientist Leslie Lamport has developed the LATEX format (Lamport, 1985), which provides a set of higher-level commands for the production of complex documents. With it, even the user with no knowledge of typesetting or programming is in a position to take extensive advantage of the possibilities offered by TEX, and to be able to produce a variety of text outputs in book quality within a few days, if not hours. This is especially true for the production of complex tables and mathematical formulas. As pointed out in Section 1.2.2, LATEX is very much more a logical markup language than the original Plain TEX, on which it is based. It contains provisions for automatic running heads, sectioning, tables of contents, cross-referencing, equation numbering, citations, floating tables and figures, without the author having to know just how these are to be formatted. The layout information is stored in additional class files which are referred to but not included in the input text. The predefined layouts may be accepted as they are, or replaced by others with minimal changes to the source file. Since its introduction in the mid-1980s, LATEX has been periodically updated and revised, like all software products. For many years the version number was fixed at 2.09 and the revisions were only identified by their dates. The last major update occurred on December 1, 1991, with some minor corrections up to March 25, 1992, at which point LATEX 2.09 became frozen. 8 Chapter 1. Introduction 1.3.4 LATEX 2ε The enormous popularity of LATEX and its expansion into fields for which it was not originally intended, together with improvements in computer technology, especially dealing with cheap but powerful laser printers, had created a diversity of formats bearing the LATEX label. In an effort to re-establish a genuine, improved standard, the LATEX3 Project was set up in 1989 by Leslie Lamport, Frank Mittelbach, Chris Rowley, and Rainer Schöpf. Their goal was to construct an optimized and efficient set of basic commands complemented by various packages to add specific functionality as needed. As the name of the project implies, its aim is to achieve a version 3 for LATEX. However, since that is the long-term goal, a first step towards it was the release of LATEX 2ε in mid-1994 together with the publication of the second edition of Lamport’s basic manual (Lamport, 1994) and of an additional book (Goossens et al., 1994) describing many of the extension packages available and LATEX programming in the new system. Since then, two further books have appeared, Goossens et al. (1997) dealing with the inclusion of graphics and color, and Goossens and Rahtz (1999) explaining how LATEX may be used with the World Wide Web. Both these topics are also dealt with in this Guide. Initially updates to LATEX 2ε were issued twice a year, in June and December, but it has now become so stable that since 2000 the changes are released only once a year, nominally in June. LATEX 2ε is now the standard version, and LATEX 2.09 is considered obsolete, although source files intended for the older version may still be processed with the newer one. In this book, unless otherwise indicated, ‘LATEX’ will always mean LATEX 2ε . 1.3.5 TEX fonts TEX initially made use of its own set of fonts, called Computer Modern generated by Knuth’s METAFONT program. The reason for doing this was that printers at that time (and even today) may contain their own preloaded fonts, but they are often slightly different from printer to printer. Furthermore, they lacked the mathematical character sets that are essential to TEX’s main hallmark, mathematical typesetting. So Knuth created pixel fonts that could be sent to every printer ensuring the same results everywhere. Today the situation with fonts has changed dramatically. Outline fonts (also known as type 1 fonts) are more compact and versatile than the pixel fonts (type 3). They also have a far superior appearance and are drawn much faster in PDF files. The original Computer Modern fonts have been converted to outline fonts, but there is no reason to stick with them, except possibly for the mathematical symbols. It is LATEX 2ε with its New 1.3. TEX and its offspring 9 Font Selection Scheme that freed TEX from its rigid marriage to Computer Modern. Fonts are discussed in more detail in Appendix G. 1.3.6 The LATEX bazaar: user contributions Like the TEX program on which is relies, LATEX is freeware. There may be a prejudice that what is free in not worth anything, but there are other examples in the computer world to contradict this statement. And since the LATEX macros are provided in files containing plain text, there is no problem to exchange, modify, and supplement them. In other words, the user can participate in extending the basic LATEX system. Taking advantage of a mechanism in LATEX 2.09 that allowed options to the default layouts to be contained in so-called style option files, many users began writing their own ‘options’ to provide additional features to the basic LATEX. They then made these available to other users via the Internet. Many were intended for very specific problems, but many more proved to be of such general usefulness that they have become part of the standard LATEX installation. In this way, the users themselves have built up a system that meets their needs. With LATEX 2ε , these user contributions acquired official status: they became known as packages, they could be entered directly into the document and not by the back door, guidelines were issued for writing them, and additional commands were introduced to assist package programming. Package files bear the extension .sty from LATEX 2.09 days, so that the older style option files may still function as packages today. Those packages that have established themselves as indispensable for sophisticated LATEX processing are described in this book in those sections where they are most relevant. This does not imply that other packages are less worthwhile, but simply that this book does have to make a selection. Many other packages are described fully in The LATEX Companion (Goossens et al., 1994) and it would go beyond the bounds of this book to reproduce it here. 1.3.7 LATEX and electronic publishing The most significant development in computer usage in the last decade is the rise of the World Wide Web (or the hijacking of the Internet by the glitzy society). LATEX makes its own contribution here with • programs to convert LATEX files to HTML (Appendix E); • means of creating PDF output, with hypertext features such as links, bookmarks, active buttons (Chapter 10); 10 Chapter 1. Introduction • interfacing to XML both by acting as an engine to render XML documents and with programs to convert LATEX to XML and vice versa (Appendix E). All these forms of electronic publishing are alternatives to traditional paper output. We do not expect paper to disappear entirely so quickly, but it is rapidly being replaced by electronic forms, which can always reproduce the paper whenever needed. 1.4 How to use this book This Guide is meant to be a mixture of textbook and reference manual. It explains all the essential elements of the current standard LATEX 2ε , but compared to Lamport (1985, 1994), it goes into more detail, offers more examples and exercises, and describes many ‘tricks’ based on the authors’ experiences. It explains not only the core LATEX installation, but also many of the contributed packages that have become essential to modern LATEX processing, and thus quasi-standard. We necessarily have to be selective, for we cannot go to the same extend as The LATEX Companion (Goossens et al., 1994), The LATEX Graphics Companion (Goossens et al., 1997), and The LATEX Web Companion (Goossens and Rahtz, 1999), which are still valid companions to this book. The first part of the book is entitled The Basics, and deals with the more fundamental aspects of LATEX: inputting text and symbols, document organization, lists and tables, entering mathematics, and customizations by the user. The second part is called Beyond the Basics, meaning it presents concepts which may be more advanced but which are still essential to producing complex, sophisticated documents. The distinction is rather arbitrary. Finally, the appendices contain topics that are not directly part of LATEX itself, but useful for understanding its applications: installation, error messages, creating packages, World Wide Web, fonts. Appendix H is an alphabetized summary of most of the commands and their use, cross-referenced to their locations in the main text. 1.4.1 Some conventions In the description of command syntax, typewriter type is used to indicate those parts that must be entered exactly as given, while italic is reserved for those parts that are variable or for the text itself. For example, the command to produce tables is presented as follows: \begin{tabular}{col form} lines \end{tabular} The parts in typewriter type are obligatory, while col form stands for the definition of the column format that must be inserted here. The allowed 1.5. Basics of a LATEX file 11 values and their combinations are given in the detailed descriptions of the commands. In the above example, lines stands for the line entries in the table and are thus part of the text itself. Sections describing a package, an extension to basic LATEX, have the Package: sample name of that package printed as a marginal note, as demonstrated here for this paragraph. In this way, you are reminded that you must include it with \usepackage (Section 3.1.2) in order to obtain the additional features. Without it, you are likely to get an error message about undefined commands. ! Sections of text that are printed in a smaller typeface together with the boxed exclamation mark at the left are meant as an extension to the basic description. They may be skipped over on a first reading. This information presents deeper insight into the workings of LATEX than is necessary for everyday usage, but which is invaluable for creating more refined control over the output. 1.5 Basics of a LATEX file 1.5.1 Text and commands The source file for LATEX processing, or simply the LATEX file, contains the source text that is to be processed to produce the printed output. Splitting the text up into lines of equal width, formatting it into paragraphs, and breaking it into pages with page numbers and running heads are all functions of the processing program and not of the input text itself. For example, words in the source text are strings of letters terminated by some non-letter, such as punctuation, blanks, or end-of-lines (hard end-of-lines, ones that are really there, not the soft ones that move with the window width); whereas punctuation marks will be transferred to the output, blanks and end-of-lines merely indicate a gap between words. Multiple blanks in the input, or blanks at the beginning of a line, have no effect on the interword spacing in the output. Similarly, a new paragraph is indicated in the input text by an empty line; multiple empty lines have the same effect as a single one. In the output, the paragraph may be formatted either by indentation of the first line, or by extra interline spacing, but this is not affected in any way by the number of blank lines or extra spaces in the input. The source file contains more than just text, however; it is also interspersed with markup commands that control the formatting or indicate the structure. It is therefore necessary for the author to be able to recognize what is text and what is a command. Commands consist either of certain single characters that cannot be used as text characters, or of words preceded immediately by a special character, the backslash (\). The syntax of source text is explained in detail in Chapter 2. 12 Chapter 1. Introduction 1.5.2 Contents of a LATEX source file Every LATEX file contains a preamble and a body. The preamble is a collection of commands that specify the global processing parameters for the following text, such as the paper format, the height and width of the text, the form of the output page with its pagination and automatic page heads and footlines. As a minimum, the preamble must contain the command \documentclass to specify the document’s overall processing type. This is the first command in the preamble. If there are no other commands in the preamble, LATEX selects standard values for the line width, margins, paragraph spacing, page height and width, and much more. By default, these specifications are tailored to the American norms. For European requirements, built-in options exist to alter the text height and width to the A4 standard. Furthermore, there are language-specific packages to translate certain headings such as ‘Chapter’ and ‘Abstract’. The preamble ends with \begin{document}. Everything that follows this command is interpreted as body. It consists of the actual text mixed with markup commands. In contrast to those in the preamble, these commands have only a local effect, meaning they apply only to a part of the text, such as indentation, equations, temporary change of font, and so on. The body ends with the command \end{document}. This is normally the end of the file as well. The general syntax of a LATEX file is as follows: \documentclass[options]{class} Further global commands and specifications \begin{document} Text mixed with additional commands of local effect \end{document} The possible options and classes that may appear in the \documentclass command are presented in Section 3.1.1. A minimal LATEX file named hi.tex contains just the following lines: \documentclass{article} \begin{document} Hi! \end{document} 1.5.3 Extending LATEX with packages Packages are a very important feature of LATEX. These are extensions to the basic LATEX commands that are written to files with names that end in.sty and are loaded with the command \usepackage in the preamble. Packages can be classified by their origin: 1.5. Basics of a LATEX file 13 core packages are an integral part of the LATEX basic installation and are therefore fully standard; tools packages are a set written by members of the LATEX3 Team, and should always be in the installation; graphics packages are a standardized set for including pictures generated by other programs, and for handling color; they are on the same level as the tools packages; AMS-LATEX packages published by the American Mathematical Society, should be in any installation; contributed packages have been submitted by actual users; certain of these have established themselves as ‘essential’ to standard LATEX usage, but all are useful. Only a limited number of these packages are described in this book, those that we consider indispensable. However, there is nothing to prevent the user from obtaining and incorporating any others that should prove beneficial for his or her purposes. There are over 1000 contributed packages on the included TEXLive CD. How can one begin to get an overview of what they offer? Graham Williams has compiled a list of brief descriptions which can be found online and on the TEXLive CD at \texmf\doc\html\catalogue\catalogue.html How to load packages into the LATEX source file is explained in Section 3.1.2. Documentation of contributed packages is somewhat haphazard, depending on how much the author has put into it. The preferred method for distributing packages is to integrate the documentation with the code into a single file with extension .dtx. A special program DocStrip (Section D.7.1) is used to extract the actual package file or files, while LATEXing the original .dtx file produces the instruction manual. Most ready-to-run installations will already have done all this for the user, with the resulting manuals stored as DVI or PDF files somewhere in \texmf\doc\latex\. . . . However, you might have to generate the documentation output yourself by processing the .dtx file, which should be found in \texmf\source\latex\. . . . (Section B.3 explains the organization of the TEX directory system.) Some package authors write their manuals as an extra .tex file, the output of which may or may not be prestored in DVI or PDF form. Others provide HTML files. And still others simply add the instructions as comments in the package file itself. (This illustrates some of the joys of an open system.) 14 Chapter 1. Introduction 1.6 TEX processing procedure Since LATEX is a set of definitions for the TEX program, LATEX processing itself is in fact TEX processing with the LATEX format. What TEX does with this is the same as for any other of the many formats available (of which LATEX is perhaps the most popular). All the typesetting work is done by TEX, while LATEX handles the conversion from the logical markup to the typesetting commands. It also enables cross-referencing, running headlines, table of contents, literature citations and bibliography, indexing, and more. However, the processing of the source file to final output is TEX’s task, regardless of the format being used. 1.6.1 In the good old days TEX arose over 20 years ago before there were such things as PCs, graphical displays, and before computers were infected with windows or mice. TEX and its support programs were invoked from a command line, not with a mouse click. This may sound very old fashioned, but it did guarantee portability to all computer types. The processing steps that were taken in those days still exist with today’s graphical interfaces, but are now executed more conveniently. One can still open a ‘command prompt window’ and run them from the command line. The first step is of course to use a text editor program to write the source file containing the actual text and markup. The rules for entering this source text are explained in Chapter 2. It goes into a text file, or what is often called an ‘ascii’ file containing only standard punctuation marks, numbers, unaccented letters, upper and lower case. In other words, the text is that which can be produced from a standard English typewriter. The name of the source file normally has the extension.tex; it is then processed by TEX to produce a new file with the same base name and the extension.dvi, for device independent file. This is a binary file (all codes possible, not a text file) containing precise instructions for the selection and placement of every symbol, a coded description of the final printed page. The command to invoke TEX with the source file hi.tex is tex &latex hi meaning run the TEX program with the format latex. Usually the installation has defined a shortcut named latex to do this, so latex hi should be sufficient. It is only necessary to specify the extension of the source file name if it is something other than.tex. During the processing, TEX writes information, warnings, error messages to the computer monitor, and to a transcript file with the extension .log. It is well worth inspecting this file when unexpected results appear. 1.6. TEX processing procedure 15 The final step is to produce the printed pages from the DVI file. This requires another program, a driver, to generate the instructions specific to the given printer. For example, to produce a PostScript file, one runs dvips hi to obtain hi.ps from hi.dvi. And then one sends hi.ps to the PostScript printer with the regular command for that computer system. Previewing the DVI file on a computer monitor before printing was a later development, requiring high quality graphics displays. These programs are essentially special drivers that send the output directly to the monitor rather than to a printer or printer file. One very popular previewer is called with xdvi hi to view hi.dvi before committing it to paper. 1.6.2 And today The various steps for LATEX processing described above are still necessary today, and one can open up a command prompt window and carry them out just as before. However, there now exist intelligent editors with LATEXsavvy that not only assist writing the source text, but also will call the various programs, TEX, previewer, printer driver, BIBTEX, MakeIndex (these are explained later) with a mouse click. One such editor for Windows, available on the enclosed TEXLive CD in the support directory, is called WinShell, written by Ingo H. de Boer (www. winshell.de). Although free of charge, its author appreciates donations to offset his expenses. Another such editor and LATEX interface is WinEdt by Aleksander Simonic (www.winedt.com). A sample window with the opening text of this chapter is shown in Figure 1.1. This program is available for a 30-day trial period, after which one must pay a nominal fee to obtain a licence. It is the editor that we ourselves use and we can highly recommend it. An alternative is LyX, a free, open source software for document processing in near WYSIWYG, acting as a front-end to LATEX, where the user need not know anything about LATEX. See its home page at www.lyx.org. It must be stressed that all the above are interfaces to an existing LATEX installation. On the other hand, there are also commercial packages which include both the TEX/LATEX installation and a graphics interface. These are listed in Section B.1.1. 1.6.3 Alternative to TEX: pdfTEX As we mentioned earlier, it is permitted to use the TEX source code to generate something else, as long as it bears another name. One such 16 Chapter 1. Introduction Figure 1.1: Sample display with the WinEdt editor for interfacing to LATEX. ´ Thành. This program modification is called pdfTEX, created by Hàn Thê does everything TEX does, but it optionally writes its output directly to a PDF file, bypassing the DVI output of regular TEX. It therefore combines the TEX program with a DVI-to-PDF driver program. Normally this option is also the default. There are many advantages to producing PDF output directly this way, apart from saving a step. The PDF file is generated in exactly the same way as the DVI file with TEX, and can be viewed immediately with the Acrobat Reader or other PDF viewer. The results can be sent directly to a printer without going through the DVI-to-Printer program. It is also much easier to include the hypertext features of a true active PDF file, as we explain in Section 10.2.4. Adding the LATEX macros to pdfTEX produces something one could call pdfLATEX. This distinction is only meaningful for invoking the programplus-format to process the LATEX source file. Except for some things that we note in Section 10.2.3, LATEX commands are identical whether used with TEX or with pdfTEX. This makes the conversion extremely easy. The rest of this book deals essentially with LATEX itself, regardless of what the end product is to be: paper, HTML, XML, or PDF. 2 Text, Symbols, and Commands The text that is to be the input to a LATEX processing run is written to a source file with a name ending in.tex, the file name extension. This file is prepared with a text editor, either one that handles straightforward plain text, or one that is configured to assist the writing and processing of LATEX files. In either case, the contents of this file are plain ascii characters only, with no special symbols, no accented letters, preferably displayed in a fixed width typewriter font, with no frills like bold or italics, all in one size. All these aspects of true typesetting are produced afterwards by the TEX processing program with the help of markup commands inserted visibly into the actual text. It is therefore vital to know how commands are distinguished from text that is to be printed, and, of course, how they function. (However, for languages other than English, native keyboard input may indeed be used, as shown in Section 2.5.9.) 2.1 Command names and arguments A command is an instruction to LATEX to do something special, like print some symbol or text not available to the restricted character set used in the input file, or to change the current typeface or other formatting properties. There are three types of command names: • the single characters # $ & ˜ _ ˆ % { } all have special meanings that are explained later in this chapter; • the backslash character \ plus a single non-letter character; for example \$ to print the $ sign; all the special characters listed above have a corresponding two-character command to print them literally; • the backslash character \ plus a sequence of letters, ending with the first non-letter; for example, \large to switch to a larger typeface. 17 18 Chapter 2. Text, Symbols, and Commands Command names are case sensitive, so \large, \Large and \LARGE are distinct commands. Many commands operate on some short piece of text, which then appears as an argument in curly braces following the command name. For example, \emph{stress} is given to print the word stress in an emphasized typeface (here italic) as stress. Such arguments are said to be mandatory because they must always be given. Some commands take optional arguments, which are normally employed to modify the effects of the command somehow. The optional arguments appear in square braces. In this book we present the general syntax of commands as \name[optional]{mandatory} where typewriter characters must be typed exactly as illustrated and italic text indicates something that must be substituted for. Optional arguments are put into square brackets [ ] and the mandatory ones into curly braces { }. A command may have several optional arguments, each one in its set of brackets in the specified sequence. If none of the optional arguments is used, the square brackets may be omitted. Any number of blanks, or even a single new line, may appear between the command name and the arguments, to improve legibility. Some commands have several mandatory arguments. Each one must be put into a { } pair and their sequence must be maintained as given in the command description. For example, \rule[lift]{width}{height} produces a black rectangle of size width and height, raised by an amount lift above the current baseline. A rectangle of width 10 mm and height 3 mm is made with \rule{10mm}{3mm}. Since the optional argument lift is omitted, the rectangle is set on the baseline with no lifting, as . The arguments must appear in the order specified by the syntax and may not be interchanged. Some commands have a so-called *-form in addition to their normal appearance. A * is added to their name to modify their functionality somehow. For example, the \section command has a *-form \section* which, unlike the regular form, does not print an automatic section number. For each such command, the difference between the normal and *-form will be explained in the description of the individual commands. Command names consist only of letters, with the first non-letter indicating the end of the name. If there are optional or mandatory arguments following the command name, then it ends before the [ or { bracket, since these characters are not letters. Many commands, however, possess no arguments and are composed of only a name, such as the command \LaTeX to produce the LATEX logo. If such a command is followed by 2.2. Environments 19 a punctuation mark, such as comma or period, it is obvious where the command ends. If it is followed by a normal word, the blank between the command name and the next word is interpreted as the command terminator: The \LaTeX logo results in ‘The LATEXlogo’, that is, the blank was seen only as the end of the command and not as spacing between two words. This is a result of the special rules for blanks, described in Section 2.5.1. In order to insert a space after a command that consists only of a name, either an empty structure {} or a space command (\ and blank) must be placed after the command. The proper way to produce ‘The LATEX logo’ is to type either The \LaTeX{} logo or The \LaTeX\ logo. Alternatively, the command itself may be put into curly braces, as The {\TeX} logo, which also yields the right output with the inserted blank: ‘The TEX logo’. Incidentally, the LATEX 2ε logo is produced with \LaTeXe. Can you see why this logo command cannot be named \LaTeX2e? 2.2 Environments An environment is initiated with the command \begin{name} and is terminated by \end{name}. An environment has the effect that the text within it is treated differently according to the environment parameters. It is possible to alter (temporarily) certain processing features, such as indentation, line width, typeface, and much more. The changes apply only within the environment. For example, with the quote environment, previous text \begin{quote} text1 \small text2 \bfseries text3 \end{quote} following text the left and right margins are increased relative to those of the previous and following texts. In the example, this applies to the three texts text1, text2, and text3. After text1 comes the command \small, which has the effect of setting the next text in a smaller typeface. After text2, there is an additional command \bfseries to switch to bold face type. Both these commands only remain in effect up to the \end{quote}. The three texts within the quote environment are indented on both sides relative to the previous and following texts. The text1 appears in the normal typeface, the same one as outside the environment. The text2 and text3 appear in a smaller typeface, and text3 furthermore appears in bold face. After the end of the quote environment, the subsequent text appears in the same typeface that was in effect beforehand. 20 Chapter 2. Text, Symbols, and Commands Note that if the names of the environment in the \begin{..} \end{..} pair do not match, an error message will be issued on processing. Most declaration command names (see next section) may also be used as environment names. In this case the command name is used without the preceding \ character. For example, the command \em switches to an emphatic typeface, usually italic, and the corresponding environment \begin{em} will set all the text in italic until \end{em} is reached. A nameless environment can be simulated by a {...} pair. The effect of any command within it ends with the closing curly brace. The user can even create his or her own environments, as described in Section 8.4. 2.3 Declarations A declaration is a command that changes the values or meanings of certain parameters or commands without printing any text. The effect of the declaration begins immediately and ends when another declaration of the same type is encountered. However, if the declaration occurs within an environment or a {...} pair, its scope extends only to the corresponding \end command, or to the closing brace }. The commands \bfseries and \small mentioned in the previous section are examples of such non-printing declarations that alter the current typeface. Some declarations have associated arguments, such as the command \setlength which assigns a value to a length parameter (see Sections 2.4 and 8.2). Examples: {\bfseries This text appears in bold face} The \bfseries declaration changes the typeface: This text appears in bold face. The effect of this declaration ends with the closing brace }. \setlength{\parindent}{0.5cm} The paragraph indentation is set to 0.5 cm. The effect of this declaration ends with the next encounter of the command \setlength{\parindent}, or at the latest with the \end command that terminates the current environment. \pagenumbering{roman} The page numbering is to be printed in Roman numerals. Some declarations, such as the last example, are global, that is, their effects are not limited to the current environment. The following declarations are of this nature, the meanings of which are given later: \newcounter \setcounter \addtocounter \pagenumbering \thispagestyle \newlength \newsavebox 2.4. Lengths 21 Declarations made with these commands are effective right away and remain so until they are overridden by a new declaration of the same type. In the last example above, page numbering will be done in Roman numerals until countermanded by a new \pagenumbering{arabic} command. 2.4 Lengths 2.4.1 Fixed lengths Lengths consist of a decimal number with a possible sign in front (+ or -) followed by a mandatory dimensional unit. Permissible units and their abbreviated names are: cm mm in pt bp pc dd cc em ex centimeter, millimeter, inch (1 in = 2.54 cm), point (1 in = 72.27 pt), big point (1 in = 72 bp), pica (1 pc = 12 pt), didôt point (1157 dd = 1238 pt), cicero (1 cc = 12 dd), a font-specific size, the width of the capital M, another font-related size, the height of the letter x. Decimal numbers in TEX and LATEX may be written in either the English or European manner, with a period or a comma: both 12.5cm and 12,5cm are permitted. Note that 0 is not a legitimate length since the unit specification is missing. To give a zero length it is necessary to add some unit, such as 0pt or 0cm. Values are assigned to a length parameter by means of the LATEX command \setlength, which is described in Section 8.2 along with other commands for dealing with lengths. Its syntax is: \setlength{\length name}{length spec} For example, the width of a line of text is specified by the parameter \textwidth, which is normally set to a default value depending on the class, paper type, and font size. To change the line width to be 12.5 cm, one would give: \setlength{\textwidth}{12.5cm} 2.4.2 Rubber lengths Some parameters expect a rubber length. These are lengths that can be stretched or shrunk by a certain amount. The syntax for a rubber length is: 22 Chapter 2. Text, Symbols, and Commands nominal value plus stretch value minus shrink value where the nominal value, stretch value, and shrink value are each a length. For example, \setlength{\parskip}{1ex plus0.5ex minus0.2ex} means: the extra line spacing between paragraphs, called \parskip, is to be the height of the x in the current font, but it may be increased to 1.5 or reduced to 0.8 times that size. One special rubber length is \fill. This has the natural length of zero but can be stretched to any size. 2.5 Special characters 2.5.1 Spaces The space or blank character has some properties different from those of normal characters, some of which have already been mentioned in Section 2.1. During processing, blanks in the input text are replaced by rubber lengths (Section 2.4.2) in order to allow the line to fill up to the full line width. As a result, some peculiar effects can occur if one is not aware of the following rules: • one blank is the same as a thousand, only the first one counts; • blanks at the beginning of an input line are ignored; • blanks terminating a command name are removed; • the end of a line is treated as a blank. Some of the consequences of these rules are that there may be as many blanks as desired between words or at the beginning of a line (to make the input text more legible) and that a word may come right at the end of a line without the spacing between it and the next word disappearing. To force a space to appear where it would otherwise be ignored, one must give the command \ (a \ followed by a space character, made visible here by the symbol ). To ensure that certain words remain together on the same line, a protected space is inserted between them with the ˜ character (Section 2.7.1, page 28). Multiple protected spaces are all printed out, in contrast to normal spaces. Sometimes it is necessary to suppress the space that appears because of the new line. In this case, the last character in the line must be the comment character % (Section 4.11). Paragraphs are separated in the source text by blank lines. As for blank characters, one blank line is the same as a thousand. 2.5. Special characters 23 Instead of a blank line, the command \par may also be used to indicate the end of a paragraph. 2.5.2 Quotation marks The quotation marks found on the typewriter " are not used in book printing. Instead different characters are used at the beginning and end, such as ‘single quotes’ and “double quotes”. Single quotes are produced with ‘ and ’, while double quotes are made by typing the respective characters twice: ‘‘ for “ and ’’ for ”. Furthermore the typewriter character " will also generate the double closing quote ”. However, it should be avoided since it can lead to confusion. 2.5.3 Hyphens and dashes In book printing, the character that appears on the typewriter as - comes in various lengths: -, –, —. The smallest of these, the hyphen, is used for compound words such as father-in-law and for word division at the end of a line; the middle-sized one, the en dash, is used in ranges of numbers, for example, pages 33–36; and the largest, the em dash, is used as punctuation—what is normally called the dash. These are generated by typing the hyphen character one, two, or three times, so that - yields -, while -- makes –, and --- produces —. A fourth type of dash is the minus sign −, which is entered in math mode as $-$ (Chapter 5). 2.5.4 Printing command characters As mentioned in Section 2.1, the characters # $ ˜ _ ˆ % { } are interpreted as commands. To print them as text, one must give a command consisting of \ plus that character. $ = \$ 2.5.5 & = \& % = \% # = \# = \_ { = \{ } = \} The special characters §, , , ¶, © and £ These special characters do not exist on the computer keyboard. They can however be generated by special commands as follows: § = \S † = \dag ‡ = \ddag ¶ = \P © = \copyright £ = \pounds The production of Greek letters and other mathematical symbols is described in Chapter 5. 24 Chapter 2. Text, Symbols, and Commands 2.5.6 Non-English letters Special letters that exist in languages other than English can also be generated with TEX. These are: œ={\oe} ø ={\o} Œ={\OE} Ø ={\O} æ={\ae} ł ={\l} Æ={\AE} Ł ={\L} å={\aa} ß={\ss} Å ={\AA} SS={\SS} ¡ =!‘ ¿=?‘ Ångstrøm may be written as {\AA}ngstr{\o}m while Karlstraße can be input as Karlstra{\ss}e. The ‘letter’ \SS is the upper case equivalent of \ss, used for automatic conversion between upper and lower case. However, see Section 2.5.9 for the possibility of entering such characters directly. 2.5.7 Accents In non-English languages, there is a multiplicity of diacritical marks or accents, most of which can be printed with TEX: ò =\‘{o} ō =\={o} oo=\t{oo} ö=\"{o} õ=\˜{o} ǒ=\v{o} ő=\H{o} o=\b{o} o̊=\r{o} ¯ The o above is given merely as an example: any letter may be used. With i and j it should be pointed out that the dot must first be removed. This is carried out by prefixing these letters with a backslash: the commands \i and \j yield ı and . In this way ı̆ and ̋ are formed by typing \u{\i} and \H{\j}. The accent commands consisting of a non-letter may also be given without the curly braces: ò=\‘o ó=\’o ó=\’{o} ȯ=\.{o} o̧=\c{o} ô=\ˆo ô=\ˆ{o} ŏ=\u{o} o.=\d{o} ö=\"o õ=\˜o ō=\=o ȯ=\.o The letter accent commands should always be used with the curly braces. 2.5.8 The euro symbol The euro symbol € (or e) is too new to be part of the original LATEX, but it can be produced with the help of some additional fonts and contributed packages. Just which package you may use depends on your installation, and whether you have access to these additional fonts. The Text Companion fonts, described in Section G.4.4, do contain a euro symbol. Since these fonts should be part of every modern LATEX installation, you should be able to use their euro symbol if all else fails. Package: The package textcomp must be loaded in the preamble with textcomp \usepackage{textcomp} 2.5. Special characters 25 which defines many commands including \texteuro to print the symbol €. Since the European Commission originally dictated that it should only be printed in a sans serif font, it is better to issue \textsf{\texteuro} to produce €. (The font selection commands are described in Section 4.1.4.) If you are going to use this very frequently, you might want to define a shortcut named \euro with \newcommand{\euro}{\textsf{\texteuro}} as described in Section 8.3 on defining commands. A better solution is presented by the eurosym package by Henrik Theiling and the associated fonts that come with it, which bear the names feymr10, feybr10, and so on. This package defines the \euro command to print e, which changes automatically to bold e and slanted e as needed. Package: The europs package by Joern Clausen interfaces to the type 1 (Posteurops Script) euro fonts published by Adobe. For licensing reasons, these fonts may only be obtained from Adobe directly, even though free of charge (see Section B.2). This package provides the command \EUR for a symbol that varies with font family (Roman €25, sans serif €25, and typewriter €25) as well as for bold €25 and slanted €25. There is also a command \EURofc for the invariable symbol €. Package: Finally, the package eurosans by Walter Schmidt also addresses the eurosans Adobe euro fonts, again with the command \euro, with the same behavior as that of eurosym: always sans serif family, but changes with the other font attributes. The table below summarizes the above packages: Package: eurosym Package Command Fonts Notes textcomp \texteuro Text Companion Non standard symbol eurosym \euro Eurosym Sans serif, variable europs \EUR PostScript Varies with font family Invariable, official \EURofc eurosans \euro PostScript Sans serif, variable So which package should one use? That really depends on the fonts available. Since the Adobe fonts can never be distributed with a TEX installation, they must be actively fetched and installed. However, it is worth doing so, because the European Commission has revised its initial directive and now allows the euro symbol to be typographically matched to the text, which is also standard practice in Europe today. This strengthens the case for the europs package and the \EUR command for €, at least for Roman fonts. 26 Chapter 2. Text, Symbols, and Commands 2.5.9 Typing special symbols directly The commands for producing the special characters and accented letters in the previous sections may be suitable for typing isolated ‘foreign’ words, but become quite tedious for inputting large amounts of text making regular use of such characters. Most computer systems provide non-English keyboards with appropriate fonts for typing these national variants directly. Unfortunately, the coding of such extra symbols is by no means standard, depending very much on the computer system. For example, the text Gauß meets Ampère entered with an MS-DOS editor (code page 437 or 850) appears in a Windows application as Gauá meets AmpŠre and on a Macintosh as Gau· meets Ampäre. Since LATEX is intended to run on all systems, it simply ignores all such extra character codes on the grounds that they are not properly defined. The inputenc package solves this problem. It not only informs LATEX which Package: inputenc input coding scheme is being used, it also tells it what to do with the extra characters. One invokes it with ! \usepackage[code]{inputenc} where code is the name of the coding scheme to be used. The current list of allowed values for code (more are added with each LATEX update) can be found in Table D.1 on page 462. For most users, the most interesting codes are: cp437 cp850 applemac ansinew IBM code page 437 (DOS, North America) IBM code page 850 (DOS, Western Europe) Macintosh encoding Windows ANSI encoding In short, you should select applemac for a Macintosh, and ansinew for Windows, and one of the others if you are working with DOS. Documents making use of this package are fully portable to other computer systems. The source text produced with a DOS editor may still look very strange to a human user reading it on a Macintosh, but when the Macintosh LATEX processes it, the proper DOS interpretations will be applied so that the end result is what the author intended. See Section D.5 for more details. 2.5.10 Ligatures In book printing, certain combinations of letters are not printed as individuals but as a single symbol, a so-called ligature. TEX processes the letter combinations ff, fi, fl, ffi, and ffl not as ff, fi, fl, ffi, ffl but rather as ff, fi, fl, ffi, ffl Ligatures may be broken, that is, forced to be printed as separate letters, by inserting \/ between the letters. This is sometimes desired for such words as shelfful (shelf\/ful), which looks rather strange when printed with the normal ff ligature, shelfful. 2.6. Exercises 27 2.5.11 The date The current date can be placed at any point in the text with the command \today. The standard form for the date is the American style of month, day, year (for example, January 15, 2004). The British form (15th January 2004) or the date in other languages can be generated with the help of the TEX commands \day, \month, and \year, which return the current values of these parameters as numbers. Examples of how such a new \today command may be made are shown on page 461 in Section D.4.2. It is in fact better to enter the date explicitly, rather than to rely on \today. Reprocessing a two-year-old LATEX source file will yield a document with the processing date, not the date when the text was written. 2.6 Exercises Exercise 2.1: This exercise tests the basic operations of running the LATEX program with a short piece of text. A few simple commands are also included. Use a text editor to produce the following source text and store it in a file named exer.tex. \documentclass{article} \begin{document} Today (\today) the rate of exchange between the British pound and American dollar is \pounds 1 = \$1.58, an increase of 1\% over yesterday. \end{document} Process this source file with LATEX by clicking the appropriate icon, or by issuing latex exer in a command window. If the processing occurs without any error messages, the .dvi file exer.dvi will have been successfully created and may be viewed by a dvi previewer or sent to a printer. The final printed result should look as follows except that your current date will appear: Today (January 15, 2004) the rate of exchange between the British pound and American dollar is £1 = $1.58, an increase of 1% over yesterday. Note the following points about the commands used: no blank is necessary after \today because the ) suffices to terminate it; the blank after \pounds is optional and it is not printed in the output; the commands \$ and \% do not require blanks to terminate them; if blanks are given, they will be printed. Exercise 2.2: Take some text of about 3/4 of a page long out of a book or journal article and type it into a LATEX source file. Pay attention that the paragraphs are separated by blank lines. Use the same set of commands as in Exercise 2.1, that is, put the text between the commands \begin{document}...\end{document} and repeat the procedures for obtaining the output. 28 Chapter 2. Text, Symbols, and Commands Exercise 2.3: If you are likely to need the euro symbol in your work, try redoing Exercise 2.1 as follows: \documentclass{article} \usepackage{eurosym} \begin{document} Today (\today) the rate of exchange between the British pound and European euro is \pounds 1 = \euro1.46, an increase of 1\% over yesterday. \end{document} If this fails, try one of the other packages described in Section 2.5.8, substituting \textsf{\texteuro} or \EUR for \euro as required. 2.7 Fine-tuning text The subject of the section concerns pure typographical markup, and has nothing to do with the logical markup that we wish to stress in this book. Unfortunately, there are times when the author or editor does have to help the typesetting program to achieve good appearance. 2.7.1 Word and character spacing The spacing between words and characters is normally set automatically by TEX, which not only makes use of the natural width of the characters but also takes into account alterations for certain character combinations. For example, an A followed by a V does not appear as AV but rather as AV; that is, they are moved together slightly for a more pleasing appearance. Interword spacing within one line is uniform, and is chosen so that the right and left ends match exactly with the side margins. This is called left and right justification. TEX also attempts to keep the word spacing for different lines as nearly the same as possible. Words that end with a punctuation mark are given extra spacing, depending on the character: following a period ‘.’ or exclamation mark ‘!’, there is more space than after a comma ‘,’. This corresponds to the rule in English typesetting that there should be extra spacing between sentences. In certain cases, the automatic procedures do not work properly, or it is desirable to override them, as described in the next sections. Sentence termination and periods TEX interprets a period following a lower case letter to be the end of a sentence where additional interword spacing is to be inserted. This leads to confusion with abbreviations such as i. e., Prof. Jones, or Phys. Rev., where the normal spacing is required. This can be achieved by using the characters ˜ or \ instead of the normal blank. (The character is 2.7. Fine-tuning text 29 simply a symbol for the blank which is otherwise invisible.) Both these methods insert the normal interword spacing; in addition, ˜ is a protected space that prevents the line from being broken at this point. The above examples should be typed in as i.˜e., Prof.˜Jones, and Phys.\ Rev., producing i. e., Prof. Jones, and Phys. Rev. with the correct spacing and forcing the first two to be all on one line. In the third case, there is nothing wrong with putting Phys. and Rev. on different lines. A period following an upper case letter is not interpreted as the end of a sentence, but as an abbreviation. If it really is the end of a sentence, then it is necessary to add \@ before the period in order to achieve the extra spacing. For example, this sentence ends with NASA. It is typed in as This sentence ends with NASA\@. French spacing The additional interword spacing between sentences can be switched off with the command \frenchspacing, which remains in effect until countermanded with \nonfrenchspacing. In this case, the command \@ is ignored and may be omitted. This paragraph has been printed with \frenchspacing turned on, so that all word spacings within one line are the same. It corresponds to the normal rule for non-English typesetting. Character combinations “ ‘ and ’ ” A small spacing is produced with the command \,. This may be used, for example, to separate the double quotes “ and ” from the corresponding single quotes ‘ and ’ when they appear together. For example, the text ‘‘\,‘Beginning’ and ‘End’\,’’ produces “ ‘Beginning’ and ‘End’ ”. Inserting arbitrary spacing Spacing of any desired size may be inserted into the text with the commands \hspace{space} \hspace*{space} where space is the length specification for the amount of spacing, for example 1.5cm or 3em. (Recall that one em is the width of the letter M in the current typeface.) This command puts blank space of width space at that point in the text where it appears. The standard form (without *) has no effect if it should come at the beginning of an output line, just as normal blanks are removed at the beginning of lines. The *-form, on the other hand, inserts the spacing no matter where it occurs. A blank before or after the command will also be included: 30 Chapter 2. Text, Symbols, and Commands This is This is This is This is\hspace{1cm}1cm This is \hspace{1cm}1cm This is \hspace{1cm} 1cm 1cm 1cm 1cm The length specification may be negative, in which case the command works as a backspace for overprinting characters with other ones, or moving them closer together. For example, there is an energy unit in physics called electron volt, abbreviated ‘eV’, which looks much better if the two letters are nearer together, as ‘eV’, with e\hspace{-.12em}V. The command \hfill is an abbreviation for \hspace{\fill} (see Section 2.4.2). It inserts enough space at that point to force the text on either side to be pushed over to the left and right margins. With Left\hfill Right one produces Left Right Multiple occurrences of \hfill within one line will each insert the same amount of spacing so that the line becomes left and right justified. For example, the text Left\hfill Center\hfill Right generates Left Center Right If \hfill comes at the beginning of a line, the spacing is suppressed in accordance with the behavior of the standard form for \hspace. If a rubber space is really to be added at the beginning or end of a line, \hspace*{\fill} must be used instead. However, LATEX also offers a number of commands and environments to simplify most such applications (see Section 4.2.2). A number of other fixed horizontal spacing commands are available: \quad and \qquad The command \quad inserts a horizontal space equal to the current type size, that is, 10 pt for a 10 pt typeface, whereas \qquad inserts twice as much. Inserting variable . . . . . . and sequences Two commands that work exactly the same way as \hfill are \dotfill and \hrulefill Instead of inserting empty space, these commands fill the gap with dots or a ruled line, as follows: Start \dotfill\ Finish\\ and Left \hrulefill\ Center \hrulefill\ Right\\ produce Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finish Left Center Right 2.7. Fine-tuning text 31 Any combination of \hfill, \dotfill, and \hrulefill may be given on one line. If any of these commands appears more than once at one location, the corresponding filling will be printed that many more times than for a single occurrence. Departure \dotfill\dotfill\dotfill\ 8:30 \hfill\hfill Arrival \hrulefill\ 11:45\\ Departure . . . . . . . . . . . . . . . . . . . . . 8:30 2.7.2 Arrival 11:45 Line breaking Breaking text into lines is done automatically in TEX and LATEX. However, there are times when a line break must be forced or encouraged, or when a line break is to be suppressed. The command \\ A new line with or without additional line spacing can be achieved with the command \\. Its syntax is \\[space] \\*[space] The optional argument space is a length that specifies how much additional line spacing is to be put between the lines. If it is necessary to start a new page, the additional line spacing is not included and the new page begins with the next line of text. The *-form prevents a new page from occurring between the two lines. With \\*[10cm], the current line is ended and a vertical spacing of 10 cm is inserted before the next line, which is forced to be on the same page as the current line. If a page break is necessary, it will be made before the current line, which is then positioned at the top of the new page together with the 10 cm vertical spacing and the next text line. The command \newline is identical to \\ without the option space. That is, a new line is started with no additional spacing and a page break is possible at that point. Both commands may be given only within a paragraph, and not between them where they would be meaningless. Further line-breaking commands The command \linebreak is used to encourage or force a line break at a certain point in the text. Its form is \linebreak[num] 32 Chapter 2. Text, Symbols, and Commands where num is an optional argument, a number between 0 and 4 that specifies how important a line break is. The command recommends a line break, and the higher the number the stronger the recommendation. A value of 0 allows a break where it otherwise would not occur (like in the middle of a word), whereas 4 compels a line break, as does \linebreak without num. The difference between this command and \\ or \newline is that the current line will be fully justified, that is, interword spacing will be added so that the text fills the line completely. With \\ and \newline, however, the line is filled with empty space after the last word and the interword spacing remains normal. The opposite command \nolinebreak[num] discourages a line break at the given position, with num specifying the degree of discouragement. Again, \nolinebreak without a num argument has the same effect as \nolinebreak[4], that is, a line break is absolutely impossible here. Another way of forcing text to stay together on one line is with the command \mbox{text}. This is convenient for expressions such as ‘Voyager-1’ to stop a line break at the hyphen. 2.7.3 Vertical spacing It is possible to add extra vertical spacing of amount space between particular paragraphs using the commands \vspace{space} \vspace*{space} The *-form will add the extra space even when a new page occurs, or when the command appears at the top of a new page. The standard form ignores the extra vertical spacing in these situations. If these commands are given within a paragraph, the extra space is inserted after the current line, which is right and left justified as usual. The space parameter may even be negative, in order to move the following text higher up the page than where it would normally be printed. The command \vfill is an abbreviation for \vspace{\fill} (see Section 2.4.2). This is the equivalent of \hfill for vertical spacing, inserting enough blank vertical space to make the top and bottom of the text match up exactly with the upper and lower margins. The comments on multiple occurrences of \hfill also apply to \vfill. If this command is given at the beginning of a page, it is ignored, just like the standard form of \vspace{\fill}. If a rubber space is to be put at the top of a page, the *-form \vspace*{\fill} must be used. Further commands for increasing the spacing between paragraphs are 2.7. Fine-tuning text \bigskip \medskip 33 \smallskip which add vertical spacing depending on the font size declared in the document class. 2.7.4 Page breaking Breaking text into pages occurs automatically in TEX and LATEX, just as for line breaking. Here again, it may be necessary to interfere with the program’s notion of where a break should take place. Normal pages The commands \pagebreak[num] \nopagebreak[num] are the equivalents of \linebreak and \nolinebreak for page breaking. If \pagebreak appears between two paragraphs, a new page will be forced at that point. If it comes within a paragraph, the new page will be implemented after the current line is completed. This line will be right and left justified as usual. The command \nopagebreak has the opposite effect: between paragraphs, it prevents a page break from occurring there, and within a paragraph, it stops a page break that might take place at the end of the current line. Optional numbers between 0 and 4 express the degree of encouragement or discouragement for a page break. The analogy with the command \linebreak goes further: just as the line before the break is left and right justified with extra interword spacing, in the same way the page before the break is expanded with interline spacing to make it top and bottom justified. The proper command to end a page in the middle, fill it with blank spacing, and go on to a new page is \newpage which is equivalent to \newline with regard to page breaking. Pages with figures and tables If the text contains tables, pictures, or reserved space for figures, these are inserted at the location of the corresponding command, provided that there is enough room for them on the current page. If there is not enough space, the text continues and the figure or table is stored to be put on a following page. The command 34 Chapter 2. Text, Symbols, and Commands \clearpage ends the current page like \newpage and in addition outputs all the pending figures and tables on one or more extra pages (Chapter 7). Two-column pages If the document class option twocolumn has been chosen, or the command \twocolumn is in effect, then the two commands \pagebreak and \newpage end the current column and begin a new one, treating columns as pages. On the other hand, \clearpage and \cleardoublepage (see below) terminate the current page, inserting an empty right column if necessary. Two-sided pages An additional page-breaking command is available when the document class option twoside has been selected: \cleardoublepage which functions exactly the same as \clearpage (the current page is terminated, all pending figures and tables are output) but in addition, the next text will be put on to an odd-numbered page. If necessary, an empty page with an even number is printed to achieve this. Controlling page breaks LATEX provides the possibility of increasing the height of the current page slightly with commands \enlargethispage{size} \enlargethispage*{size} which add the length size to \textheight for this one page only. Sometimes the difference of a few points is all that is necessary to avoid a bad page break. The *-form of the command also shrinks any interline spacing as needed to maximize the amount of text on the page. 2.8 Word division When a line is to be right and left justified, it often turns out that the break cannot be made between whole words without either shoving the text too close together or inserting huge gaps between the words. It is then necessary to split a word. This fundamental task is performed by TEX, the underlying basis of LATEX, by means of a word-dividing algorithm 2.8. Word division 35 that works (almost) perfectly for English text, which is more than can be said for most authors. Nevertheless, even it makes mistakes at times which need to be corrected by human intervention. If normal TEX/LATEX is used for other languages, or if foreign words appear in English text, incorrect hyphenations are very likely to appear. (See Section 2.8.4 and Chapter 11 for more about LATEX with other languages.) In these cases too, something must be done to override TEX’s hyphenation rules, as described below. 2.8.1 Manual hyphenation The simplest way to correct a wrongly divided word is to include a \command at the right place within the word. The word manuscript, for example, will not be hyphenated at all, so if it causes problems with breaking a line, write it as man\-u\-script. This tells TEX to divide the word as necessary either as man-uscript or as manu-script, and to ignore its normal rules. The \- command merely makes hyphenation possible at the indicated locations; it does not force it. If the author absolutely insists in dividing a word at a certain point, say between the u and s in manuscript, he or she can type manu-\linebreak script to achieve this. However, this brute force method is not recommended, because the line break will always occur here even if the text is later changed. For English text, the spelling of a word remains the same when it is hyphenated, something that is not true in other languages. In traditional German spelling, for example, if ck is split, it becomes k-k. TEX allows such behavior with the general hyphenation command \discretionary{before}{after}{without} where before and after are the letters (with hyphen) that come on either side of the break if division takes place, and without is the normal text with no hyphenation. Thus Boris Becker’s name should be typed as Boris Be\discretionary{k-}{k}{ck}er something that one only wants to do in exceptional situations. Incidentally, the \- command is shorthand for \discretionary{-}{}{}. Note: In today’s new German spelling, ck is never split. This reformed spelling is still controversial however. 2.8.2 Hyphenation list Words that are incorrectly hyphenated and that appear frequently within the document can be put into a list of exceptions in the preamble, to avoid laboriously inserting \- every time: 36 Chapter 2. Text, Symbols, and Commands \hyphenation{list} The list consists of a set of words, separated by blanks or new lines, with the allowed division points indicated by hyphens. For example, \hyphenation{man-u-script com-pu-ter gym-na-sium coun-try-man re-sus-ci-tate ... } The list may contain only words with the normal letters a–z, with no special characters or accents. However, if the inputenc package is loaded, then the directly typed letters are also be included in the automatic hyphenation. 2.8.3 Suppressing hyphenation Another means of avoiding bad word divisions is to turn hyphenation off, at least for a paragraph or two. Actually the command \begin{sloppypar} paragraph text \end{sloppypar} does not prevent word division, but does permit larger interword spacings without giving a warning message. This means that practically all lines are broken between words. It is also possible to put the command \sloppy in the preamble or in the current environment to reduce the number of word divisions in the whole document or within the environment scope. This is recommended when the line width is rather narrow. When the command \sloppy is in effect, it is possible to undo it temporarily and to turn hyphenation back on with the command \fussy. 2.8.4 ! Word division with multilingual text Multiple hyphenation lists may be included in the TEX format, making it possible to switch hyphenation schemes within one document, using the TEX command \language. This command may be used as part of language-specific adaptations to translate certain explicit English words in the output (such as ‘Contents’), to simplify accents or punctuation, and to alter the definition of the date command \today. This topic is treated in more detail in Chapter 11. 3 3.1 Document Layout and Organization Document class The first command in the preamble of a LATEX file determines the global processing format for the entire document. Its syntax is: \documentclass[options]{class} where some value of class must be given, while [options] may be omitted if default values are acceptable. The standard values of class, of which one and only one may be given, are: book, report, article, or letter. (The properties of the letter class are explained in Chapter 16.) The basic differences between these classes lie not only in the page layouts, but also in the organization. An article may contain parts, sections, subsections, and so on, while a report can also have chapters. A book also has chapters, but treats even and odd pages differently; also, it prints running heads on each page with the chapter and section titles. Other classes besides the standard ones exist, as contributions for specific journals, or for book projects. These will have their own set of options and additional commands, which should be described in separate documentation or instructions. However, since they are normally modifications of one of the standard classes, most of the following options apply to them too. 3.1.1 Standard class options The options available allow various modifications to be made to the formatting. They can be grouped as follows. Selecting font size The basic font size is selected with one of the options 37 38 Chapter 3. Document Layout and Organization 10pt 11pt 12pt This is the size of the font in which the normal text in the document will be set. The default is 10pt, which means that this is the value assumed if no size option is specified. All other font size declarations are relative to this standard size, so that the section titles, footnotes, and so on will all change size automatically if a different basic font size is selected. Specifying paper size LATEX calculates the text line width and lines per page according to the selected font size and paper mode. It also sets the margins so that the text is centered both horizontally and vertically. In order to do this, it needs to know which paper format is being used. This is specified by one of the following options: letterpaper (11 × 8.5 in) legalpaper (14 × 8.5 in) executivepaper (10.5 × 7.25 in) a4paper (29.7 × 21 cm) a5paper (21 × 14.8 cm) b5paper (25 × 17.6 cm) The default is letterpaper, American letter size paper, 11 × 8.5 in. Normally, the paper format is such that the longer dimension is the vertical one, the so-called portrait mode. With the option landscape the shorter dimension becomes the vertical one, the landscape mode. (One still has to ensure that the output is printed as landscape; see for example page 232.) Page formats The text on the page may be formatted into one or two columns with the options onecolumn twocolumn The default is onecolumn. In the case of the twocolumn option, the separation between the columns as well as the width of any rule between them may be specified by \columnsep and \columnseprule, described below. The even- and odd-numbered pages may be printed differently according to the options oneside twoside With oneside, all pages are printed the same; however, with twoside, the running heads are such that the page number appears on the right on odd 3.1. Document class 39 pages and on the left on even pages. It does not force the printer to output double-sided. The idea is that when these are later printed back-to-back, the page numbers are always on the outside where they are more easily noticed. This is the default for the book class. For article and report, the default is oneside. With the book class, chapters normally start on a right-hand, odd-numbered page. The options openright openany control this feature: with openany a chapter always starts on the next page, but with openright, the default, a blank page may be inserted if necessary. Normally the title of a book or report will go on a separate page, while for an article, it is placed on the same page as the first text. With the options notitlepage titlepage this standard behavior may be overruled. See Sections 3.3.1 and 3.3.2. Further options The remaining standard options are: leqno Equation numbers in displayed formulas will appear on the left instead of the normal right side (Section 5.1). fleqn Displayed formulas will be set flush left instead of centered (Section 5.1). The amount of indentation may be set with the parameter \mathindent described below. openbib The format of bibliographies may be changed so that segments are set on new lines. By default, the texts for each entry are run together. draft If the LATEX line-breaking mechanism does not function properly and text must stick out into the right margin, then this is marked with a thick black bar, to make it noticeable. final The opposite of draft, and the default. Lines of text that are too wide are not marked in any way. If multiple options are to be given, they are separated by commas, as for example, \documentclass[11pt,twoside,fleqn]{article}. The order of the options is unimportant. If two conflicting options are specified, say oneside and twoside, it is not obvious which one will be effective. That depends entirely on the definitions in the class file itself, so it would be best to avoid such situations. 40 Chapter 3. Document Layout and Organization Parameters associated with some options Some options make use of parameters that have been given certain default values: \mathindent specifies the indentation from the left margin for the equation numbers when fleqn is selected (Section 5.1); \columnsep specifies the space between the two columns for the twocolumn option (see Figure H.2 on page 603); \columnseprule determines the width of the vertical line between the two columns for the twocolumn option. The default is zero width, that is, no vertical rule (see Figure H.2). The standard values of these parameters may be changed with the LATEX command \setlength. For example, to change \mathindent to 2.5 cm, give \setlength{\mathindent}{2.5cm} These parameters may be assigned values either in the preamble or at any place in the document. Parameters in the preamble apply to the entire document, whereas those within the text are in effect until the next change or until the end of the environment in which they were made (Section 2.3). In the latter case, the previous values become effective once more. Exercise 3.1: Take your text file from Exercise 2.2 and change the initial command \documentclass{article} first to \documentclass[11pt]{article} and then to \documentclass[12pt]{article} and print the results of each LATEX processing. Compare the line breaking of these outputs with that of Exercise 2.2. Note: if there are some improper word divisions, you call tell LATEX where the correct division should occur with the command \-, for example, man\-u\-script. (This is one of the few words that the TEX English word divider does not handle properly.) Additional means of modifying word division are given in Section 2.8. If there are warnings of the sort Overfull \hbox ... during the LATEX processing, TEX was not able to break the lines cleanly. In the output, these lines will extend beyond the right margin. The usual cause is that TEX was not able to divide some word, either because it is indivisible or because TEX’s word division routines were not adequate. Here again a suggested hyphenation in the text can solve the problem. Other solutions will be given shortly. Exercise 3.2: Now employ \documentclass[twocolumn]{article} in your text file. If you now receive a number of warnings with Underfull \hbox ..., then these lines will indeed be left and right justified but will have too much empty 3.1. Document class 41 space between the words. Check the output yourself to see whether the word spacing is acceptable. If not, try giving some hyphenation suggestions in the first words of the next line. Note: if you use the classes book or report instead of article in the preceding exercises, you will notice no difference in the outputs. These classes affect the subsequent structural elements of the document. Basically, you should use article for short articles (say 10–20 pages) and report for longer reports that are to be organized into chapters. The chapters always begin on a new page. The class book is available for producing books. 3.1.2 Loading packages In Section 1.5.3 we explained how LATEX can be extended by packages which are either part of the core installation or contributed by engaged users. How to write your own packages is described in Appendix D. A package is nothing more than a set of LATEX (or TEX) commands stored in a file with the extension .sty, although there are some special commands that may only appear within them. To invoke a package, simply call \usepackage{package} in the preamble, where package is the root name of the file. More than one package may be loaded with one call to \usepackage. For example, two packages provided with standard LATEX are stored in files makeidx.sty (Section 9.4.3) and ifthen.sty (Section 8.3.5). They may be read in together with \usepackage{makeidx,ifthen} A package may have options associated with it, which may be selected in the same way as for document classes: by including the option names within square braces. The general syntax is thus: \usepackage[opt1,opt2. . . ]{package1,package2,. . . } where all the listed options will be applied to all the selected packages. If any of the packages does not understand one of the options, a warning message is output to the monitor. 3.1.3 ! Global and local options One interesting feature about options specified with the \documentclass command is that they also apply to any packages that follow. This means that if several packages all take the same option, it is only necessary to declare it once in \documentclass. For example, one might design a package to modify article for generating a local house style that might do different things for single or double column text; this package could make use of the class options onecolumn and twocolumn to achieve this. Or it could elaborate on the draft 42 Chapter 3. Document Layout and Organization option to produce double line spacing, as for a manuscript. Alternatively, several packages might have language-dependent features that could be activated with options like french or german; it is sufficient to list such options only in \documentclass to apply them to all packages. Such options are called global, for they are passed on to all subsequent packages automatically. Global options need not be limited to the standard class options listed in Section 3.1.1. A warning message is printed only if neither the class nor any of the packages understand one or more of them. By contrast, any options specified with \usepackage will be applied only to those packages listed in that one command; and it is applied to all of them. A warning is printed if one or more of those packages does not recognize any one of these local options. 3.1.4 ! 3.2 Class and package versions Class and package files normally have an internal version specification in the form of their release date, as yyyy/mm/dd. If you wish to make use of some feature that you know was added on a certain date, you include that date in square brackets after the class or package name. An example of this is shown in Section 3.2.4 on page 46. The version date may also be added to the \documentclass command to ensure that the right version of the class file is being employed. The reason for doing this is to ensure that the source files are processed properly, say on other systems. Page style The basic page format is determined by the page style. With one exception, this command is normally given in the preamble. Its form is: \pagestyle{style} The mandatory argument style takes on one of the following values: plain The page head is empty, the foot contains the centered page number. This is the default for the article and report classes when no \pagestyle is given in the preamble. empty Both head and footlines are empty; no page numbers are printed. headings The head contains the page number as well as title information (chapter and section headings); the foot is empty. This is the default for book class. myheadings The same as headings except that the page titles in the head are not chosen automatically but rather are given explicitly by the commands \markright or \markboth (see below). 3.2. Page style 43 The command \thispagestyle{style} functions exactly as \pagestyle except that it affects only the current page. For example, the page numbering may be suppressed for just the current page with the command \thispagestyle{empty}. It is only the printing of the page number that is suppressed; the next page will be numbered just as though the command had never been given. 3.2.1 Heading declarations For the page styles headings and myheadings, the information appearing in the headline may be given with the declarations \markright{right head} \markboth{left head}{right head} The declaration \markboth is used with the document class option twoside, with even-numbered pages considered to be on the left and odd-numbered pages on the right. Furthermore, the page number is printed on the left side of the head for a left page and on the right side for a right page. For one-sided output, all pages are considered to be right-handed. In this case, the declaration \markright is appropriate. It may also be used with two-sided output to overwrite the right head given in \markboth. With the page style headings, the standard titles in the page headline are the chapter, section, or subsection headings, depending on the document and page style, according to the following scheme: Style Left Page Right Page book, report one-sided two-sided — Chapter Chapter Section article one-sided two-sided — Section Section Subsection If there are more than one \section or \subsection on a page, it is the heading of the last one that appears in the page head. 3.2.2 Customized head and footlines Package: fancyhdr The standard page styles described in Section 3.2 select how the head and footlines are to appear, and what information they contain. This is a very limited choice, and the fancyhdr package by Piet van Oostrum offers the user considerable more flexibility. This package makes available an additional page style named fancy which the user can easily redefine. Head and footlines consist each of 44 Chapter 3. Document Layout and Organization three parts, left, center, right, each of which can be individually defined with \lhead{Left head} \lfoot{Left foot} \chead{Center head} \rhead{Right head} \cfoot{Center foot} \rfoot{Right foot} where the various texts may be explicit, or a command like \thepage to print the current page number. Both head and footlines may be decorated with a rule, the widths of which are set by commands \headrulewidth and \footrulewidth. By default, the fancy head and footlines are much the same as for the headings page style, but the head rule is set to 0.4 pt and the foot rule set to 0 (no rule). The rules may be redefined with, for example, \renewcommand{\footrulewidth}{0.4pt} to turn the foot rule on. The above defining commands are in fact specific examples of the more general commands \fancyhead and \fancyfoot, where \lhead{..} is \fancyhead[L]{..} \cfoot{..} is \fancyfoot[C]{..} and so on, with L C R standing for ‘left’, ‘center’, ‘right’. For two-sided output with the twoside option, one normally wants the left and right parts to alternate with page number. The easiest way to do this is with \fancyhead[LE,RO]{Text 1} \fancyhead[LO,RE]{Text 2} to put the same Text 1 in the left part of even pages, and right part of odd pages, and Text 2 for the other way round. With \fancyhead{}, all head line parts are set to blanks, something that should be done before resetting them explicitly. Similarly \fancyfoot{} sets all foot entries to blank. The default (two-sided) definitions for the fancy page style are \fancyhead[EL,OR]{\textsl{\rightmark}} \fancyhead[ER,OL]{\textsl{\leftmark}} where \rightmark and \leftmark contain the automatic texts for the headings page style generated by the \chapter, \section, \subsection commands (Section 3.3.3), while \textsl (Section 4.1.4) sets its argument in a slanted typeface. The user may also make use of these to redefine the head line with automatic texts. There is also the most general \fancyhf command taking optional arguments [H] and [F] to apply to head or footlines. Thus \fancyhf[HL] {..} is the same as \fancyhead[L]{..}. Clearly, \fancyhf{} resets everything. 3.2. Page style 45 In many classes, the first page of a chapter, or the very first page of the document, is switched to plain automatically. If the user wants to change this, he or she must redefine that page style. The fancyhdr package simplifies this task with \fancypagestyle{plain}{definitions} where definitions consist of \fancyhead, \fancyfoot, and/or rule redefinitions that are to apply to the revised plain style. In fact, any existing page style can be redefined in this way. 3.2.3 Page numbering The declaration that specifies the style of the page numbering has the form \pagenumbering{num style} The allowed values of num style are: arabic for normal (Arabic) numerals, roman for lower case Roman numerals, Roman for upper case Roman numerals, alph for lower case letters, Alph for upper case letters. The standard value is arabic. This declaration resets the page counter to 1. In order to paginate the foreword of a document with Roman numerals and the rest with Arabic numbers beginning with page 1 for chapter 1, one must declare \pagenumbering{roman} at the start of the foreword and then reset the page numbering with \pagenumbering{arabic} immediately after the first \chapter command. (See Section 3.3.5 for the preferred method.) Pages may be numbered starting with a value different from 1 by giving the command \setcounter{page}{page num} where page num is the number to appear on the current page. Exercise 3.3: Expand your exercise text file so that it fills more than one page of output and include the following preamble: \documentclass{article} \pagestyle{myheadings} \markright{Exercises} \pagenumbering{Roman} \begin{document} 46 Chapter 3. Document Layout and Organization 3.2.4 Paragraph formatting The following parameters affect the appearance of a paragraph and may be given new values with \setlength as explained in Section 8.2: \parskip The distance between paragraphs, expressed in units of ex so that it will automatically change with character font size. This should be a rubber length. \parindent The amount of indentation for the first line of a paragraph. \baselinestretch This is a number that magnifies the normal distance between baselines, the line on which the letters sit. This number is initially 1, for standard line spacing. It may be changed to another number with \renewcommand{\baselinestretch}{factor} where factor is any decimal number, such as 1.5 for a 50% increase. This then applies to all font sizes. If this command is given outside the preamble, it does not come into effect until another font size has been selected (Section 4.1.2). These parameters may be set either in the preamble or anywhere in the text of the document. In the latter case, the changes remain in effect until the next change or until the end of the environment in which they were made (Section 2.3). To suppress indentation for one paragraph, or to force it where it would otherwise not occur, place \noindent or \indent at the beginning of the paragraph to be affected. Normally, the first paragraph of a section is not indented, not even with \indent. However, by including the package indentfirst one ensures that all paragraphs are indented. By default, LATEX indicates paragraphs by indenting the first line. Package: parskip An alternative is without indentation but with extra spacing between paragraphs. One could redefine \parindent and \parskip accordingly, or one could employ one of the oldest and simplest packages dating back to LATEX 2.09 days: parskip, written by H. Partl. For consistency, this package also makes some changes in the parameters for lists (Section 4.3). One loads this package with Package: indentfirst \usepackage{parskip} 3.2. Page style 47 There is a recent update to the parskip package by Robin Fairbairns that includes the option parfill, given as \usepackage[parfill]{parskip} that avoids ugly-looking rectangular paragraphs by ensuring that there is always space at the end of the last line. This update is dated April 9, 2001, so to be sure that this package version is loaded, add this date as \usepackage[parfill]{parskip}[2001/04/09] as explained in Section 3.1.4. A warning will be issued on processing if the actual version of parskip is earlier than this. There will also be warning about the unknown option parfill. Exercise 3.4: Add the following to the preamble of your exercise file: \usepackage{parskip} \renewcommand{\baselinestretch}{1.2} After processing this exercise, repeat it with another value for the parameter \baselinestretch, say 1.5, in order to get a feeling for how it works. Remove these lines from the exercise file afterwards. 3.2.5 Page format Each page consists of a head, the body containing the actual text, and a foot. The selection of the page style determines what information is to be found in the head and footlines. LATEX uses default values for the distances between the head, body, and foot, for the upper and left margins, and for the text line width and heights of the head, body, and foot. These formatting lengths are illustrated in Figure 3.1 on the next page. They may be changed by declaring new values for them, preferably in the preamble, with the command \setlength (Section 8.2). For example, give \setlength{\textwidth}{12.5cm} to make the text line width to be 12.5 cm. There is also a parameter \linewidth equal to the text line width in whatever environment one is currently in. This must never be changed, but is used when one needs to know this width. More detailed diagrams of the page formats for one- and two-column outputs are shown at the end of Appendix H in Figures H.1 and H.2. Package: You can examine your own page layout with the layout package from layout the tools collection. Simply issue the command \layout and a diagram similar to that in Figure 3.1 will be drawn at that point, together with a list of the current values of the layout parameters. Naturally, you would not do this in the middle of the final version of a document, but only as diagnostic check. Chapter 3. Document Layout and Organization 1 inch 6 • 6 ? 1 inch \oddsidemargin left margin for odd pages, \evensidemargin left margin for even pages, \topmargin upper margin to top of head, \headheight height of head, \headsep distance from the bottom of headline to top of body, \topskip distance from top of body to baseline of first line of text, \textheight, \textwidth height and width of main text, \footskip distance from bottom of body to bottom of foot, \paperwidth, \paperheight total width and height of paper as given by paper size option, including all margins. \paperheight 48 \topmargin ? \headheight Head 6 ? \headsep ? 6 \topskip ? First line of text Body - \textheight 6 \textwidth ? \oddsidemargin \evensidemargin Foot ? \paperwidth \footskip ? - Figure 3.1: Page layout parameters ! ! In order to calculate the page layout precisely, one must realize that LATEX measures all distances from a point one inch from the top of the paper and one inch from the left edge. Thus the total left margin is \oddsidemargin plus one inch. The LATEX parameters \paperwidth and \paperheight, which include this extra inch, are given their values by the paper size option in the \documentclass command; they are used internally to calculate the margins so that the text is centered. The user may also take advantage of them for calculations. With document class book or with the option twoside, the bottom edge of the body will always appear at exactly the same position on every page. In the other classes or options, it will vary slightly. In the first two cases, the constant bottom edge is produced by the internal command \flushbottom, whereas the varying bottom is produced by the command \raggedbottom. The user may apply these declarations to change the behavior of the bottom edge at any time, independent of document class and options. Exercise 3.5: You can change the page format of your text by altering the above parameters. Add the following to the preamble of your text: \setlength{\textwidth}{13cm} \setlength{\textheight}{20.5cm} The upper and left margins of your output will now seem too small. Select new values for \oddsidemargin and \topmargin to correct this. Note: do not 3.2. Page style 49 forget the 1 inch margin at the left and top from which additional margins are measured. You must take this into account when you select \oddsidemargin and \topmargin. Exercise 3.6: Expand your text so that the output requires more than two full pages with the reduced page format. Add \flushbottom to the preamble and check that the last line of all pages is at exactly the same location. Exercise 3.7: Remove the command \flushbottom and select the document class \documentclass[twoside]{article}. Now the last lines are at the same location without the \flushbottom command. On the other hand, the left margin of the odd pages probably does not agree with the right margin of the even pages. Adjust the value of \evensidemargin to correct this. 3.2.6 Simplified page formatting Package: geometry Getting the page layout to be exactly the way you want it can be very tedious. Just centering the text on the page involves a complex set of settings that are not at all intuitive. The geometry package by Hideo Umeki offers considerable assistance. With this package, one can easily give values for some of the layout parameters, and the rest will be set automatically, taking into account the total paper size. For example, to set \textwidth to 15 cm and \textheight to 25 cm on A4 paper, one gives \usepackage{geometry} \geometry{a4paper,textwidth=15cm,textheight=25cm} which will also automatically set \oddsidemargin and \topmargin so that the text is centered horizontally and vertically, including the head and footlines. Or, one can set all the margins to be 1 inch on US letter paper with \geometry{letterpaper,margin=1in} Rather than using the \geometry command, one may also place the parameters as options to \usepackage, for example as \usepackage[a4paper,left=3cm,right=2cm]{geometry} to set the left and right margins to definite values, and \textwidth to what is left over. In general, all the parameters in Figure 3.1 may be specified by geometry by giving their names (without the backslash character). However, the package is far more powerful than that. Here we describe the essential features of version 2.3 from 2000/06/28. • The paper size is either inherited from the \documentclass option, given as a predefined option like a4paper, given explicitly as 50 Chapter 3. Document Layout and Organization paperwidth=pwidth and paperheight=pheight, or as papersize= {pwidth,pheight}. • By default, the other layout parameters are set so that \textwidth is 80% of \paperwidth and \textheight + \headheight + \headsep + \footskip is 90% of \paperheight, centered horizontally and vertically. • The text width and height may be set explicitly with width=width and height=height, or with body={width,height}. The margins are then set to center. Here height means total text height including head and footlines. • Margins may be explicitly given with left=lmarg and right=rmarg, or with hmargin={lmarg,rmarg}. Similarly with top=tmarg and bottom=bmarg, or vmargin={tmarg,bmarg}. If only one value of a pair is given, the other is set to that same value, unless the corresponding text height or width has been given explicitly. All margins may be set to a common value with margin=marg. Unlike LATEX standard \oddsidemargin and \topmargin, geometry’s margins are measured from the edge of the paper, and not from a point 1 inch removed. • With nohead, nofoot, noheadfoot, one tells geometry not to include the corresponding head or footline in the height calculation. Thus with noheadfoot, the total height is identical to \textheight. • With includemp, the marginal note parameters \marginparwidth and \marginparsep (Section 4.10.5) are included in the total width calculation, which is then less than \textwidth. With reversemp, the marginal notes appear in the left margin. • The text width and height may be set to a fraction of the paper size with hscale=h and vscale=v, or scale={h,v}. With scale=s, both h and v are set to s. For example, \geometry{scale=0.8} sets width and height to 80% of \paperwidth and \paperheight respectively. • For two-sided output, add the option twoside. In this case, the values of the left and right margins will switch for even page numbers. In addition, a quantity of 20 pt is added to and subtracted from the left margin of odd and even pages, respectively. This value may be changed with twosideshift=shift, which also sets the twoside option automatically. • With the verbose option, the calculated values of all the layout parameters are printed to the monitor and to the transcript file. 3.2. Page style 51 As you see, the geometry package is an enormous aid to setting the page layout, working fairly intuitively, automatically setting values for the unspecified parameters in a way that is normally what one would want anyway. There are many more aspects explained in the accompanying documentation, but the above synopsis should cover most requirements. 3.2.7 Single and double column pages The document class option twocolumn sets the entire document in two columns per page. The default is one column per page. Individual pages may be output in one or two columns with the declarations: \twocolumn[header text] Terminates the current page, starting a new one with two columns per page. The optional header text is written at the top of the page in one column with the width of the whole page. \onecolumn Terminates the current two-column page and continues with one column per page. ! ! ! The option twocolumn automatically changes certain page style parameters, such as indentation, compared with the one-column format. This does not occur with the command \twocolumn. These additional changes must be made with the corresponding \setlength declarations if they are desired. If the bulk of the document is in two-column format, the class option is to be preferred. An additional page style parameter is \columnwidth, the width of one column of text. For single column text, this is the same as \textwidth, but when twocolumn has been selected, LATEX calculates it from the values of \textwidth and \columnsep. The author should never change this parameter, but he or she may make use of it, for example to draw a rule the width of a column of text. The length \linewidth is even more general, always containing the text line width in the current environment, minipage, parbox. Within a single column, it is the same as \columnwidth. It too may never be changed. 3.2.8 Multicolumn text Package: multicol The commands \twocolumn and \onecolumn always start a new page, and when two-column text is terminated, the two columns are of unequal length. These problems are solved with the multicol package in the tools collection, written by Frank Mittelbach, which also allows up to 10 columns of text. Once this package has been loaded, one can switch the number of columns in the middle of a page with \begin{multicols}{num cols}[header text][pre space] Text set in num cols columns \end{multicols} 52 Chapter 3. Document Layout and Organization where the optional header text is written across all the columns before switching to multicolumns. Some automatic control for page breaking before and after switching to multicolumns is offered by the two lengths \premulticols and \postmulticols: if the remaining space on the current page is less than \premulticols, a new page is started before switching to multicolumns. Similarly, if at the end of the environment, there is less than \postmulticols on the page, a page break is inserted before continuing. The standard values of these lengths may be altered by the user with \setlength, or in the case of \premulticols may be overridden by the second optional argument pre space. The lengths \columnsep and \columnseprule that apply to twocolumn texts are also in effect for the multicols environment, to set the widths of the gap between columns and a possible separating rule, respectively. There is also a starred version \begin{multicols*}{num cols}. . . \end{multicols*} for which the columns on the last page are not balanced, with all the remaining space put into the final column. 3.3 Parts of the document Every document is subdivided into chapters, sections, subsections, and so on. There can be an appendix at the end and at the beginning a title page, table of contents, an abstract, etc. LATEX has a number of markup commands available to indicate these structures. In addition, sequential numbering and sub-numbering of headings take place automatically. Even a table of contents may be produced with a single command. The effects of some sectioning commands depend on the selected document class and not all commands are available in every class. 3.3.1 Title page A title page can be produced either unformatted with the environment \begin{titlepage} Title page text \end{titlepage} or with the commands \title{Title text} \author{Author names and addresses} \date{Date text} \maketitle in the preprogrammed LATEX style. In the standard LATEX layout for the title page, all entries are centered on the lines in which they appear. If the title is too long, it will be broken 3.3. Parts of the document 53 \title{% How to Write DVI Drivers} \author{% Helmut Kopka\thanks{Tel. [+49] 5556--401--451}\\ Max--Planck--Institut\\ f\"ur Aeronomie \and Phillip G. Hardy \thanks{Tel. [+1] 319--824--7134}\\ University\\of Iowa} How to Write DVI Drivers Helmut Kopka1 Max–Planck–Institut für Aeronomie Phillip G. Hardy2 University of Iowa January 15, 2004 \maketitle 1 Tel. [+49] 5556–401–451 2 Tel. [+1] 319–824–7134 Figure 3.2: Sample title page and the text that produced it up automatically. The author may select the break points himself with the \\ command, that is, by giving \title{...\\...\\...}. If there are several authors, their names may be separated with \and from one another, such as \author{G. Smith \and J. Jones}. These names will be printed next to each other in one line. The sequence \author{Author1\\Institute1\\Address1 \and Author2\\Institute2\\Address2} separately centers the entries, one per line, in each of the sets Author1, Institute1, Address1 and Author2, Institute2, Address2 and places the two blocks of centered entries beside each other on the title page. Instead of printing the author names next to each other, one may position them on top of one another by replacing \and with the \\ command. In this case, the vertical spacing may be adjusted with an optional length specification [space] following the \\. If the command \date is omitted, the current date is printed automatically below the author entries on the title page. On the other hand, the command \date{Date text} puts the text Date text in place of the current date. Any desired text may be inserted here, including line break commands \\ for more than one line of centered text. 54 Chapter 3. Document Layout and Organization The command \thanks{Footnote text} may be given at any point in the title, author, or date text. This puts a marker at that point where the command appears and writes footnote text as a footnote on the title page. The title page is created using the entries in \title, \author, \date, and \thanks when the command \maketitle is issued. The title page itself does not possess a page number and the first page of the following document is number 1. (For book, the page numbering is controlled by the special commands in Section 3.3.5.) A separate title page is only produced for document classes book and report. For article, the command \maketitle creates a title heading on the first page using the centered entries from the \title, \author, and, if present, \date and \thanks declarations. If the document class option titlepage has been given, the title appears on a separate page even for the article class. An example of a title page in the standard LATEX format is shown in Figure 3.2 on the previous page. Note that the current date appears automatically since the command \date is missing in the definition of the title page. This command may be used to put any desired text in place of the date. For the unformatted title page produced with the titlepage environment, the commands \title and \author are left out and the entire title page is designed according to the author’s specifications within the environment. To this end he or she may make use of all the structuring commands described in Chapter 4. In this case the printing of the title page is implemented at the end of the titlepage environment, so the command \maketitle is also left out. Exercise 3.8: Remove the declarations for changing the page format in Exercises 3.5–3.7. Add to your exercise text a title heading with the title ‘Exercises’, your name as author, and your address, together with a date entry in the form ‘place, date’. To do this, write the following commands after \begin{document}: \title{Exercises} \author{Your name\\Your address} \date{Your town, \today} \maketitle Make sure that you have selected document class article. After printing the document, change the document class command to \documentclass[titlepage]{article} to put the title information on to a title page instead of a title heading. Deactivate these commands by putting the comment character % at the beginning of each of the lines. In this way you avoid getting a title page in the following exercises but you can easily reactivate the commands simply by removing the % characters. 3.3. Parts of the document 3.3.2 55 Abstract The abstract is produced with the command \begin{abstract} Text for the abstract \end{abstract} In document class report, the abstract appears on a separate page without a page number; in article, it comes after the title heading on the first page, unless the document class option titlepage has been selected, in which case it is also printed on a separate page. An abstract is not possible in document class book. 3.3.3 Sections The following commands are available for producing automatic, sequential sectioning: \part \chapter \section \subsection \subsubsection \paragraph \subparagraph With the exception of \part, these commands form a sectioning hierarchy. In document classes book and report, the highest sectioning level is \chapter. The chapters are divided into sections using the \section command, which are further subdivided by means of \subsection, and so on. In document class article, the hierarchy begins with \section since \chapter is not available. The syntax of all these commands is \sec command[short title]{title} \sec command*{title} or In the first case, the section is given the next number in the sequence, which is then printed together with a heading using the text title. The text short title becomes the entry in the table of contents (Section 3.4) and the page head (provided that page style headings has been selected). If the optional short title is omitted, it is set equal to title; this is the normal situation unless title is too long to serve for the other entries. In the second (*-form) case, no section number is printed and no entry in the table of contents is made (however, see Section 3.4.3). The size of the title heading and the depth of the numbering depend on the position of the sectioning command within the hierarchy. For document class article, the \section command generates a single number (say 7), the \subsection command a double number with a period between the two parts (say 7.3), and so on. In document classes book and report, the chapter headings are given a single number with the \chapter command, the \section command creates the double number, and so on. Furthermore, the command \chapter always starts a new page and prints Chapter n over the chapter title, where 56 Chapter 3. Document Layout and Organization n is the current chapter number. At this point in the present book, we are in Chapter 3, Section 3.3, Subsection 3.3.3. For each sectioning command there is an internal counter that is incremented by one every time that command is called, and reset to zero on every call to the next higher sectioning command. These counters are not altered by the *-forms, a fact that can lead to difficulties if standard and *-forms of the commands are mixed such that the *-forms are higher in the hierarchy than the standard forms. There are no problems, however, if the *-forms are always lower than the standard forms. The sequence \section ... \subsection ... \subsubsection* ... numbers the headings for \section and \subsection while leaving the headings for \subsubsection without any numbering. The sectioning command \part is a special case and does not affect the numbering of the other commands. The automatic numbering of sections means that the numbers might not necessarily be known at the time of writing. The author may be writing them out of their final order, or might later introduce new sections or even remove some. If he or she wants to refer to a section number in the text, some mechanism other than typing the number explicitly will be needed. The LATEX cross-reference system, described in detail in Section 9.2.1, accomplishes this task with the two basic commands \label{name} \ref{name} the first of which assigns a keyword name to the section number, while the second may be used as reference in the text for printing that number. The keyword name may be any combination of letters, numbers, or symbols. For example, in this book the command \label{sec:xref} has been typed in at the start of Section 9.2.1, so that this sentence contains the input text at the start of Section \ref{sec:xref}. A second referencing command is \pageref for printing the page number where the corresponding \label is defined. The referencing commands may be used in many other situations for labeling items that are numbered automatically, such as figures, tables, equations. ! Every sectioning command is assigned a level number such that \section is always level 1, \subsection level 2, . . . \subparagraph level 5. In document class article, \part is level 0 while in book and report classes, \part is level −1 and \chapter becomes level 0. Section numbering is carried out down to the level given by the number secnumdepth. This limit is set to 2 for book and report, and to 3 for article. This means that for book and report, the section numbering extends only to the level of \subsection and for article to \subsubsection. In order to extend (or reduce) the level of the section numbering, it is necessary to change the value of secnumdepth. This is done with the command \setcounter{secnumdepth}{num} 3.3. Parts of the document 57 (The command \setcounter is explained in Section 8.1.) In article, num may take on values from 0 to 5, and in book and report from −1 to 5. It is possible to change the initial value of a sectioning command within a document with the command \setcounter{sec name}{num} where sec name is the name of the sectioning command without the preceding \ character. This procedure may be useful when individual sections are to be processed by LATEX as single files. For example, \setcounter{chapter}{2} sets the \chapter counter to 2. The counter will be incremented on the next call to \chapter which then produces Chapter 3. 3.3.4 Appendix An appendix is introduced with the declaration \appendix It has the effect of resetting the section counter for article and the chapter counter for book and report and changing the form of the numbering for these sectioning commands from numerals to capital letters A, B, . . . . Furthermore, the word ‘Chapter’ is replaced by ‘Appendix’ so that subsequent chapter headings are preceded by ‘Appendix A’, ‘Appendix B’, etc. The numbering of lower sectioning commands contains the letter in place of the chapter number, for example A.2.1. 3.3.5 Book structure To simplify the structuring of a book, the commands \frontmatter preface, table of contents \mainmatter main body of text \backmatter bibliography, index, colophon are provided in the book class. The \frontmatter command switches page numbering to Roman numerals and suppresses the numbering of chapters; \mainmatter resets the page numbering to 1 with Arabic numbers and reactivates the chapter numbering; this is once again turned off with \backmatter. Exercise 3.9: Insert at the beginning of your exercise text the command \section{Title A} and at some appropriate place near the middle \section{Title B}. Select some suitable text for Title A and Title B. Insert at appropriate places 58 Chapter 3. Document Layout and Organization some \subsection commands with reasonable subtitles. Remove the commands included from Exercise 3.3: \pagestyle{myheadings} \markright{Exercises} \pagenumbering{Roman} and print the results. Exercise 3.10: Include the additional command \chapter{Chapter title} with your own appropriate Chapter title before your first \section command. Change the document class command to \documentclass[twoside]{report} and call the page style command \pagestyle{headings} in the preamble. Note the twofold effect of the sectioning commands in the headings and in the page headlines. Compare the results with the table in Section 3.2.1. Exercise 3.11: Change the chapter command to \chapter[Short form]{Chapter title} by putting an abbreviated version of Chapter title for Short form. Now the page head contains the shortened title where the full chapter title previously appeared. 3.4 Table of contents 3.4.1 Automatic entries LATEX can prepare and print a table of contents automatically for the whole document. It will contain the section numbers and corresponding headings as given in the standard form of the sectioning commands, together with the page numbers on which they begin. The sectioning depth to which entries are made in the table of contents can be set in the preamble with the command \setcounter{tocdepth}{num} The value num has exactly the same meaning and effect as it does for the counter secnumdepth described above, by which the maximum level of automatic subsectioning is fixed. By default, the depth to which entries are included in the table of contents is the same as the standard level to which automatic sectioning is done: that is, to level \subsection for book and report and to level \subsubsection for article. 3.4.2 Printing the table of contents The table of contents is generated and printed with the command \tableofcontents 3.4. Table of contents 59 given at the location where the table of contents is to appear, which is normally after the title page and abstract. This leads to a paradox, for the information in the table of contents is to be printed near the beginning of the document, information that cannot be known until the end. LATEX solves this problem as follows: the first time the document is processed, no table of contents can be included but instead LATEX opens a new file with the same name as the source file but with the extension .toc; the entries for the table of contents are written to this file during the rest of the processing. The next time LATEX is run on this document, the \tableofcontents command causes the .toc file to be read and the table of contents is printed. As the processing continues, the .toc file is updated in case there have been major changes since the previous run. This means that the table of contents that is printed is always the one corresponding to the previous version of the document. For this reason, it may be necessary to run LATEX more than once on the final version. 3.4.3 ! Additional entries The *-form sectioning commands are not entered automatically in the table of contents. To insert them, or any other additional entry, the commands \addcontentsline{toc}{sec name}{entry text} \addtocontents{toc}{entry text} may be used. With the first command, the entries will conform to the format of the table of contents, whereby section headings are indented more than those for chapter but less than those for subsection. This is determined by the value of the argument sec name, which is the same as one of the sectioning commands without the \ character (for example, section). The entry text is inserted in the table of contents along with the page number. This command is most useful to enter unnumbered section headings into the table of contents. For example, \section*{Author addresses} \addcontentsline{toc}{section}{Author addresses} The \addtocontents command puts any desired command or text into the .toc file. This could be a formatting command, say \newpage, which takes effect when the table of contents is printed. 3.4.4 ! Other lists In addition to the table of contents, lists of figures and tables can also be generated and printed automatically by LATEX. The commands to produce these lists are \listoffigures reads and/or produces file.lof \listoftables reads and/or produces file.lot 60 Chapter 3. Document Layout and Organization The entries in these lists are made automatically by the \caption command in the figure and table environments (see Section 7.4). Additional entries are made with the same commands as for the table of contents, the general form of which is \addcontentsline{file}{format}{entry} \addtocontents{file}{entry} where file stands for one of the three types toc (table of contents), lof (list of figures), or lot (list of tables). The argument format is one of the sectioning commands for the table of contents, as described above, or figure for the list of figures, or table for the list of tables. The argument entry stands for the text that is to be inserted into the appropriate file. Exercise 3.12: In your exercise file, insert after the deactivated title page commands \pagenumbering{roman} \tableofcontents \newpage \pagenumbering{arabic} Process your exercise file twice with LATEX and print out the second results. Deactivate the above commands with % before doing the next run. Displayed Text 4 There are a variety of ways to display or emphasize the text: changing font style or font size, centering, indentation, marking the paragraphs, and so on. LATEX supplies us with commands for the most common forms of display. Many parts of this chapter violate the concept of logical markup, especially those dealing with selection of fonts. The author should not attempt to decorate the document with arbitrary switches of font size and style, but should pack his or her source text into a structure that indicates its purpose. The exercises in this book are an example of this. Rather than starting each one with the word ‘Exercise’ in bold face followed by an explicit number, and then shifting to a slanted font, we defined an exercise environment to do all that automatically. This not only ensures consistency, it also allows a change of style to be easily implemented, simply by redefining the environment. This is where the typographical font commands come into play. They should not appear in the main text at all, but rather in the preamble as part of the definitions of environments and commands. On the other hand, many of the topics in this chapter really do involve logical markup, such as the verse, quote, and quotation environments, lists, bibliographies, theorems, and tables. 4.1 Changing font In typography, a set of letters, numbers, and characters of a certain size and appearance is called a font. The standard font in LATEX for the main body of text is an upright, Roman one of medium weight, in the size specified in the \documentclass statement at the start. The three possible basic sizes are 10, 11, and 12 pt, depending on the size options 10pt (default), 11pt, and 12pt. (Recall, there are 72.27 points per inch or about 28.45 pt per cm.) The parenthesis characters ( ) extend the full height and depth of the font size. 61 62 Chapter 4. Displayed Text The differences in the visual appearance of the three standard sizes are greater than would be expected from the ratios of the numbers: This is an example of the 10 pt font. ( ) And this is the 11 pt font for comparison. ( ) And finally this is a sample of 12 pt font. ( ) 4.1.1 Emphasis The usual way to emphasize text in a typewritten manuscript is by underlining. The typesetter will transform underlined text into italics for the printed version. Switching from standard to emphasized text is carried out in LATEX with the command \emph or the declaration \em. The \em declaration functions just as the other font declarations described below: the change of font remains in effect until negated by another appropriate declaration (which can be \em itself), or until the end of the current environment (Section 2.2). An environment may also be created with a pair of curly braces {...}. The command \emph, on the other hand, operates only on the text in the following argument. This is easiest way to emphasize short pieces of text, as for example: This is the easiest way to \emph{emphasize} short ... The \em declaration is more appropriate for longer text that is enclosed in an environment, named or nameless. ...enclosed in an environment, {\em named or nameless.} Note carefully the difference between the declaration that remains in effect until the local environment is ended with the closing curly brace, and the command that operates on an argument enclosed in curly braces. Another more subtle difference is that the command \emph automatically inserts extra spacing at the end if necessary, the so-called italic correction, to improve the appearance at the interface between sloping and upright fonts. Both the declaration and the command switch to an emphasizing font. That means, if the current font is upright it switches to italics, whereas if the text is already slanted, an upright font is selected. Nested emphasis is possible and is simple to understand: The \emph{first}, second, and \emph{third font switch} The {\em first, {\em second, and {\em third font switch}}} both produce ‘The first, second, and third font switch’. 4.1.2 Choice of font size The following declarations are available in LATEX for changing the font size: 4.1. Changing font \tiny \scriptsize \footnotesize \small \normalsize \large smallest very small smaller small normal large \Large larger \LARGE even larger \huge still larger \Huge largest 63 all of which are relative to the standard size selected in the document class option. In this book, the standard size is 10 pt, which is then the size selected with \normalsize. The font size declarations behave as all other declarations: they make an immediate change that remains in effect until counteracted by another size declaration, or until the current environment comes to an end. If issued within curly braces {..}, the effect of the declaration extends only to the closing brace, as in a nameless environment: normal {\large large \Large larger} normal again normal large ! larger normal again Changing the font size with one of the above commands also automatically changes the interline spacing. For every font size, there is a corresponding natural line spacing \baselineskip. This may be altered at any time. If the natural line spacing is 12 pt, the command \setlength{\baselineskip}{15pt} will increase it to 15 pt. The value of \baselineskip that is effective at the end of the paragraph is used to make up the whole paragraph. This means that if there are several changes to \baselineskip within a paragraph, only the last value given will be taken into account. With every change in font size, \baselineskip is reset to its natural value for that size. Any previous setting with \setlength will be nullified. In order to create a change in the line spacing that is valid for all font sizes, one must make use of the factor \baselinestretch, which has a normal value of 1. The true interline spacing is really \baselinestretch×\baselineskip which maintains the same relative spacing for all font sizes. The user may change this spacing at any time with: \renewcommand{\baselinestretch}{factor} where factor is any decimal number. A value of 1.5 increases the interline spacing (baseline to baseline) by 50% over its natural size for all font sizes. The new value of \baselinestretch does not take effect until the next change in font size. In order to implement a new value in the current font size, it is necessary to switch to another size and back again immediately. If the present font size is \normalsize, the sequence \small\normalsize will do the trick. Any size command may be used in place of \small. 64 Chapter 4. Displayed Text 4.1.3 Font attributes The size of a font is only one of several attributes that may be used to describe it. With the New Font Selection Scheme (NFSS), which was introduced as part of LATEX 2ε , it is possible to select fonts strictly by these attributes, as described in Appendix A. However, for normal usage, there are some declarations and corresponding commands to simplify this procedure. For the Computer Modern fonts provided with TEX and LATEX, the following attributes and values exist: Family: for the general overall style. Traditional typographical families have names like Baskerville, Bodoni, Times Roman, Helvetica, and so on. The standard LATEX installation provides three families with declarations \rmfamily to switch (back) to a Roman font; \ttfamily to switch to a typewriter font; \sffamily to select a sans serif font. Shape: for the form of the font. The shape declarations available with the standard installation are \upshape \itshape \slshape \scshape to to to to switch (back) to an upright font; select an italic shape; choose a font that is slanted; switch to Caps and Small Caps. Series: for the width and/or weight (boldness) of the font. The declarations possible are \mdseries to switch (back) to medium weight; \bfseries to select a bold face font. These do not exhaust all the possible attribute settings, but they do cover the most standard ones, especially for the Computer Modern fonts. For other fonts, especially PostScript ones, additional attribute values exist. See Section A.1 for more details. These declarations are used just like any others, normally enclosed in a pair of curly braces {...}, such as {\scshape Romeo and Juliet} producing Romeo and Juliet. For longer sections of text, an environment is preferable: \begin{font style} . . . text in new font . . . \end{font style} This keeps better track of the beginning and end of the switch-over. For font style, any of the above font commands may be used, leaving off the initial \ character. Since changing any one attribute leaves the others as they were, all possible combinations may be obtained. (However, this does not mean 4.1. Changing font 65 that a font exists for each possible combination; if not, a substitution will be made.) If we select first a bold series with \bfseries, and then a slanted shape with \slshape, we obtain a bold, slanted font. normal and {\bfseries bold and {\slshape slanted} and back} again. produces: normal and bold and slanted and back again. Finally, the declaration \normalfont resets all the attributes (except size) back to their defaults: Roman, upright, medium weight. It is often useful to issue this command just to be sure of the font in effect. 4.1.4 Font commands For each of the font declarations listed above, there is a corresponding font command that sets its argument in a font with the specified attribute. Family: Shape: Series: Default: Emphasis: \textrm{text} \textup{text} \textsc{text} \textmd{text} \textnormal{text} \emph{text} \texttt{text} \textit{text} \textsf{text} \textsl{text} \textbf{text} Note that the \emph command is included here, corresponding to the declaration \em. The argument of \textnormal is set in the standard font selected with \normalfont. The use of such commands to change the font for short pieces of text, or single words, is much more logical than placing a declaration inside an implied environment. The previous example now becomes normal and \textbf{bold and \textsl{slanted} and back} again. to make: normal and bold and slanted and back again. As for the \emph command, these font commands automatically add any necessary italic correction between upright and slanted/italic fonts. The old two-letter TEX declarations such as \bf and \tt, which were part of LATEX 2.09, are still available but are now considered obsolete and should be avoided. They are listed for reference in Appendix F. 4.1.5 ! Additional fonts It is likely that your computing center or your TEX installation has even more fonts and sizes than those listed above. If so, they may be made available for use within a LATEX document either by referring to them by name, or by their attributes, if they have been set up for NFSS. To load a new font explicitly by name, the command 66 Chapter 4. Displayed Text \newfont{\fnt}{name scaled factor} \newfont{\fnt}{name at size} or is given, which assigns the font to the new command named \fnt. In the first case, factor is a number 1000 times the scaling factor that is to be used to magnify or reduce the font from its basic or design size. In the second case, the font is scaled to be of the size specified. To install a slanted, sans serif font of size 20.74 pt, as \sss, we load cmssi17 at 20.74pt with \newfont{\sss}{cmssi17 at 20.74pt} Now the declaration \sss switches directly to this font but without altering the baseline separation. Alternatively, the new font declaration can be made by attributes with (see Section A.3.2) \DeclareFixedFont{\sss}{OT1}{cmss}{m}{sl}{20.74} Indeed, if one wants to use the current encoding and \sffamily without knowing what they are, or without worrying so precisely what size must be stated, it is also possible to give \DeclareFixedFont{\sss}{\encodingdefault}{\sfdefault} {m}{sl}{20} (The defaults are explained in Section A.3.1.) 4.1.6 ! Character sets and symbols The individual character sets are each stored in their own files. The names of the 75 standard TEX fonts are listed in Section G.2.2, where many of them are also printed out. Each symbol within a character set is addressed by means of a number between 0 and 127 (or 255). The command \symbol{num} will produce that symbol with the internal identification number num in the current font. The symbol ¿ in the present font has the internal number 62 and can be printed with the command \symbol{62}. The identification number may also be given as an octal (prefix ’) or hexadecimal (prefix ") number. Thus the symbol commands \symbol{28}, \symbol{’34}, and \symbol{"1C} are all identical, producing ‘ø’. The \symbol command may also be used to generate symbols for which no other command has been defined: for example, {\ttfamily\symbol{’40} \symbol{’42} \symbol{’134}} produces " \ in typewriter font. Section G.2.2 presents the assignments of the identification numbers with the characters for the different symbol families. 4.2. Centering and indenting 4.2 Centering and indenting 4.2.1 Centered text 67 The environment \begin{center} line 1 \\ line 2 \\ . . . line n \end{center} centers the sections of text that are separated by the \\ command. (An optional additional line spacing may be inserted with \\[len].) If the text is too long for one line, it is split over several lines using uniform word spacing, filling the whole line width as best it can, except for the last line. Word division does not occur. Within an environment, the command \centering may be used to center the following text, again with \\ as the line divider. The effect of this declaration lasts until the end of that environment. A single line may be centered by typing its text as the argument of the TEX command \centerline{text}. 4.2.2 One-sided justification The environments \begin{flushleft} line 1 \\ line 2 \\ . . . line 2 \end{flushleft} \begin{flushright} line 1 \\ line 2 \\ . . . line 2 \end{flushright} produce text that is left (flushleft) or right (flushright) justified. If a section of text does not fit on to one line, it is spread over several with fixed word spacing, the same as for the center environment. Again, word division does not occur. The same results may be produced within an environment with the declarations \raggedright replacing the flushleft environment, and \raggedleft replacing the flushright environment. 4.2.3 Two-sided indentation A section of text may be displayed by indenting it by an equal amount on both sides, with the environments \begin{quote} text \begin{quotation} text \end{quote} \end{quotation} Additional vertical spacing is inserted above and below the displayed text to separate it visually from the normal text. The text to be displayed may be of any length; it can be part of a sentence, a whole paragraph, or several paragraphs. 68 Chapter 4. Displayed Text Paragraphs are separated as usual with an empty line, although no empty lines are needed at the beginning and end of the displayed text since additional vertical spacing is inserted here anyway. The difference between the above two forms is thus: In the quotation environment, paragraphs are marked by extra indentation of the first line, whereas in the quote environment, they are indicated with more vertical spacing between them. The present text is produced within the quotation environment, while the sample above was done with the quote environment. The quotation environment is only really meaningful when the regular text makes use of first-line indentation to show off new paragraphs. 4.2.4 Verse indentations For indenting rhymes, poetry, verses, etc. on both sides, the environment \begin{verse} poem \end{verse} is more appropriate. Stanzas are separated by blank lines while the individual lines of the stanza are divided by the \\ command. If a line is too long for the reduced text width, it will be left and right justified and continued on the next line, which is indented even further. The above indenting schemes may be nested inside one another. Within a quote environment there may be another quote, quotation, or verse environment. Each time, additional indentations are created on both sides of the text and vertical spacing is added above and below; these quantities however decrease as the depth of nesting increases. A maximum of six such nestings is allowed. Exercise 4.1: Put some appropriate sections of text in your exercise file into the quote and quotation environments, that is, enclose these sections within \begin{quote} . . . . . . . \end{quote} or \begin{quotation} . . . . . \end{quotation} commands. 4.3. Lists 69 Exercise 4.2: Make up a new file with the name poem.tex and type your favorite poem in the verse environment. Select 12pt as the standard font size and italic as the typeface. Put the title of the poem before the verse environment in a larger bold typeface, such as \Large\bfseries. Include the name of the poet right justified. Note: remember that you may include declarations to change the font style or size within an environment and that these remain in effect only until the end of that environment. Exercise 4.3: Make up another file with the name title.tex. Do you recall the titlepage environment for producing a free-form title page? If not, refer to Section 3.3.1. Create a title page with this environment using font sizes and styles of your choice, centering all the entries. Note: within the titlepage environment you may of course make use of the center environment, but it is also sufficient to give the \centering declaration instead, since this will remain in effect only until the end of the titlepage environment. Choose the individual line spacings with the command \\[len] using an appropriate value for the spacing len. Remember that vertical spacing before the first line of text must be entered with the *-form of the command \vspace*[len] (see Section 2.7.3). Experiment with different font sizes and styles for the various parts of the title page, such as title, author’s name, address, until you are satisfied with the results. Compare your own title page with that of Exercise 3.8. If your creation appeals to you more, include it in your standard exercise file by replacing the commands \title, \author, \date, and \maketitle with the titlepage environment and your own entries. 4.3 Lists There are three environments available for producing formatted lists: \begin{itemize} \begin{enumerate} \begin{description} list text list text list text \end{itemize} \end{enumerate} \end{description} In each of these environments, the list text is indented from the left margin and a label, or marker, is included. What type of label is used depends on the selected list environment. The command to produce the label is \item. 4.3.1 Sample itemize • The individual entries are indicated with a black dot, a so-called bullet, as the label. 70 Chapter 4. Displayed Text • The text in the entries may be of any length. The label appears at the beginning of the first line of text. • Successive entries are separated from one another by additional vertical spacing. The above text was produced as follows: \begin{itemize} \item The individual entries are indicated with a black dot, a so-called \emph{bullet}, as the label. \item The text in the entries may be of any length. The label appears at the beginning of the first line of text. \item Successive entries are separated from one another by additional vertical spacing. \end{itemize} 4.3.2 Sample enumerate 1. The labels consist of sequential numbers. 2. The numbering starts at 1 with every call to the enumerate environment. The above example was generated with the following text: \begin{enumerate} \item The labels consist of sequential numbers. \item The numbering starts at 1 with every call to the \texttt{enumerate} environment. \end{enumerate} 4.3.3 Sample description purpose This environment is appropriate when a number of words or expressions are to be defined. example A keyword is used as the label and the entry contains a clarification or explanation. other uses It may also be used as an author list in a bibliography. The above sample was created using the following: \begin{description} \item[purpose] This environment is appropriate when a number of words or expressions are to be defined. \item[example] A keyword is used as the label and the entry contains a clarification or explanation. \item[other uses] It may also be used as an author list in a bibliography. \end{description} 4.3. Lists 71 The \item[option] command contains an optional argument that appears in bold face as the label. 4.3.4 Nested lists The above lists may be included within one another, either mixed or of one type, to a depth of four levels. The type of label used depends on the depth of the nesting. The indentation is always relative to the left margin of the enclosing list. A fourfold nesting of the itemize environment appears as follows: • The label for the first level is a black dot, a bullet. – That of the second level is a long dash. ∗ That of the third level is an asterisk. · And the label for the fourth level is a simple dot. · At the same time, the vertical spacing is decreased with increasing depth. ∗ Back to the third level. – Back to the second level. • And here we are at the first level of itemize once again. Similarly for the enumerate environment, where the style of the numbering changes with the nesting level: 1. The numbering at the first level is with Arabic numerals followed by a period. (a) At the second level, it is with lower case letters in parentheses. i. The third level is numbered with lower case Roman numerals with a period. A. At the fourth level, capital letters are used. B. The label style can be changed, as described in the next section. ii. Back to the third level. (b) Back to the second level. 2. And the first level of enumerate again. An example of a nested list with mixed types: • The itemize label at the first level is a bullet. 1. The numbering is with Arabic numerals since this is the first level of the enumerate environment. 72 Chapter 4. Displayed Text – This is the third level of the nesting, but the second itemize level. (a) And this is the fourth level of the overall nesting, but only the second of the enumerate environment. (b) Thus the numbering is with lower case letters in parentheses. – The label at this level is a long dash. 2. Every list should contain at least two points. • Blank lines ahead of an \item command have no effect. The above mixed list was produced with the following text: \begin{itemize} \item The \texttt{itemize} label at the first level is a ... \begin{enumerate} \item The numbering is with Arabic numerals since this ... \begin{itemize} \item This is the third level of the nesting, but the ... \begin{enumerate} \item And this is the fourth level of the overall ... \item Thus the numbering is with lower case letters ... \end{enumerate} \item The label at this level is a long dash. \end{itemize} \item Every list should contain at least two points. \end{enumerate} \item Blank lines ahead of an \verb+\item+ command ... \end{itemize} Exercise 4.4: Produce a nested list using the itemize and enumerate environments as in the above example, but with a different sequence of these commands. Exercise 4.5: Prepare a list of conference participants with their place of residence using the description environment, where the name of the participant appears as the argument in the \item command. Note: for all three types of lists, any text before the first \item command will yield an error message on processing. 4.3.5 Changing label style The labels, or markers, used in the itemize and enumerate environments can be easily changed by means of the optional argument in the \item command. With \item[+] the label becomes +, and with \item[2.1:] it is 2.1:. The optional argument takes precedence over the standard 4.3. Lists 73 label. For the enumerate environment, this means that the corresponding counter is not automatically incremented and the user must do the numbering manually. The optional label appears right justified within the area reserved for the label. The width of this area is the amount of indentation at that level less the separation between label and text; this means that the left edge of the label area is flush with the left margin of the enclosing level. It is also possible to change the standard labels for all or part of the document. The labels are generated with the internal commands \labelitemi , \labelitemii , \labelitemiii , \labelitemiv \labelenumi , \labelenumii , \labelenumiii , \labelenumiv The endings i, ii, iii, and iv refer to the four possible levels. These commands may be altered with \renewcommand. For example, to change the label of the third level of the itemize environment from ∗ to +, give \renewcommand{\labelitemiii}{+} Similarly the standard labels for the enumerate environment may be changed. However, here there is an additional complication that there is a counter for each enumerate level, named enumi, enumii, enumiii, and enumiv. As explained in Section 8.1.4, the value of a counter can be printed using one of the commands \arabic, \roman, \Roman, \alph, or \Alph, where the style of each command should be obvious from its name. That is, \Roman{xyz} prints the current value of the counter xyz in upper case Roman numerals, whereas \alph{xyz} prints it as a lower case letter (with a corresponding to 1 and z to 26). These counters, together with the counter style commands, must be used in the redefinitions of the label commands. For example, to change the second-level label to Arabic numerals followed by ‘.)’, it is necessary to give \renewcommand{\labelenumii}{\arabic{enumii}.)} which redefines \labelenumii to the value of counter enumii printed in Arabic, plus the characters ‘.)’. In this way, all the numbering levels may be changed. It is even possible to include more than one counter: \renewcommand{\labelenumii}{\Alph{enumi}.\arabic{enumii}} which will produce for every call to \item at level two the value of the counter enumi as a capital letter followed by the value of counter enumii as a number: that is, in the form A.1, A.2, . . . , B.1, B.2, . . . and so on. If the new standard labels are to apply to the whole document, the redefining commands should be included in the preamble. Otherwise, they are valid only within the environment in which they appear. 74 Chapter 4. Displayed Text Exercise 4.6: Change the standard labels for the itemize environment into a long dash — (written ---) for the first level, to a medium dash – (--) for the second level, and to a hyphen - for the third level. Exercise 4.7: Change the standard labels for the enumerate environment for the first level to (I), (II), . . . , and for the second level to the Roman numerals of the first level followed by the number for the second level in the form I–1:, I–2:, . . . , II–1:, II–2:, . . . . Package: enumerate An alternative method of customizing the enumeration labels is with the enumerate package in the tools collection (Section B.5.4). Once this package has been loaded, the enumerate environment accepts an optional argument specifying the text of the label. The characters A a I i 1 represent the number in alphabetical, Roman, Arabic styles. If these characters appear elsewhere in the label text, they must be in {}. For example, \begin{enumerate}[{Case} A] \item Witness tells the truth \item Witness is lying \end{enumerate} 4.4 =⇒ Case A Witness tells the truth Case B Witness is lying Generalized lists Lists such as those in the three environments itemize, enumerate, and description can be formed in a quite general way. The type of label and its width, the depth of indentation, spacings for paragraphs and labels, and so on, may be wholly or partially set by the user by means of the list environment: \begin{list}{stnd lbl}{list decl} item list \end{list} Here item list consists of the text for the listed entries, each of which begins with an \item command that generates the corresponding label. The stnd lbl contains the definition of the label to be produced by the \item command when the optional argument is missing (see below). The list parameters described in Section 4.4.2 are set by list decl to whatever new values the user wishes. 4.4.1 Standard label The first argument in the list environment defines the stnd lbl, that is, the label that is produced by the \item command when it appears without an argument. In the case of an unchanging label, such as for the itemize environment, this is simply the desired symbol. If this is to be a mathematical symbol, it must be given as $symbol name$, enclosed in $ signs. For example, to select ⇒ as the label, stnd lbl must be defined to be $\Rightarrow$. 4.4. Generalized lists 75 However, the label is often required to contain a sequential numeration. For this purpose, a counter must be created with the \newcounter{name} command, where name is its designation. This command must appear before the first application of the counter in a list environment. Suppose a counter named marker has been defined for this use, then the argument stnd lbl could be any of the commands for printing counters described in Section 4.3.5: for example, \arabic{marker} produces a running Arabic number. Even more complex labels can be made up in this way. If the sequential labels are to be A–I, A–II, . . . , stnd lbl is set to A--\Roman{marker}. Before a counter can function properly within the standard label, it must be associated with that list by including in the list decl the command \usecounter{counter}, where counter is the name of the counter to be assigned (marker in the above example). ! The standard label is actually generated by the command \makelabel{label}, which is called by the \item command. The user can redefine \makelabel with the aid of the \renewcommand in the list declaration: \renewcommand{\makelabel}{new definition} If the standard label is defined in this manner, the corresponding entry in the list environment is left blank. This is because \makelabel is the more general command and overrides the other definition. 4.4.2 List style parameters There are a number of style parameters used for formatting lists that are set by LATEX to certain standard values. These values may be altered by the user in the list decl for that particular list. The assignment is made in the usual way with the \setlength command. However, if the assignment is made outside the list environment, in most cases it will simply be ignored. This is because there are preset default values for each parameter at each level that can only be overridden by list decl. The style parameters are listed below and are also illustrated in Figure 4.1 on the next page, which is based on one taken from Lamport (1985, 1994). \topsep is the vertical spacing in addition to \parskip that is inserted between the list and the enclosing text above and below. Its default value is set at each list level and cannot be globally redefined outside the list decl. \partopsep is the vertical spacing in addition to \topsep + \parskip that is inserted above and below the list when a blank line precedes the first or follows the last \item entry. It may be redefined globally, but only for the first and second levels. 76 Chapter 4. Displayed Text Preceding text 6 \topsep + \parskip [+ \partopsep] \labelsep Label ? - - \rightmargin \labelwidth - \itemindent \leftmargin \listparindent - Item 1 Paragraph 1 6\parsep ? Item 1 Paragraph 2 6\itemsep + \parsep ? Label Item 2 6 \topsep + \parskip [+ \partopsep] ? Following text Figure 4.1: The list parameters \parsep is the vertical spacing between paragraphs of a single \item. Its default value is reset at each level, as for \topsep. \itemsep is the vertical spacing in addition to \parsep that is inserted between two \item entries. As for \topsep and \parsep, its default value is reset at each level and cannot be globally changed. \leftmargin is the distance from the left edge of the current environment to the left margin of the list text. There are default values for it at each level that may be globally redefined, as described in Section 4.4.6. \rightmargin is the distance from the right edge of the current environment to the right margin of the list text. Its standard value is 0 pt, which can only be altered in list decl. \listparindent is the indentation depth of the first line of a paragraph within an \item with respect to the left margin of the list text. It is 4.4. Generalized lists 77 normally set to 0 pt so that no indentation occurs. This can only be changed in list decl. \labelwidth is the width of the box reserved for the label. The text of the label is printed right justified within this space. A new default value may be set globally which then applies to all list levels. \labelsep is the spacing between the label box and the list text. A new value may be assigned globally, but it is only effective at the first level. \itemindent is the distance by which the label and the first line of text in an \item are indented to the right. It is normally set to 0 pt and so has no effect. This value can only be redefined in list decl. When changing the vertical spacings from their standard values, it is recommended that a rubber length (Section 2.4.2) be used. The label created by the \item command normally appears right justified within a box of width \labelwidth. It is possible to make it left justified, as in the following list of parameters, by putting \hfill at the end of the definition of the standard label or in the \makelabel command. 4.4.3 Example of a user’s list List of Figures: Figure 1: Page format with head, body, and foot, showing the meaning of the various elements involved. Figure 2: Format of a general list showing its elements. Figure 3: A demonstration of some of the possibilities for drawing pictures with LATEX. This list was produced with the following input: \newcounter{fig} \begin{list}{\bfseries\upshape Figure \arabic{fig}:} {\usecounter{fig} \setlength{\labelwidth}{2cm}\setlength{\leftmargin}{2.6cm} \setlength{\labelsep}{0.5cm}\setlength{\rightmargin}{1cm} \setlength{\parsep}{0.5ex plus0.2ex minus0.1ex} \setlength{\itemsep}{0ex plus0.2ex} \slshape} \item Page format with head, body, and foot, showing the meaning of the various elements involved. \item Format of a general list showing its elements. \item A demonstration of some of the possibilities for drawing pictures with \LaTeX. \end{list} 78 Chapter 4. Displayed Text The command \newcounter{fig} sets up the counter fig. The standard label is defined to be the word Figure in upright, bold face, followed by the running Arabic number, terminated by :. This label is printed for each \item command. The list declaration contains \usecounter{fig} as its first command, which makes the counter fig operational within the list. The width of the label box (\labelwidth) is set to 2.0 cm, the left margin of the list text (\leftmargin) to 2.6 cm, the distance between the label and the text (\labelsep) to 0.5 cm, and the right edge of the list (\rightmargin) is set to be 1 cm from that of the enclosing text. The vertical spacing between paragraphs within an item (\parsep) is 0.5 ex but can be stretched an extra 0.2 ex or shrunk by 0.1 ex. The additional spacing between items (\itemsep) is 0 ex, stretchable to 0.2 ex. Standard values are used for all the other list parameters. The last command in the list declaration is \slshape, which sets the list text in a slanted typeface. Note: If \upshape were not given in the label definition, the text of each \item would also be slanted, as Figure 1:. 4.4.4 Lists as new environments If a particular type of list is employed several times within a document, it can become tiresome typing the same stnd lbl and list decl into the list environment every time. LATEX offers the possibility of defining a given list as an environment under its own name. This is achieved by means of the \newenvironment command. For example, the list in the above example can be stored so that it may be called at any time with the name figlist: \newenvironment{figlist}{\begin{list} {\bfseries\upshape Figure \arabic{fig}:} {\usecounter{fig} ... {0ex plus0.2ex}\slshape}} {\end{list}} It can then be called with \begin{figlist} item list \end{figlist} so that it behaves as a predefined list environment. Exercise 4.8: Define a new environment with the name sample that produces a list in which every call to \item prints labels Sample A, Sample B, and so on. The labels are to be left justified within a box of width 20mm, and the distance between the label box and the item text is to be 2mm, with a total left margin of 22mm. The right edge of the text is to be moved in 5mm from that of the enclosing text. The extra vertical spacing between two items is to be 1ex plus0.5ex minus0.4ex in addition to the normal paragraph spacing. Secondary paragraphs within an 4.4. Generalized lists 79 item are to be indented by 1em. The normal paragraph separation should be 0ex, expandable to 0.5ex. ! LATEX itself makes frequent use of the list environment to define a number of other structures. For example, the quote environment is defined as \newenvironment{quote}{\begin{list}{} {setlength{\rightmargin}{\leftmargin}} \item[]}{\end{list}} This environment is thus a list in which the value of \rightmargin is set to the current value of \leftmargin which has a default value of 2.5 em. The list itself consists of a single \item call with an empty label, a call that is automatically included in the definition of quote with the entry \item[]. In the same way, LATEX defines the quotation and verse environments internally as special list environments. The left margins and the vertical spacings around the structures are left as the standard values for the list environment, and are therefore changed only when the standard values themselves are altered. Finally, as an example of a possible user-defined special list we offer \newenvironment{lquote}{\begin{list}{}{}\item[]}{\end{list}} which creates an lquote environment that does nothing more than indent its enclosed text by the amount \leftmargin, with the right edge flush with that of the normal text, since \rightmargin has the standard value of 0 pt. 4.4.5 ! Trivial lists LATEX also contains a trivlist environment, with syntax \begin{trivlist} enclosed text \end{trivlist} in which the arguments stnd lbl and list decl are omitted. This is the same as a list environment for which the label is empty, \leftmargin, \labelwidth, and \itemindent are all assigned the value 0 pt, while \listparindent is set equal to \parindent and \parsep to \parskip. LATEX uses this environment to create further structures. For example, the call to the center environment generates internally the sequence \begin{trivlist} \centering \item[] enclosed text \end{trivlist} The environments flushleft and flushright are similarly defined. 4.4.6 Nested lists Lists can be nested within one another with the list environments itemize, enumerate, and description, to a maximum depth of six. At each level, the new left margin is indented by the amount \leftmargin relative to that of the next higher one. ! As mentioned earlier, it is only possible to change the standard values of a limited number of the list parameters with declarations in the preamble. One exception is the indentations of the left margins for the different nesting levels. 80 Chapter 4. Displayed Text These are set internally by the parameters \leftmarginn, where n stands for i, ii, iii, iv, v, or vi. These values can be changed by the user; for example, by declaring \setlength{\leftmarginiv}{12mm}, the left margin of the fourthlevel list is shifted 12 mm from that of the third. These declarations must be made outside of the list environments and not in the list decl. At each level of list nesting, the internal macro \@listn (n being i to vi) is called. This sets the value of \leftmargin equal to that of the corresponding \leftmarginn, unless \leftmargin is explicitly declared in the list environment. That is, there does not exist a single standard value for \leftmargin externally, but rather six different ones. The parameter \leftmargin has meaning only within a list environment. 4.5 Theorem-like declarations In scientific literature one often has text structures like Theorem 1 (Balzano–Weierstrass) Every infinite set of bounded points possesses at least one maximum point. or Axiom 4.1 The natural numbers form a set S of distinct elements. For any two elements a, b, they are either identical, a = b, or different from one another, a ≠ b. Similar structures frequently appear with names such as Definition, Corollary, Declaration, Lemma, instead of Theorem or Axiom. What they have in common is that a keyword and a running number are printed in bold face and the corresponding text in italic. Of course, these could be generated by the user by explicitly giving the type styles and appropriate number, but if a new structure of that type is later inserted in the middle of the text, the user would have the tedious job of renumbering all the following occurrences. With the command \newtheorem{struct type}{struct title}[in counter] LATEX will keep track of the numbering automatically. Here struct type is the user’s arbitrary designation for the structure, while struct title is the word that is printed in bold face followed by the running number (for example, Theorem). If the optional argument in counter is missing, the numbering is carried out sequentially throughout the entire document. However, if the name of an existing counter, such as chapter, is given for in counter, the numbering is reset every time that counter is augmented, and both are printed together, as in Axiom 4.1 above. The predefined structures are called with the command \begin{struct type}[extra title] text \end{struct type} 4.6. Tabulator stops 81 which also increments the necessary counter and generates the proper number. The above examples were produced with \newtheorem{theorem}{Theorem} \newtheorem{axiom}{Axiom}[chapter] . . . . . . . . . . . . . . . . \begin{theorem}[Balzano--Weierstrass] Every .... \end{theorem} \begin{axiom} The natural numbers form ........... \end{axiom} The optional extra title also appears in bold face within parentheses ( ) following the running number. Occasionally a structure is not numbered on its own but together with another structure. This can be included in the definition with another optional argument \newtheorem{struct type}[num like]{struct name} where num like is the name of an existing theorem structure that shares the same counter. Thus by defining \newtheorem{subthrm}[theorem] {Sub-Theorem}, the two structures theorem and subthrm will be numbered as a single series: Theorem 1, Sub-Theorem 2, Sub-Theorem 3, Theorem 4, and so on. For more powerful theorem tools, see the AMS amsthm package (Section 12.3.1) and the theorem package in the tools collection (Section B.5.4). 4.6 Tabulator stops 4.6.1 Basics On a typewriter it is possible to set tabulator stops at various positions within a line; then by pressing the tab key the print head or carriage jumps to the next tab location. A similar possibility exists in LATEX with the tabbing environment: \begin{tabbing} lines \end{tabbing} One can think of the set tab stops as being numbered from left to right. At the beginning of the tabbing environment, no tabs are set, except for the left border, which is called the zeroth tab stop. The stops can be set at any spot within a line with the command \=, and a line is terminated by the \\ command: Here is the \=first tab stop, followed by\= the second\\ sets the first tab stop after the blank following the word the, and the second immediately after the word by. After the tab stops have been set in this way, one can jump to each of the stops in the subsequent lines, starting from the left margin, with the command \>. A new line is started with the usual \\ command. 82 Chapter 4. Displayed Text Example: Type Quality Paper med. Leather good Card bad 4.6.2 Color Price white low brown high gray med. \begin{tabbing} Type\qquad\= Quality\quad\= Color\quad\= Price\\[0.8ex] Paper \> med. \> white \> low\\ Leather \> good \> brown \> high\\ Card \> bad \> gray \> med. \end{tabbing} Sample line It is often advantageous or even necessary to set the tab stops in a sample line that is not actually printed. It could contain, for example, the widest entries in the various columns that appear later, or the smallest intercolumn spacing between stops. The sample line may also contain \hspace commands to force the distance between stops to be a predetermined amount. To suppress the printing of the sample line, it is ended with the command \kill instead of the \\ terminator. \hspace*{3cm}\=sample column \=\hspace{4cm}\= \kill In addition to the left border, the above statement sets three tab stops: Left border 3cm 1st tab stop 2nd tab stop ? ? -sample column 4cm 3rd tab stop ? - An \hspace command at the beginning of a sample line must be of the *-form, otherwise the inserted spacing will be deleted at the line margin. 4.6.3 Tab stops and the left margin The left border of each line of the tabbing environment is at first identical with the left margin of the enclosing environment, and is designated the zeroth stop. By activating the ‘tab key’ \> at the start of a line, one sets the following text beginning at the first tab stop. However, the command \+ has the same effect, putting the left border permanently at the first stop, for all subsequent lines. With \+\+ at the beginning or end of a line, all the next lines will start two stops further along. There can be as many \+ commands in all as there are tab stops set on the line. The command \- has the opposite effect: it shifts the left border for the following lines one stop to the left. It is not possible to set this border to be to the left of the zeroth stop. The effect of the \+ commands may be overridden for a single line by putting \< at the start for each tab to be removed. This line then starts so many tabs to the left of the present border. With the next \\ command, the new line begins at the current left border determined by the total number of \+ and \- commands. 4.6. Tabulator stops 4.6.4 83 Further tabbing commands Tab stops can be reset or added in every line. The command \= will add a stop if there have been sufficient \> commands to have jumped to the last stop, otherwise it will reset the next stop. For example: Old column 1 Old column 2 Left column Middle col Extra col New col 1 New col 2 Old col 3 Column 1 Column 2 Column 3 Old column 1 \= Old column 2\\ Left column \> Middle col \= Extra col\\ New col 1 \= New col 2 \> Old col 3\\ Column 1\> Column 2 \> Column 3 \end{tabbing} Occasionally it is desirable to be able to reset the tab stops and then to reuse the original ones later. The command \pushtabs accomplishes this by storing the current tabs and removing them from the active line. All the tab stops can then be set once again. The stored stops can be reactivated with the command \poptabs. The \pushtabs command may be given as many times as needed, but there must be the same number of \poptabs commands within any one tabbing environment. It is possible to position text on a tab stop with left text \’ right text, where left text goes just before the current tab (or left border) with a bit of spacing, while right text starts exactly at the stop. The amount of spacing between the left text and the tab stop is determined by the tabbing parameter \tabbingsep. This may be changed by the user with the \setlength command as usual. Text may be right justified up against the right border of a line with the command \‘ text. There must not be any more \> or \= commands in the remainder of the line. The commands \=, \‘, and \’ function as accent commands outside of the tabbing environment (Section 2.5.7). If these accents are actually needed within tabbing, they must be produced with \a=, \a‘, and \a’ instead. For example, to produce ó, ò, or ō inside a tabbing environment, one must give \a’o, \a‘o, or \a=o. The command \- also has another meaning outside of the tabbing environment (suggested word division) but since lines are not broken automatically within this environment, there is no need for an alternative form. Here is an example illustrating all the tabbing commands: 84 Chapter 4. Displayed Text Apples: consumed by: people horses and sheep reasonably juicy Grapefruits: a delicacy (see also: melons pumpkins) Horses feed on apples 4.6.5 \begin{tabbing} Grapefruits: \= \kill Apples: \> consumed by: \= people\+\+\\ horses \\ and \’ sheep\-\\ reasonably juicy\-\\ Grapefruits: \> a delicacy\\ \pushtabs (see also: \= melons\\ \> pumpkins)\\ \poptabs Horses \> feed on \> apples \end{tabbing} Remarks on tabbing TEX treats the tabbing environment like a normal paragraph, breaking a page if necessary between two lines within the environment. However, the commands \newpage and \clearpage are not allowed within it, and the command \pagebreak is simply ignored. If the user wishes to force a page break within the tabbing environment, there is a trick that he or she may employ: specify a very large interline spacing at the end of the line where the break should occur (for example, \\[10cm]). This forces the break and the spacing disappears at the start of the new page. Each line of text is effectively within a { } pair, so that any size or font declarations remain in force only for that one line. The text need not be put explicitly inside a pair of curly braces. It is not possible to nest tabbing environments within one another. Beware: the tab jump command \> always moves to the next logical tab stop. This could actually be a move backwards if the previous text is longer than the space available between the last two stops. This is in contrast to the way the tabulator works on a typewriter. There is no automatic line breaking within the tabbing environment. Each line continues until terminated by a \\ command. The text could extend beyond the right margin of the page. The user must take care that this does not happen. The commands \hfill, \hrulefill, and \dotfill have no effect inside a tabbing environment, since no stretching takes place here. Exercise 4.9: Generate the following table with the tabbing environment. $900 000.00 $450 000.00 $350 000.00 $100 000.00 2003 approved: $350 000.00 Deficiency: $100 000.00 2004 $300 000.00 $150 000.00 2005 $250 000.00 Surplus: $150 000.00 Project: Total Requirements of which 2003 2004 2005 = = = = 4.7. Boxes tentative Commitments 85 2004 = $100 000.00 for deficiency 2003 2005 = $ 50 000.00 2004 + $100 000.00 excess for 2003 in 2004 2003 = $100 000.00 2004 = $150 000.00 signed: H. André Hint: the first line in the tabbing environment should read Project: \=Total Requirements\= = \$900\,000.00 \+\\ What is the effect of the \+ command at the end of this line? How do you arrange, using these tab stops, for the years 2003, 2004, and 2005 in the second to fourth lines all to be positioned before the second tab stop? Which command should be at the end of the second line just before the \\terminator? Lines 1–4 and 8–12 all use the same set of tab stops, even though there are additional stops set in the eighth line. With \$1\=00\,000.00 one can align the entry \$\>50\,000.00 in the ninth line to match the decimal places of the lines above. Lines 5–7 have their own tab stops. Use the save and recall feature to store the preset tab stops and to bring them back. The left border of lines 5–7 correspond to the first stop of the first group. What command is at the end of the fourth line to ensure that the left border is reset to one stop earlier? How is the left border of the second-to-last line reset? The last line contains ‘signed: H. André’ right justified. With what tabbing command was this produced? Watch out for the accent é in this entry within the tabbing environment! 4.7 Boxes A box is a piece of text that TEX treats as a unit, like a single character. A box (along with the text within it) can be moved left, right, up, or down. Since the box is a unit, TEX cannot break it up again, even it was originally made up of smaller individual boxes. It is, however, possible to put those smaller boxes together as one pleases when constructing the overall box. This is exactly what TEX does internally when it carries out the formatting: the individual characters are packed in character boxes, which are put together into line boxes horizontally with rubber lengths inserted between the words. The line boxes are stacked vertically into paragraph boxes, again with rubber lengths separating them. These then go into the page body box, which with the head and foot boxes constitutes the page box. LATEX offers the user a choice of three box types: LR boxes, paragraph boxes, and rule boxes. The LR (left–right) box contains material that is ordered horizontally from left to right in a single line. A paragraph box will have its contents made into vertically stacked lines. A rule box is a rectangle filled solidly with black, usually for drawing horizontal and vertical lines. 86 Chapter 4. Displayed Text 4.7.1 LR boxes To create LR boxes containing single line text the commands \mbox{text} \fbox{text} and and \makebox[width][pos]{text} \framebox[width][pos]{text} are available. The two commands at the left produce an LR box with a width exactly equal to that of the text given between the braces { }. The \fbox command is the same as \mbox except that the text is also framed. With the two commands at the right, the width is predetermined by the optional length argument width. The other optional argument pos specifies how the text is positioned within the box. With no value given, the text is centered. Otherwise pos may be l r s to left justify the text, to right justify it, to stretch it to fill up the full width. Thus \makebox[3.5cm]{centered text} creates a box of width 3.5 cm in which the text is centered, as centered text , filled with white space, while with \framebox[3.5cm][r]{right justified} the text is right justified inside a framed box of width 3.5 cm: right justified . One may also give \framebox[3.5cm][s]{stretched\dotfill text} to fill up the box, as stretched . . . . . . . text , in which case some rubber length (Section 2.4.2) or other filler (page 30) must be added where the stretching is to occur. If the text has a natural width that is larger than that specified in width, it will stick out of the box on the left, right, or both sides, depending on the choice of pos. For example, \framebox[2mm]{centered} produces centered . The above application may appear rather silly for \framebox, but it can indeed be very useful for \makebox. A width specification of 0 pt for \makebox can generate a centered, left, or right justified positioning of text in diagrams made with the picture environment (see Chapter 13 for examples). It may also be used to cause two pieces of text to overlap, as \makebox[0pt][l]{/}S prints a slash through an S, as / S. Note: Length specifications must always contain a dimensional unit, even when they are zero. Thus 0pt must be given for the width, not 0. It is also possible to specify the width of an LR box relative to its natural dimensions (those produced by the simple \mbox command): \width is the natural width of the box, \height is the distance from baseline to top, \depth is the distance from baseline to bottom, \totalheight is \height plus \depth. 4.7. Boxes 87 To make a framed box such that the width is six times the total height, containing centered text, \framebox[6\totalheight]{Text} Text Note: These special length parameters only have meaning within the width specification of an LR box, or within the height specification of a paragraph box, as shown below. In any other context, they will produce an error message. If a set piece of text is to appear in several places within the document, it can be stored by first giving the command \newsavebox{\boxname} to create a box with the name \boxname. This name must conform to LATEX command name syntax (letters only) with an initial \. The name must not conflict with any existing LATEX command names. After such a box has been initiated, the commands \sbox{\boxname}{text} or \savebox{\boxname}[width][pos]{text} will store the contents text for future use. The optional arguments width and pos have the same meanings as for \makebox and \framebox. Now with the command \usebox{\boxname} the stored contents are inserted into the document text wherever desired, as a single unit. The contents of an LR box may also be stored with the environment \begin{lrbox}{boxname} text \end{lrbox} This is equivalent to \sbox{\boxname}{text}. Its advantage is that it allows text within a user-defined environment (Section 8.4) to be stored for future use with \usebox. 4.7.2 Vertical shifting of LR boxes The command \raisebox{lift}[height][depth]{text} produces an \mbox with contents text, raised above the current baseline by an amount lift. The optional arguments tell LATEX to treat the box as though its extension above the baseline were height and that below were depth. Without these arguments, the box has its natural size determined by text and lift. Note that lift, height, and depth are lengths (Section 2.4.1). If lift is negative, the box is lowered below the baseline. For example: 88 Chapter 4. Displayed Text Baseline \raisebox{1ex}{high} and \raisebox{-1ex}{low} and back again high produces: Baseline and and back again. low The values for height and depth can be totally different from the actual ones of the text. Their effect is to determine how far away the previous and next lines of text should be from the current line, based on the heights and depths of all the boxes (characters are also boxes) in the line. By raising a box but specifying height to be the regular character size, the raised box will overprint the line above, and similarly for depth when a box is lowered. 4.7.3 Parboxes and minipages Whole paragraphs can be put into separate vertical boxes (or parboxes in the LATEX jargon) with the command \parbox[pos]{width}{text} or with the environment \begin{minipage}[pos]{width} text \end{minipage} Both produce a vertical box of width width, in which the lines of text are stacked on top of each other as in normal paragraph mode. The optional positioning argument pos can take on the values b t to align the bottom edge of the box with the current baseline, to align the top line of text with the current baseline. Without any positioning argument, the parbox is centered vertically on the baseline of the external line of text. The positioning argument is only meaningful when the \parbox command or the minipage environment occurs within a line of text, for otherwise the current line and its baseline have no meaning. If the parbox is immediately preceded by a blank line, it begins a new paragraph. In this case, the vertical positioning of the parbox is made with reference to the following elements of the paragraph. These could be further parboxes. If the paragraph consists of only a single parbox or minipage, the positioning argument is meaningless and has no effect. Examples: \parbox{3.5cm}{\sloppy This is a 3.5 cm wide parbox. It is vertically centered on the} \hfill CURRENT LINE \hfill \parbox{5.5cm}{Narrow pages are hard to format. They usually produce many warning messages on the monitor. The command \texttt{\symbol{92}sloppy} can stop this.} 4.7. Boxes 89 Narrow pages are hard to format. This is a 3.5 cm wide They usually produce many warning parbox. It is vertically CURRENT LINE messages on the monitor. The comcentered on the mand \sloppy can stop this. \begin{minipage}[b]{4.3cm} The minipage environment creates a vertical box like the parbox command. The bottom line of this minipage is aligned with the \end{minipage}\hfill \parbox{3.0cm}{middle of this narrow parbox, which in turn is aligned with} \hfill \begin{minipage}[t]{3.8cm} the top line of the right hand minipage. It is recommended that the user experiment with the positioning arguments to get used to their effects. \end{minipage} The minipage environment creates a vertical box like the parbox command. The bottom line of this minipage is middle of this narrow parbox, which in aligned with the turn is aligned with the top line of the right hand minipage. It is recommended that the user experiment with the positioning arguments to get used to their effects. In Section 4.7.7 we demonstrate how parboxes can be vertically stacked in any desired manner relative to one another. The \parbox command produces a vertical box containing the text just like the minipage environment. However, the latter is more general. The text in a \parbox may not contain any of the centering, list, or other environments described in Sections 4.2–4.5. These may, on the other hand, appear within a minipage environment. That is, a minipage can include centered or indented text, as well as lists and tabbings. 4.7.4 ! Problems with vertical placement Vertical positioning of minipages and parboxes can often lead to unexpected results, which can be explained by showing more graphically how a box is treated by LATEX. Suppose we want to place two parboxes of different heights side by side, aligned on their first lines, and the two together set on the current line of text at the bottom. The ‘obvious’ way of doing this is \begin{minipage}[b]{..} \parbox[t]{..}{..} \hfill \end{minipage} \parbox[t]{..}{..} 90 Chapter 4. Displayed Text which does not work, for it produces instead the following results: Current line •• The boxes are made • visible here by framing them, • and by marking •• of text. the baselines (the vertical alignment points) with black dots. The reason for this is that each parbox or minipage is treated externally as a single character with its own height and depth above and below the baseline. As far as the outer minipage is concerned, it contains only two ‘characters’ on the same line, and that line is both the top and bottom one. Thus the bottom line of the outer minipage is indeed aligned with the line of text, but that bottom line is simultaneously the top line. The solution is to add a dummy second line to the outer box, as \parbox[t]{..}{..} \hfill \parbox[t]{..}{..} \\ \mbox{} The dummy line may not be entirely empty, hence the \mbox. • The boxes are made • visible here by framing them, Current line •• • • and by marking • the baselines (the vertical alignment points) with black dots. • of text. A similar problem occurs if two boxes are to be aligned with their bottom lines, and the pair aligned at the top with the current line of text. Here there are two possibilities to add a dummy first line. \mbox{} \\ aligns with the very top, or \mbox{} \\[-\baselineskip] aligns with the first text line. An example of the first case is shown on page 176. Dummy lines are also needed for the solution of Exercise 4.10 on page 93. 4.7.5 Paragraph boxes of specific height The complete syntax of the \parbox command and minipage environment includes two more optional arguments: \parbox[pos][height][inner pos]{width}{text} \begin{minipage}[pos][height][inner pos]{width} text \end{minipage} In both cases, height is a length specifying the height of the box; the parameters \height, \width, \depth, and \totalheight may be employed within the height argument in the same way as in the width argument of \makebox and \framebox (page 86). 4.7. Boxes 91 The optional argument inner pos states how the text is to be positioned internally, something that is only meaningful if height has been given. Its possible values are: t b c s to to to to push the text to the top of the box, shove it to the bottom, center it vertically, stretch it to fill up the whole box. In the last case, rubber lengths (Section 2.4.2) should be present where the vertical stretching is to take place. Note the difference between the external positioning argument pos and the internal one inner pos: the former states how the box is to be aligned with the surrounding text, while the latter determines how the contents are placed within the box itself. Example: \begin{minipage}[t][2cm][t]{3cm} This is a minipage of height 2˜cm with the text at the top. \end{minipage}\hrulefill \parbox[t][2cm][c]{3cm}{In this parbox, the text is centered on the same height.}\hrulefill \begin{minipage}[t][2cm][b]{3cm} In this third paragraph box, the text is at the bottom. \end{minipage} This is a minipage of height 2 cm with the text at the top. In this parbox, the text is centered on the same height. In this third paragraph box, the text is at the bottom. The \hrulefill commands between the boxes show where the baselines are. All three boxes are the same size and differ only in their values of inner pos. 4.7.6 Rule boxes A rule box is a basically a filled-in black rectangle. The syntax for the general command is: \rule[lift]{width}{height} which produces a solid rectangle of width width and height height, raised above the baseline by an amount lift. Thus \rule{8mm}{3mm} generates . Without the optional argument lift, the rectangle is set on the baseline of the current line of text. 92 Chapter 4. Displayed Text The parameters lift, width, and height are all lengths (Section 2.4.1). If lift has a negative value, the rectangle is set below the baseline. It is also possible to have a rule box of zero width. This creates an invisible line with the given height. Such a construction is called a strut and is used to force a horizontal box to have a desired height or depth that is different from that of its contents. For this purpose, \vspace is inappropriate because it adds additional vertical space to that which is already there. For example: \fbox{Text} produces Text . In order to print Text , one has to tell TEX that the box contents extend above and below the baseline by the desired amounts. This was done with \fbox{\rule[-2mm] {0cm}{6mm}Text}. What this says is that the text to be framed consists of ‘an invisible bar beginning 2 mm below the baseline, 6 mm long, followed by the word Text’. The vertical bar indeed remains unseen, but it determines the upper and lower edges of the frame. 4.7.7 Nested boxes The box commands described above may be nested to any desired level. Including an LR box within a parbox or a minipage causes no obvious conceptual difficulties. The opposite, a parbox within an LR box, is also possible, and is easy to visualize if one keeps in mind that every box is a unit, treated by LATEX as a single character of the corresponding size. A parbox inside an \fbox command has the effect that the entire parbox is framed. The present structure was made with \fbox{\fbox{\parbox{10cm}{A parbox...}}} This is a parbox of width 10 cm inside a framebox inside a second framebox, which thus produces the double framing effect. Enclosing a parbox inside a \raisebox allows vertical displacements of any desired amount. The two boxes here both have positioning [b], but the one at the right has been produced with: abcdefghi jklmnopqr \raisebox{1cm}{\begin{minipage}[b]{2.5cm} stuvwxyz a b c d e ... x y z\\ baseline \underline{baseline} \end{minipage} } which displaces it upwards by 1 cm. baseline A very useful structure is one in which minipage environments are positioned relative to one another inside an enclosing minipage. The positioning argument of the outside minipage can be used to align its 4.7. Boxes 93 contents as a unit with the neighboring text or boxes. An example of this is given in Exercise 4.10. Finally, vertical boxes such as \parbox commands and minipage environments may be saved as the text in an \sbox or \savebox command, to be recalled later with \usebox, as described in Section 4.7.1. 4.7.8 ! Box style parameters There are two style parameters for the frame boxes \fbox and \framebox that may be reset by the user: \fboxrule determines the thickness of the frame lines, \fboxsep sets the amount of spacing between the frame and enclosed text. New values are assigned to these length parameters in the usual LATEX manner with the command \setlength: the line thickness for all the following \framebox and \fbox commands is set to 0.5 mm with \setlength{\fboxrule}{0.5mm}. The scope of these settings also obeys the usual rule: if they are found in the preamble then they apply to the entire document; if they are within an environment then they are valid only until the end of that environment. These parameters do not influence the \framebox command that is employed within the picture environment (Section 13.1.4) and which has different syntax and functionality from those of the normal \framebox command. Exercise 4.10: How can the following nested structure be generated? (Note: font size is \footnotesize) The first line of this 3.5 cm wide minipage or parbox is aligned with the first line of the neighboring minipage or parbox. This 4.5 cm wide minipage or parbox is positioned so that its top line is at the same level as that of the box on the left, while its bottom line is even with that of the box on the right. The naı̈ve notion that this arrangement may be achieved with the positioning arguments set to t, t, and b is incorrect. Why? What would this selection really produce? The true solution involves the nesting of two of the three structures in an enclosing minipage, which is then separately aligned with the third one. Note: there are two variants for the solution, depending on whether the left and middle structures are first enclosed in a minipage, or the middle and right ones. Try to work out both solutions. Incidentally, the third minipage is 3 cm wide. Note: the problems of correctly aligning two side-by-side boxes as a pair on a line of text (Section 4.7.4) arises here once more. It will be necessary to add a dummy line to get the vertical alignment correct. Exercise 4.11: Produce the framed structure shown below and store it with the command \sbox{\warning}{structure}. You will first have to create a box named \warning with the \newsavebox{\warning} command. Print this warning at various places in your exercise file by giving \usebox{\warning}. 94 Chapter 4. Displayed Text Vertical placement of minipages and parboxes can lead to surprising results which may be corrected by the use of dummy lines. Note: the parbox width is 10 cm. There should be no difficulty producing the framed structure if one follows the previous example for the double framed box. Watch out when writing \sbox{\warning}{structure} that you have the correct number of closing braces at the end. Next, change the values for the line thickness (\fboxrule) and frame spacing (\fboxsep) and print your results once more. 4.7.9 Further framed boxes Package: fancybox The fancybox package, by Timothy van Zandt, allows additional framed boxes of various styles. These all make use of the length \fboxsep to set the distance between frame and text, the same as for \fbox and \framebox. Depending on the box type, additional new lengths are also applicable. They may be changed with \setlength to modify the box appearance. These new framed boxes are: \shadowbox{text} The width of the shadow is given by the length \shadowsize, default 4 pt. Multiline text must be placed in a minipage environment, the same as for \fbox. \doublebox{text} The width of the inner frame is 0.75\fboxrule, that of the outer frame 1.5\fboxrule, and the spacing between the frames is 1.5\fboxrule plus 0.5 pt. ' \ovalbox{text} The thickness of the frame is that of \thinlines (Section 13.1.4), the diameter of the corners is set with the command \cornersize{frac}, to frac times the smaller of the box width or height, or with \cornersize*{size} to the length size. The default is frac=.5. & ' \Ovalbox{text} The frame thickness is set by \thicklines, but otherwise is the same as \ovalbox. & $ % $ % 4.8. Tables 95 This package also allows all pages to be boxed as part of the page style. This is done by issuing \fancypage{cmds1}{cmds2}, where cmds1 and cmds2 are commands setting box parameters, terminated by one of the box commands \fbox, \shadowbox, and so on. The first set, cmds1, form a box with the head and footlines outside, while the second set draw a box including them. Normally one would only specify one set, leaving the other blank, such as: \fancypage{\setlength{\fboxsep}{5pt} \setlength{\shadowsize}{3pt}\shadowbox}{} for a shadow box on each page excluding head and footlines. There is also the command \thisfancypage{cmds1}{cmds2} to box just the current page. 4.8 Tables With the box elements and tabbing environment from the previous sections it would be possible to produce all sorts of framed and unframed tables. However, LATEX offers the user far more convenient ways to build such complicated structures. 4.8.1 Constructing tables The environments tabular, tabular*, and array are the basic tools with which tables and matrices can be constructed. The syntax for these environments is \begin{array}[pos]{cols} \begin{tabular}[pos]{cols} \begin{tabular*}{width}[pos]{cols} rows rows rows \end{array} \end{tabular} \end{tabular*} The array environment can only be applied in mathematical mode (see Chapter 5). It is described here only because its syntax and the meaning of its arguments are exactly the same as those of the tabular environment. All three environments actually create a minipage. The meaning of the arguments is as follows: pos Vertical positioning argument (see also the explanation of this argument for parboxes in Section 4.7.3). It can take on the values t the top line of the table is aligned with the baseline of the current external line of text; b the bottom line of the table is aligned with the external baseline; with no positioning argument given, the table is centered on the external baseline. 96 Chapter 4. Displayed Text width This argument applies only to the tabular* environment and determines its overall width. In this case, the cols argument must contain the @-expression (see below) @{\extracolsep{\fill}} somewhere after the first entry. For the other two environments, the total width is fixed by the textual content. cols The column formatting argument. There must be an entry for every column, as well as possible extra entries for the left and right borders of the table or for the intercolumn spacings. The possible column formatting symbols are l the column contents are left justified; r the column contents are right justified; c the column contents are centered; p{wth} the text in this column is set into lines of width wth, and the top line is aligned with the other columns. In fact, the text is set in a parbox with the command \parbox[t]{wth}{column text}; *{num}{cols} the column format contained in cols is reproduced num times, so that *{5}{|c}| is the same as |c|c|c|c|c|. The available formatting symbols for the left and right borders and for the intercolumn spacing are | draws a vertical line; || draws two vertical lines next to each other; @{text} this entry is referred to as an @-expression, and inserts text in every line of the table between the two columns where it appears. An @-expression removes the intercolumn spacing that is automatically put between each pair of columns. If white space is needed between the inserted text and the next column, this must be explicitly included with \hspace{ } within the text of the @-expression. If the intercolumn spacing between two particular columns is to be something other than the standard, this may be easily achieved by placing @{\hspace{wth}} between the appropriate columns in the formatting argument. This replaces the standard intercolumn spacing with the width wth. An \extracolsep{wth} within an @-expression will put extra spacing of amount wth between all the following columns, until countermanded by another \extracolsep command. In contrast to the standard spacing, this additional spacing is not removed by later @-expressions. In the tabular* environment, there must be a command @{\extracolsep\fill} somewhere in the column format so that all the subsequent intercolumn spacings can stretch out to fill the predefined table width. 4.8. Tables 97 If the left or right borders of the table do not consist of a vertical line, spacing is added there of an amount equal to half the normal intercolumn spacing. If this spacing is not wanted, it may be suppressed by including an empty @-expression @{} at the beginning or end of the column format. rows contain the actual entries in the table, each horizontal row being terminated with a \\ command. These rows consist of a sequence of column entries separated from each other by the & symbol. Thus each row in the table contains the same number of column entries as in the column definition cols. Some entries may be empty. The individual column entries are treated by LATEX as though they were enclosed in braces { }, so that any changes in type style or size are restricted to that one column. \hline This command may only appear before the first row or immediately after a \\ row termination. It draws a horizontal line the full width of the table below the row that was just ended, or at the top of the table if it comes at the beginning. Two \hline commands together draw two horizontal lines with a little space between them. \cline{m − n} This command draws a horizontal line from the left side of column m to the right side of column n. Like \hline, it may only be given just after a \\ row termination and there may be more than one after another. The command \cline{1-3} \cline{5-7} draws two horizontal lines from column 1 to 3 and from column 5 to 7, below the row that was just ended. In each case, the full column widths are underlined. \multicolumn{num}{col}{text} This command combines the following num columns into a single column with their total width including intercolumn spacings. The argument col contains exactly one of the positioning symbols l, r, or c, with possible @-expressions and vertical lines |. A value of 1 may be given for num when the positioning argument is to be changed for that column in one particular row. In this context, a ‘column’ starts with a positioning symbol l, r, or c, and includes everything up to but excluding the next one. The first column also includes everything before the first positioning symbol. Thus |c@{}rl| contains three columns: the first is |c@{}, the second r, and the third l|. The \multicolumn command may only come at the start of a row or right after a column separation symbol &. \vline This command draws a vertical line with the height of the row at the location where it appears. In this way, vertical lines that do not extend the whole height of the table may be inserted within a column. 98 ! Chapter 4. Displayed Text If a p-type column contains \raggedright or \centering, the \\ forces a new line within the column entry and not the end of the whole row. If this occurs in the last column, then \\ cannot be used to terminate the row; instead one must use \tabularnewline to end such a row. Since a table is a vertical box of the same sort as parbox and minipage, it may be positioned horizontally with other boxes or text (see examples in Section 4.7.3). In particular, the table must be enclosed within \begin{center} table \end{center} in order to center it on the page. 4.8.2 ! Table style parameters There are a number of style parameters used in generating tables which LATEX sets to standard values. These may be altered by the user, either globally within the preamble or locally inside an environment. They should not be changed within the tabular environment itself. \tabcolsep is half the width of the spacing that is inserted between columns in the tabular and tabular* environments; \arraycolsep is the corresponding half intercolumn spacing for the array environment; \arrayrulewidth is the thickness of the vertical and horizontal lines within a table; \doublerulesep is the separation between the lines of a double rule. Changes in these parameters can be made with the \setlength command as usual. For example, to make the line thickness to be 0.5 mm, give \setlength {\arrayrulewidth}{0.5mm}. Furthermore, the parameter \arraystretch can be used to change the distance between the rows of a table. This is a multiplying factor, with a standard value of 1. A value of 1.5 means that the inter-row spacing is increased by 50%. A new value is set by redefining the parameter with the command \renewcommand{\arraystretch}{factor} 4.8.3 Table examples Creating tables is much easier in practice than it would seem from the above list of formatting possibilities. This is best illustrated with a few examples. The simplest table consists of a row of columns in which the text entries are either centered or justified to one side. The column widths, the spacing between the columns, and thus the entire width of the table are automatically calculated. 4.8. Tables Position 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Club Amesville Rockets Borden Comets Clarkson Chargers Daysdon Bombers Edgartown Devils Freeburg Fighters Gadsby Tigers Harrisville Hotshots Idleton Shovers Jamestown Hornets Kingston Cowboys Lonsdale Stompers Marsdon Heroes Norburg Flames Ollison Champions Petersville Lancers Quincy Giants Ralston Regulars 99 Games W T L Goals Points 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 19 18 17 14 16 15 15 12 13 11 13 12 9 10 8 6 7 3 13 9 7 10 6 7 7 11 9 11 6 8 13 8 9 8 5 11 1 6 9 9 11 11 11 10 11 11 14 13 11 15 16 19 21 19 66:31 65:37 70:44 66:50 63:53 64:47 52:37 62:58 49:51 48:47 54:45 50:57 50:42 50:68 42:49 31:77 40:89 37:74 51:15 45:21 41:25 38:28 38:28 37:29 37:29 35:31 35:31 33:33 32:34 32:34 31:35 28:38 25:41 20:46 19:47 17:49 The above table is made up of eight columns, the first of which is right justified, the second left justified, the third centered, the next three right justified again, and the last two centered. The column formatting argument in the tabular environment thus appears as {rlcrrrcc} The text to produce this table is \begin{tabular}{rlcrrrcc} Position & Club & Games & 1 & Amesville Rockets & 2 & Borden Comets & ... & ..... & 17 & Quincy Giants & 18 & Ralston Regulars & \end{tabular} W & T & 33 & 19 33 & 18 .. & .. 33 & 7 33 & 3 L & & & & & & Goals 13 & 1 9 & 6 .. & .. 5 & 21 11 & 19 & & & & & & Points\\[0.5ex] 66:31 & 51:15 \\ 65:37 & 45:21 \\ ... & ... \\ 40:89 & 19:47 \\ 37:74 & 17:49 In each row, the individual columns are separated from one another by the symbol & and the row itself is terminated with the \\ command. The [0.5ex] at the end of the first row adds extra vertical spacing between the first two rows. The last row does not need the termination symbol since it is ended automatically by the \end{tabular} command. The columns may be separated by vertical rules by including the symbol | in the column formatting argument. Changing the first line to \begin{tabular}{r|l||c|rrr|c|c} 100 Chapter 4. Displayed Text results in Position Club 1 2 .. . 17 18 Amesville Rockets Borden Comets .. . Quincy Giants Ralston Regulars Games W T L Goals Points 33 33 19 18 13 9 1 6 66:31 65:37 33 33 7 3 5 11 21 19 40:89 37:74 51:15 45:21 .. . 19:47 17:49 The same symbol | before the first or after the last column format generates a vertical line on the outside edge of the table. Two symbols || produce a double vertical line. Horizontal lines over the whole width of the table are created with the command \hline. They may only appear right after a row termination \\ or at the very beginning of the table. Two such commands \hline\hline draw a double horizontal line. \begin{tabular}{|r|l||c|rrr|c|c|} \hline Position & Club & Games & W & T & L & Goals & Points\\ \hline\hline 1 & Amesville Rockets & 33 & 19 & 13 & 1 & 66:31 & 51:15 \\ \hline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 & Ralston Regulars & 33 & 3 & 11 & 19 & 37:74 & 17:49 \\ \hline \end{tabular} The table now appears as Position 1 2 .. . 17 18 Club Amesville Rockets Borden Comets .. . Quincy Giants Ralston Regulars Games W T L Goals Points 33 33 19 18 13 9 1 6 66:31 65:37 33 33 7 3 5 11 21 19 40:89 37:74 51:15 45:21 .. . 19:47 17:49 In this case, the row termination \\ must be given for the last row too because of the presence of \hline at the end of the table. In this example, all rows contain the same entry in the third column, that is, 33. Such a common entry can be automatically inserted in the column format as an @-expression of the form @{text}, which places text between the neighboring columns. This could be accomplished for our example by changing the column format to {rl@{ 33 }rrrcc} or {|r|l||@{ 33 }|rrr|c|c|} so that the text ‘ 33 ’, blanks included, appears between the second and third columns in every row. This produces the same table with slightly different row entries: for example, the fourth row would now be given as 4.8. Tables 4 ! & Daysdon Bombers & 14 & 10 & 101 9 & 66:50 & 38:28 \\ The column format now consists of only seven column definitions, rlrrrcc. The previous third column c has been removed, and so each row contains one less column separation symbol &. The new third column, the number of games won, begins with the second & and is separated from the club name by the contents of @{ 33 }, which is entered automatically without any additional & symbol. The last two columns give the relations between goals and points won and lost as a centered entry of the form m:n. The colons ‘:’ are only coincidentally ordered exactly over one another since two-digit numbers appear in every case on both sides of the colon. If one entry had been 9:101, the colon would have been shifted slightly to the left as the entire entry was centered. A vertical alignment of the ‘:’ independent of the number of digits can also be achieved using an @-expression of the form r@{:}l in the column format. This means that a colon is placed in every row between a right and a left justified column. The column formatting argument in the example now becomes {rl@{ 33 }rrrr@{:}lr@{:}l} or {|r|l||@{ 33 }|rrr|r@{:}l|r@{:}l|} and the row entry is 4 & Daysdon Bombers & 14 & 10 & ! 9 & 66 & 50 & 38 & 28 \\ Each of the former c columns has been replaced by the two columns in r@{:}l. An @-expression inserts its text between the neighboring columns, removing the intercolumn spacing that would normally be there. Thus the r column is justified flush right with the ‘:’ and the following l column flush left. The same method can be employed when a column consists of numbers with decimal points and a varying number of digits. The entries for the goal and point relationships are now made up of two columns positioned about the ‘:’ symbol. This causes no problems for entering the number of goals won and lost or for the number of plus and minus points, since each entry has its own column. The column headings, however, are the words ‘Goals’ and ‘Points’, stretching over two columns each and without the colon. This is accomplished with the \multicolumn command, which merges selected columns in a particular row and redefines the column format. The first row of the unframed soccer table is then Position& Club & W & T & L & \multicolumn{2}{c}{Goals} & \multicolumn{2}{c}{Points}\\[0.5ex] Here \multicolumn{2}{c}{Goals} means that the next two columns are to be combined into a centered column, containing the text ‘Goals’. For the framed table, the new formatting argument in the \multicolumn commands must be {c|} since the vertical line symbol | was also removed when the old columns were combined. In deciding what belongs to a given 102 Chapter 4. Displayed Text column, use the rule that a column ‘owns’ everything up to but excluding the next r, l, or c. The table of final results for our soccer league 2002/03 is to have the following title: \begin{tabular}{|r|l||rrr|r@{:}l|r@{:}l||c|}\hline \multicolumn{10}{|c|}{\bfseries 1st Regional Soccer League --Final Results 2002/03}\\ \hline &\itshape Club &\itshape W &\itshape T &\itshape L & \multicolumn{2}{c|}{\itshape Goals} & \multicolumn{2}{c||}{\itshape Points} & \itshape Remarks \\ \hline\hline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1st Regional Soccer League — Final Results 2002/03 Club W T L Goals Points Remarks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Amesville Rockets Borden Comets Clarkson Chargers Daysdon Bombers Edgartown Devils Freeburg Fighters Gadsby Tigers Harrisville Hotshots Idleton Shovers Jamestown Hornets Kingston Cowboys Lonsdale Stompers Marsdon Heroes Norburg Flames Ollison Champions Petersville Lancers Quincy Giants Ralston Regulars 19 18 17 14 16 15 15 12 13 11 13 12 9 10 8 6 7 3 13 9 7 10 6 7 7 11 9 11 6 8 13 8 9 8 5 11 1 6 9 9 11 11 11 10 11 11 14 13 11 15 16 19 21 19 66:31 65:37 70:44 66:50 63:53 64:47 52:37 62:58 49:51 48:47 54:45 50:57 50:42 50:68 42:49 31:77 40:89 37:74 51:15 45:21 41:25 38:28 38:28 37:29 37:29 35:31 35:31 33:33 32:34 32:34 31:35 28:38 25:41 20:46 19:47 17:49 League Champs Trophy Winners Candidates for National League Medium Teams Disbanding Demoted The horizontal lines for positions 3–5, 7–14, and 17 were made with the command \cline{1-9} while all the others used \hline: 11 ! & Kingston Cowboys & 13 & 6 & 14 & 54&45 & 32&34 & Medium Teams \\ \cline{1-9} The last two rows of the table deserve a comment. The remark ‘Demoted’ is vertically placed in the middle of the two rows. This is accomplished by typing 18 & Ralston Regulars & 3 & 11 & 19 & 37&74 & 17&49 & \raisebox{1.5ex}[0pt]{Demoted}\\ \hline 4.8. Tables 103 The \raisebox command lifts the text ‘Demoted’ by 1.5 ex. If the optional argument [0pt] had been left out, this lifting of the box would have increased the total height of the last row by 1.5 ex. This would have resulted in correspondingly more vertical spacing between the horizontal line of row 17 and the text of row 18. This additional spacing is suppressed by the optional argument height = [0pt]. (See Section 4.7.2 for a description of the \raisebox command.) Occasionally one wants to increase the vertical spacing between horizontal lines and enclosed text. The soccer table would look better if the heading were thus: 1st Regional Soccer League — Final Results 2002/03 Club W T L Goals Points Remarks This is done by inserting an invisible vertical rule, a strut (Section 4.7.6), into the heading text: \multicolumn{10}{|c|}{\rule[-3mm]{0mm}{8mm}\bfseries 1st Regional Soccer League --- Final Results 2002/03}\\ \hline The included rule has a width of 0 mm, which makes it invisible, extends 3 mm below the baseline, and is 8 mm high. It thus stretches 5 mm (8 − 3) above the baseline. It effectively pushes the horizontal lines away from the baseline in both directions. If a row consists of more than one column, it is sufficient to include a strut in only one of them since the size of the whole row is determined by the largest column. Exercise 4.12: Produce your own table for the final results of your favorite team sport in the same manner as for the soccer results above. Watch out that the colons ‘:’ are properly aligned for the goals and points relationships. Exercise 4.13: Generate the following timetable. 6.15–7.15 pm Day Subj. Mon. UNIX Tues. Wed. Fri. LATEX UNIX LATEX Teacher Room Dr. Smith Comp. Ctr Miss Baker Conf. Room Dr. Smith Comp. Ctr Miss Baker Conf. Room 7.20–8.20 pm Subj. Fortran Fortran C C++ Teacher Room Ms. Clarke Hall A Ms. Clarke Conf. Room Dr. Jones Hall B Ms. Clarke Conf. Room 8.30–9.30 pm Subj. Math. Math. ComSci. Teacher Room Mr. Mills Hall A Mr. Mills Hall A Dr. Jones Hall B canceled 104 Chapter 4. Displayed Text The entries ‘Day’ and ‘Subj.’ are raised in the same way as ‘Demoted’ was in the soccer table. To simplify its application, one can introduce a user-defined command with \newcommand{\rb}[1]{\raisebox{1.5ex}[0pt]{#1}} (see Section 8.3.2) so that \rb{entry} behaves the same as \raisebox{1.5ex}[0pt]{entry}. This can be used, for example, as \rb{ Mon.} or \rb{UNIX} to elevate the entries by the necessary amount. In all the above examples, the entries in the individual columns are each a single line. Some tables contain certain columns with several lines of text that are somewhat separated from the rest of the row: Model Description FBD 360 Desktop: XP3600+ Processor, 512 MB DDR-RAM, 80 GB hard disk, 16x DVD drive, 32x CDRW drive, 64 MB TV output, Windows XP, 15” monitor 999.00 FBD 480 Desktop DeLuxe: same as FBD 360 but with XP4800+ Processor, 48x CDRW drive, 17” monitor 1399.00 FBT 240 Laptop: XP2400+, 512 MB RAM, 40 GB hard disk, 56 kb modem, 32x speed DVD/CD-RW drive, 2x USB, 15” display, Windows XP, Infrared interface 1299.00 Price The above table is made up of three columns, the first left justified, the third right justified. The middle column contains several lines of text with a line width of 7.5 cm. This is generated with the column formatting symbol p{width}. The whole column formatting argument in this example is {lp{7.5cm}r}. \begin{tabular}{lp{7.5cm}r} \bfseries Model & Description & \bfseries Price \\[1ex] FBD 360 &\small{\bfseries Desktop}: XP3600+ Processor, 512˜MB DDR-RAM, 80˜GB hard disk, 16x DVD drive, 32x CDRW drive, 64˜MB TV˜output, Windows˜XP, 15’’ monitor & 999.00\\ . . . . . . . . . . . . 15’’ display, Windows˜XP, Infrared interface& 1299.00 \end{tabular} The text for the middle column is simply typed in, being broken up into lines of width 8.0 cm automatically. The column is separated from the others with the & symbol in the usual way. Warning: The line termination command \\ is ambiguous within a p column, for it can either start a whole new row, or if \raggedright or \centering have been given, it ends a line of text within that column entry. In this case, if this is the last column in the row, the only way to 4.8. Tables 105 terminate the row is with \tabularnewline which always starts a new row. Exercise 4.14: Produce the following table. Course and Date Brief Description Prerequisites Introduction to LSEDIT March 14 – 16 Logging on — explanation of the VMS file system — explanation and intensive application of the VMS editor LSEDIT — user modifications none Introduction to LATEX March 21 – 25 Word processors and formatting programs — text and commands — environments — document and page styles — displayed text — math equations — simple user-defined structures LSEDIT The final example describes a blank form produced as a framed table. The difficulty here is to set the heights and widths of the empty boxes, since these are normally determined automatically by the text entries. The example shows how this may be accomplished with the help of struts and \hspace commands. Budget Plan 2003–2004 Project Year Investment Costs Operating Costs Industrial Contracts Signature Nr. Name 2003 2004 2005 € US $ € US $ € US $ Authorization \newsavebox{\k}\newsavebox{\kkk} \sbox{\k}{\framebox[4mm]{\rule{0mm}{3mm}}} \sbox{\kkk}{\usebox{\k}\usebox{\k}\usebox{\k}} \begin{tabular} {|l|c|c|c|}\hline \multicolumn{4}{|c|}{\rule[-0.3cm]{0mm}{0.8cm}\bfseries Budget Plan 2003--2004}\\ \hline\hline \rule[-0.4cm]{0mm}{1cm}Project & \multicolumn{3}{l|}{Nr. \usebox{\kkk}\hspace{0.5cm} \vline\hspace{0.5cm}Name\usebox{\kkk}\usebox{\kkk}\usebox{\kkk} \usebox{\kk}}\\ \hline 106 Chapter 4. Displayed Text \multicolumn{1}{|r|}{Year} & 2003 & 2004 & 2005 \\ \cline{2-4} & \euro\ \vline\ US \$ & \euro\ \vline\ US \$ & \euro\ \vline\ US \$ \\ \hline Investment & \hspace{2.5cm}& \hspace{2.5cm}& \hspace{2.5cm} \\ Costs & & & \\ \hline Operating & & & \\ Costs & & & \\ \hline Industrial& & & \\ Contracts & & & \\ \hline \multicolumn{4}{|l|}{\rule[-1.0cm]{0mm}{1.3cm}Signature \hspace{5cm}\vline˜Authorization} \\ \hline \end{tabular} The first three lines are only indirectly related to the table constructo be drawn when the tion. They arrange for three empty boxes command \usebox{\kkk} is given (see Section 4.7.1). Except for the command \hspace{2.5cm} to set the column widths of the last three columns and the command \vline to draw a vertical line within a column, this example contains nothing new that was not in the previous examples. It is only necessary to give a brief explanation of the last row in the table: The command \multicolumn{4}{|l|} merges all four table columns into one, in which the text is set flush with the left margin. This text consists first of a strut \rule[-12mm]{0mm}{15mm} that says the height of the last row begins 12 mm below the baseline and is a total of 15 mm high. Then, beginning at the left margin, comes the word Signature, followed 5 cm later by \vline, a vertical line. The word Authorization is separated from the vertical line by a blank space (˜). The above examples clearly illustrate how the column widths and row heights are automatically determined for tables. These sizes, however, may be influenced by struts and \hspace commands. In addition, the commands described in Section 4.8.2 permit the intercolumn and interrow spacings as well as line thickness to be altered. For example, \setlength{\tabcolsep}{5mm} inserts 5 mm of spacing before and after every column; that is, it produces an intercolumn spacing of 10 mm. Section 4.8.2 gives more information about the use of these table style parameters. 4.8.4 Extension packages for tables As powerful as the tabular environment is, it does have limitations. For this reason, there are a number of tools packages (Section B.5.4) that add additional features for constructing tables. 4.8. Tables Package: array 107 The array package extends the normal functionality of the tabular and array environments by adding several column formatting arguments, and by allowing the user to be able to define his or her own such arguments. m{wth} produces a column of width wth which is aligned vertically in the middle. (The standard p{wth} aligns the text with the top line.) b{wth} is like p and m but aligns the text on the bottom line. >{decl} inserts decl before the next column; thus >{\bfseries} sets the entire column in bold face without having to type \bfseries in each row. <{decl} inserts decl after the last column; to have a centered column in math mode, give >{$}c<{$}. !{decl} inserts decl between two columns without removing the normal intercolumn spacing, as for @{decl}. With \newcolumntype{type}{decl} one can define new column specifiers for multiple applications. For example, to have C defined as a centered math column, give \newcolumntype{C}{>{$}c<{$}} The height of all rows can be increased by setting \extrarowheight to some value with \setlength; this is useful to prevent horizontal lines from being too close to the text below them. With \firsthline and \lasthline, horizontal lines can be issued before the first and after the last rows respectively without interfering with the vertical alignment of the table. Package: The dcolumn package loads the array package and defines a column dcolumn specifier D to align a column of numbers on a decimal point. Its syntax is D{in char}{out char}{number} where in char is the input character for the decimal point (say .), out char is the character that is output (say \cdot), and number is the maximum number of decimal places. If number is negative, the column is centered on the decimal point, otherwise it is right justified. Later versions allow number to specify the number of digits on both sides of the decimal point, for example as 3.2. Package: The tabularx package loads the array package and defines an tabularx environment tabularx which makes a table of a desired total width, like tabular*, but in which the columns expand, not the intercolumn spacings. The column specifier X is used to indicate the expandable columns, and is equivalent to p{wth} where wth is adjusted to the necessary size. For example, \begin{tabularx}{10cm}{c X l X} ... \end{tabularx} produces a table of width 10 cm with columns 2 and 4 expandable. 108 Chapter 4. Displayed Text Package: delarray The delarray package loads the array package and redefines the array environment so that it may be enclosed in braces that are automatically adjusted in size, as with the \left and \right commands of Section 5.4.1. The braces surround the column specifier. For example, " # a b \begin{array}[{cc}] a & b \\ c & d \end{array} ⇒ c d Package: longtable The longtable package produces tables extending over several pages. It does not require the array package, but does recognize its extra features if loaded. The longtable environment takes the same column formatting argument as tabular and array, but has additional row entries at the start to determine: • those rows that appear at the start of the table, terminated by \endfirsthead; this often includes the main \caption; • those at the top of every continuation page, terminated by \endhead; these normally include an additional \caption and the column headers; • those at the bottom of each page, terminated by \endfoot; • and those rows at the end of the table, terminated by \endlastfoot. An example of a long table is: \begin{longtable}{|l|c|r|} \caption[Short title]{Demonstration of a long table}\\ \hline Left & Center & Right \\ \hline \endfirsthead \caption[]{\emph{continued}}\\ \hline Left & Center & Right \\ \hline \endhead \hline \multicolumn{3}{r}{\emph{continued on next page}} \endfoot \hline\endlastfoot Twenty-two & fifty & A hundred and eighty \\ 22 & 50 & 180 \\ . . . . . . \end{longtable} The \caption command normally may only appear within table and figure environments (Section 7.4) but may also be used within longtable which never goes into a table environment; in a continued row, \caption must have an empty optional argument [] to prevent multiple entries in the list of tables. A \newpage command forces a new page within the long table. Up to four LATEX runs may be needed to get the column widths right. 4.8. Tables 109 Primary Energy Consumption Energy Source Total Consumption (in million tons of BCUa ) of which (percentages) petroleum bituminous coal brown coal natural gas nuclear energy otherb 1975 1980 1986 347.7 390.2 385.0 52.1 19.1 9.9 14.2 2.0 2.7 47.6 19.8 10.0 16.5 3.7 2.3 43.2 20.0 8.6 15.1 10.1 3.0 a BCU = Bituminous Coal Unit (1 ton BCU corresponds to the heating equivalent of 1 ton of bituminous coal = 8140 kwh) b Wind, water, solar energy, etc. Source: Energy Balance Study Group, Essen 1987. 4.8.5 Floating tables In Chapter 7 we explain how figures and tables can be made to float, that is, to be moved to the top or bottom of a page, or to a separate page altogether. The reason for doing this is that the author does not know in advance where the page breaks will occur, and so does not know if there is enough room on the current page for such a large object. The float mechanism allows the material to be saved and then placed later at an appropriate location. It also allows for table and figure captions and automatic numbering. Table material is made to float with the environment: \begin{table} head text table foot text \end{table} where table stands for the entire table as defined in a tabular environment, head text for whatever text appears above the table, and foot text for that below. Widths, spacing, and positioning of the texts relative to the table are all matters for the user to arrange. Independently of the enclosed text, everything that appears between \begin{table} and \end{table} is normally placed at the start of the current page. If a table already occupies the top of the page, an attempt is made to place it at the page bottom, if there is enough space for it. Otherwise, it will be placed on the next page, where further tables may be accumulated. The surrounding text is printed as though the table were not there. For further details about floats in general, including automatic sequential numbering, see Chapter 7. The table at the top of this page was generated within the text at this location with the following (excluding the footnotes, which are described later in Section 4.10.4): 110 Chapter 4. Displayed Text \begin{table} {\bfseries Primary Energy Consumption}\\[1ex] \begin{tabular*}{118mm}{@{}ll...rr@{}} . . . . . . . . . . . . . . . . . . . . \end{tabular*}\\[0.5ex] \emph{Source:} Energy Balance Study Group, . . . \end{table} There are a number of formatting parameters that may be used in connection with the table environment, which are described together with those for figures in Section 7.3. Exercise 4.15: Complete the above text for the table on the previous page (without the footnotes). Pay attention to the following questions (check the explanations for the @-expressions in Section 4.8.1): 1. What is the effect of the @{} entries at the beginning and end of the formatting definition? 2. The tabular* environment generates a table with a given width, here 118 mm. What would be the effect of @{extracolsep{\fill}} at the beginning of the formatting definition? 3. Where in the formatting definition should @{extracolsep{\fill}} and the countermanding @{\hspace{1em}}@{\extracolsep{1em}} appear in order to format the table as it is printed here? How would the table appear if only @{\extracolsep{1em}} were given as countermand? 4.9 Printing literal text Occasionally it is necessary to print text exactly as it is typed, with all special characters, blanks, and line breaks appearing literally, unformatted, and in a typewriter font. Lines of computer code or samples of LATEX input text are examples of such literal text. This is accomplished with the environments \begin{verbatim} \begin{verbatim*} text text \end{verbatim} \end{verbatim*} A new line is inserted before and after these environments. With the *-form, blanks are printed with the symbol to make them visible. As an example, on page 115 some input text is printed to demonstrate the use of footnotes in forbidden modes. This was done with \begin{verbatim} \addtocounter{footnote}{-1}\footnotetext{Small insects} \stepcounter{footnote}\footnotetext{Large mammals} \end{verbatim} Literal text may also be printed within a line using the commands \verb and \verb*, as for example 4.9. Printing literal text \verb=\emph{words of text}= \verb*=\emph{words of text}= 111 \emph{words of text} \emph{words of text} where the first character after \verb or \verb* (here =) is the delimiter, such that all text up to the next occurrence of that character is printed literally. This character may not appear in the literal text, obviously. In contrast to the behavior in the verbatim environment, the literal text must be all on one line in the input text, otherwise an error message is printed. This is to indicate that you just might have forgotten to repeat the delimiting character. Important: neither the verbatim environment nor the \verb command may be used in an argument of any other command! Exercise 4.16: Reproduce some input lines from this book as literal text. 4.9.1 Extension packages for literal text Package: alltt The standard package alltt (Section B.5.3, page 392) provides an alltt environment that also prints its contents literally in a typewriter font, except that the characters \ { } retain their normal meaning. Thus LATEX commands can be included within the literal text. For example, \begin{alltt} Underlining \underline{typewriter} text is also possible. Note that dollar ($) and percent (%) signs are treated \emph{literally}. \end{alltt} Underlining typewriter text is also possible. Note that dollar ($) and percent (%) signs are treated literally. The standard package shortvrb (Section B.5.3, page 393) offers a shorthand for the \verb command. After issuing \MakeShortVerb{\|}, one can print short literal text with |text|. The counter command \DeleteShortVerb{\|} then restores the original meaning to |. Any character may be temporarily turned into a literal switch this way. Package: One problem with the verbatim environment is that the entire litverbatim eral text is input and stored before processing, something that can lead to memory overflows. The verbatim package in the tools collection (Section B.5.4, page 396) re-implements the environment to avoid this problem. A minor drawback is that there must not be any other text on the same line as the \end{verbatim}. The verbatim package offers two other extra features. It provides a comment environment that simply ignores its contents, as though each line started with a % sign (Section 4.11). And it adds a command \verbatiminput{filename} to input the specified file as literal text. This is useful for listing actual computer programs rather than copying them into the LATEX file. Package: shortvrb 112 Chapter 4. Displayed Text 4.9.2 Email and Internet addresses Package: url Email and Internet addresses present some special problems that are solved with the url package by Donald Arseneau. These addresses are best listed in a typewriter font, often contain special symbols, and should never be hyphenated, since the hyphen could be interpreted as part of the address. The obvious solution would be to use the \verb command, which fulfills all these conditions. However, if the address does not fit on the current line, it will stick out into the right margin. Using \texttt instead will allow the words in the address to be broken over two lines, but at the price of inserting an ambiguous hyphen. Inserting the address with the \url command allows it to be broken at non-letters between words, without a hyphen. Moreover, its argument is treated literally, so all special characters are printed as given, just as with \verb. In fact, the argument of the \url command may either be enclosed in curly braces as usual, or delimited by some arbitrary character, just as with \verb. An Internet address may be given as \url{http://address.edu/home/page/} or an email address might be given as \url=fred.smith@general.services.gov= An Internet address is given as http://address.edu/home/ page/ or an email address might be given as fred.smith@ general.services.gov The \url command is to be preferred for another reason: it conforms to logical markup indicating the purpose of its argument. In fact, the hyperref package of Section 10.2.4 will even turn the argument into an active link, something it does not do for \verb arguments. The printed appearance of the address can be controlled by specifying \urlstyle{style}, where style is one of tt (default), rm, sf, or same, for typewriter, Roman, sans serif, or unchanged font, respectively. A fixed address can be predefined with, e.g., \urldef{\myurl}\url{myname@mydomain.uk} Now \myurl is used to print myname@mydomain.uk. There is also a \path command for giving directory/folder names, with the same syntax as \url. As logical markup, it has a different significance; for example, the hyperref package does not turn it into a link. For further information on advanced uses of this package, see the comments at the end of the file url.sty. 4.10 Footnotes and marginal notes 4.10.1 Standard footnotes Footnotes are generated with the command \footnote{footnote text} 4.10. Footnotes and marginal notes 113 which comes immediately after the word requiring an explanation in a footnote. The text footnote text appears as a footnote in a smaller typeface at the bottom of the page. The first line of the footnote is indented and is given the same footnote marker as that inserted in the main text. The first footnote on a page is separated from the rest of the page text by means of a short horizontal line. The standard footnote marker is a small, raised number1 , which is sequentially numbered. This footnote is produced with: ... raised number\footnote{The usual method of marking footnotes in a typewritten ... same page.}, which is ... The footnote numbering is incremented throughout the whole document for the article class, whereas it is reset to 1 for each new chapter in the report and book classes. The \footnote command may only be given within the normal paragraph mode, and not within math or LR modes. In practice, this means it may not appear within an LR box (Section 4.7.1) or a parbox (Section 4.7.3). However, it may be used within a minipage environment, in which case the footnote text is printed beneath the minipage and not at the bottom of the actual page.2 The \footnote command must immediately follow the word that is to receive the note, without any intervening blanks or spacing. A footnote at the end of a sentence can be given after the period, as in the last example above: ... of the actual page.\footnote{With nested ... wrong place.} 4.10.2 Non-standard footnotes If the user wishes the footnote numbering to be reset to 1 for each \section command with the article class, this may be achieved with \setcounter{footnote}{0} just before or after a \section command. The internal footnote counter has the name footnote. Each call to \footnote increments this counter by one and prints the new value in Arabic numbering as the footnote marker. A different style of marker can be implemented with the command \renewcommand{\thefootnote}{\number style{footnote}} 1 The usual method of marking footnotes in a typewritten manuscript with *, **, etc., could also be done; however, since the page breaks are not known at the time of typing the text, there would be a problem of avoiding duplication of the symbols on the same page. 2 With nested minipages, the footnote comes after the next \end{minipage} command, which could be at the wrong place. 114 Chapter 4. Displayed Text where number style is one of the counter print commands described in Section 4.3.5: \arabic, \roman, \Roman, \alph, or \Alph. However, for the counter footnote, there is an additional counter print command available, \fnsymbol, which prints the counter values 1–9 as one of nine symbols: * † ‡ § ¶ k ** †† ‡‡ It is up to the user to see that the footnote counter is reset to zero sometime before the tenth \footnote call. An optional argument may be added to the \footnote command \footnote[num]{footnote text} where num is a positive integer that is used instead of the value of the footnote counter for the marker. In this case, the footnote counter is not incremented. For example∗∗ , \renewcommand{\thefootnote}{\fnsymbol{footnote}} For example\footnote[7]{The 7th symbol ... marker.}, \renewcommand{\thefootnote}{\arabic{footnote}} where the last line is necessary to restore the footnote marker style to its standard form. Otherwise, all future footnotes would be marked with symbols and not with numbers. 4.10.3 Footnotes in forbidden modes A footnote marker can be inserted in the text with the command \footnotemark[num] even where the \footnote command is normally not allowed, that is, in LR boxes, tables, and math mode. The marker is either the optional argument num or, if it is omitted, the incremented value of the footnote counter. The footnote itself is not generated. This must be done external to the forbidden mode with the command \footnotetext[num]{footnote text} If the optional argument has been used for the footnote marker, the same num must be given as the option for the text command. Similarly, if no option was used for the marker, none may appear with the text. The footnote will be generated with the value of num or with that of the footnote counter. This counter is incremented by a call to \footnotemark without an optional argument. The corresponding \footnotetext command, on the other hand, does not alter the counter. ∗∗ The 7th symbol appears as the footnote marker. 4.10. Footnotes and marginal notes 115 If there are a number of \footnotemark commands without optional arguments appearing before the next \footnotetext command, it is necessary to adjust the counter with the command \addtocounter{footnote}{dif } where dif is a negative number saying how many times the counter must be set back. Then before every \footnotetext command, the counter must be incremented by one. This can be done either with the command \addtocounter, with dif =1, or with the command \stepcounter{footnote} which adds 1 to the given counter. For example: mosquitoes3 and elephants4 For example: \fbox{mosquitoes\footnotemark\ and elephants\footnotemark} generates the footnote markers 3 and 4 . Now the counter has the value 4. In order for the first \footnotetext outside the framed box to operate with the correct counter value, it must first be decremented by one. The two footnote texts are made with \addtocounter{footnote}{-1}\footnotetext{Small insects} \stepcounter{footnote}\footnotetext{Large mammals} immediately following the \fbox{} command. The footnote counter now has the same value as it did on leaving the \fbox. 4.10.4 Footnotes in minipages As mentioned in Section 4.10.1, footnote commands are allowed inside the minipage environment. However, the footnote appears underneath the minipage, not below the main page. Footnote commands within a minipagea have a different marker style. The footnote comes after the next \end{minipage} command.b Minipage footnotes have a counter separate from that of the main page, called mpfootnote, counting independently of footnote. a The \begin{minipage}{6cm} Footnote commands within a minipage\footnote{The marker is a raised lower-case letter.} have a different... \end{minipage} marker is a raised lower-case letter. out for nested minipages. b Watch ! Footnotes within a tabular environment can normally only be generated with the commands described above: \footnotemark within the table and 3 Small 4 Large insects mammals 116 Chapter 4. Displayed Text \footnotetext outside the environment. However, if the tabular environment is inside a minipage, normal \footnote commands may also be used inside the table. The footnote appears below the table where the minipage comes to an end. Exercise 4.17: Produce a number of footnotes in your standard exercise file by inserting them where you think fit and by selecting some appropriate footnote text. Exercise 4.18: Redefine the command \thefootnote so that the footnote markers become the symbols illustrated in Section 4.10.2. Add the redefinition to the preamble of your standard exercise file. Exercise 4.19: Complete Exercise 4.15 so that the footnotes a and b appear as in the table on page 109. 4.10.5 Marginal notes Notes in the page margin are produced with the command \marginpar{note text} which puts the text note text into the margin beginning at the level of the This line where the command is given. The marginal note appearing here was is a generated with margin- ... The marginal note \marginpar{This\\ is a\\ margin-\\al note} al note appearing here ... The text is normally enclosed in a parbox of width 1.9 cm (0.75 in). Such a narrow box causes great difficulties with line breaking, which is why the lines are manually broken with the \\ command in the above example. Such a box is far more appropriate for marginal notes in the =⇒ form of a single symbol, such as the arrow shown here. Another common use for the marginal note is to draw attention to certain text passages by marking them with a vertical bar in the margin. This is often done to indicate changes in a text, for comparison with earlier versions after updated single sheets have been redistributed. The example marking this paragraph was made by including \marginpar{\rule[-17.5mm]{1mm}{20mm}} in the first line. The width of the marginal note can be changed with a style parameter described in the next section. The user must watch out that the total page width does not become too big for the printer. By default, marginal notes appear in the right-hand margin of the page, or in the outer margin when the twoside option has been selected. ‘Outer’ means the right margin for odd pages, and left for even ones. With the twocolumn option, they are placed in the outside margins: left for the left column and right for the right one. 4.10. Footnotes and marginal notes 117 This leads to a problem for marginal markings such as the arrow illustrated on the previous page. On this page, it must point in the opposite direction. In fact, its direction depends on which side of the ⇐= page it is to appear, and that in turns depends on the page number or column. Since these are not known at the time of writing (and may even change with later revisions) it is necessary to have another solution. This is provided by the extended syntax of the \marginpar command \marginpar[left text]{right text} This form of the command contains two versions of the marginal text, left text to go into the left margin, and right text for the right margin, depending on which one is selected. Both the arrows on this and the previous page were generated with the same command \marginpar[\hfill$\Longrightarrow$]{$\Longleftarrow$} (The mathematical arrow commands are explained in Section 5.3.5.) ! =⇒ Without the \hfill command in the above \marginpar example, the arrow in the left margin appears as it does at the side of this paragraph, too far over to the left. The reason for this is that the \marginpar command sets its contents flush with the left edge of the narrow margin box, made visible here with a frame. This left edge is aligned with the main text only when the note is put on the right side; however, in the left margin, it is displaced from the main text. The \hfill command has the effect of setting the contents flush with the right edge of the margin box, which is then properly aligned with the main text. A similar device was used to make the first marginal note in this section. The actual command given was \marginpar[\flushright This\\ is a\\ margin-\\al note] {This\\ is a\\ margin-\\al note} Here \flushright (Section 4.2.2) is equivalent to putting an \hfill on each line. The standard positioning of the marginal notes can be switched with =⇒ the command \reversemarginpar. Once this command has been given, marginal notes will appear in the left margin, or in the ‘inner’ margin for the twoside option. The command \normalmarginpar restores normal behavior. These commands have no effect with the twocolumn option. If the note appears at the bottom of a page, it will extend downwards below the last line of regular text. For this reason, and because of the difficulties with line breaking for narrow columns, marginal notes should be kept short, limited to a few words or a symbol. 4.10.6 Style parameters for footnotes and marginal notes ! There are two footnote style parameters that may be changed as needed, either in the preamble or locally within an environment. \footnotesep The vertical spacing between two footnotes. This is a length that can be changed with the \setlength command. 118 Chapter 4. Displayed Text \footnoterule The command that draws a horizontal line between the page text and the footnotes. It should not add any net vertical spacing. It may be changed, for example, by \renewcommand{\footnoterule} {\rule{wth}{hght}\vspace{-hght}} A value of 0 cm for the hght produces an invisible line of zero thickness. The following style parameters may be changed to redefine how marginal notes appear: \marginparwidth determines the width of the margin box; \marginparsep sets the separation between the margin box and the main text; \marginparpush is the smallest vertical distance between two marginal notes. These parameters are all lengths and are assigned new values as usual with the \setlength command. 4.11 Comments within text All computer languages provide a means of inserting comments into the code. These are explanatory notes, documentation, history of development, or alternative text or code that has been temporarily deactivated. Comment lines are completely ignored during processing. They are only intended for human readers inspecting the source text. In LATEX, the comment character is the percent sign %. When this character appears in the text, it and the rest of the line are ignored. If a comment is several lines long, each line must be prefixed with %. As for other single character commands, the percent sign itself is printed with the command \%, as explained in Section 2.5.4. The comment character % is also useful for experimenting with text or definitions of user commands or formatting parameters, to try alternatives without deleting the old versions. By ‘commenting out’ selective lines, one can play around with variations without losing them. Large sections of text may be more effectively commented out with the comment environment from the verbatim package (page 111). Finally, the % character has an important role to play in suppressing implied blanks at the end of a line. This is especially desirable in user definitions where unexpected blanks can creep in between otherwise invisible declarations with arguments. See Section 8.5.2. Exercise 4.20: Comment out the changes from Exercise 4.18 in your preamble. These commands may be reactivated later by removing the % character. Mathematical Formulas 5 Mathematics is the soul of TEX. It was because the setting of mathematical formulas is so complicated in normal printing, not to mention on a typewriter, that Donald Knuth invented his text formatting system. On the other hand, the soul of LATEX is logical markup. Nevertheless, all the power of TEX’s math setting is also available in LATEX, offering an unbeatable combination. In this chapter, we confine ourselves to the elements of mathematical typesetting available in standard LATEX. The simplifications and additional elements provided by AMS-LATEX are reserved for Chapter 12. Mathematical formulas are produced by typing special descriptive text. This means that LATEX must be informed that the following text is to be interpreted as a mathematical formula, and it must also be told when the math text has come to an end and normal text recommences. The processing of math text is carried out by switching to math mode. Mathematical environments serve this purpose. 5.1 Mathematical environments Mathematical formulas may occur within a line of text, as (a + b)2 = a2 + 2ab + b2 , or separated from the main text as Z∞ f (x) dx ≈ 0 n X wi exi f (xi ) i=1 These two types are distinguished by referring to them as text and displayed formulas respectively. Text formulas, or equations, are generated with the environment \begin{math} formula text \end{math} Since text formulas are often very short, sometimes consisting of only a single character, a shorthand version is available as \( formula text \). 119 120 Chapter 5. Mathematical Formulas However, most authors prefer the very short form $formula text $ which is actually the TEX method. All three are essentially the same, and there is no reason not to use the $ sign. The contents of the formula, formula text, consist of math constructs, which are described in the following sections. Displayed formulas, or equations, are produced in the environments \begin{displaymath} \begin{equation} formula text formula text \end{displaymath} \end{equation} The difference between these two is that the equation environment automatically adds a sequential equation number. The displaymath environment may be given with the shorthand forms \[ . . . \] or $$. . . $$. By default displayed formulas are centered horizontally with the equation number, if it is present, set flush with the right margin. By selecting the document class option fleqn (Section 3.1.1), the formulas are set left justified with an adjustable indentation. This option remains valid for the entire document whereas the amount of indentation may be changed at will with \setlength{\mathindent}{indent}, where indent is a length specification. Moreover, the document class option leqno sets the equation numbers flush with the left margin throughout the whole document. Finally, multiline formulas can be created with the environments \begin{eqnarray} \begin{eqnarray*} formula text formula text \end{eqnarray} \end{eqnarray*} where the standard form adds a sequential equation number for each line and the *-form is without equation numbers. 5.2 Main elements of math mode 5.2.1 Constants and variables Numbers that appear within formulas are called constants, whereas simple variables are represented by single letters. The universal practice in mathematical typesetting is to put constants in Roman typeface and variables in italics. LATEX adheres to this rule automatically in math mode. Blanks are totally ignored and are included in the input text simply to improve the appearance for the writer. Spacing between constants, variables, and operators like +, −, = are set automatically by LATEX. For example $z=2a+3y$, $ z = 2 a + 3 y $ both produce z = 2a + 3y. Mathematical symbols that are available on the keyboard are + - = < > / : ! ’ | [ ] ( ) all of which may be used directly in formulas. The curly braces { } serve the purpose of logically combining parts of the formula and therefore 5.2. Main elements of math mode 121 cannot act as printable characters. To include braces in a formula, the same commands \{ and \} are used as in normal text. M(s) < M(t) < |M| = m y 00 = c{f [y 0 , y(x)] + g(x)} $M(s)0. These are given by Cardan’s formula as y1 = u + v, y2 = − ip u+v + 3(u − v), 2 2 y3 = − u+v ip − 3(u − v) 2 2 where r u= 3 q −q + q2 + p 3 , r v= 3 q −q − q2 + p 3 Note: the spacings between the parts of the displayed equations are made with the spacing commands \quad and \qquad. Exercise 5.3: Select the option fleqn in the document class command and include the specification \setlength{\mathindent}{2cm} in the preamble. Redo the three y equations above, each as a separate displayed formula, using the equation environment instead of displaymath or \[. . . \] brackets. Exercise 5.4: Create the following text: Each of the measurements x1 < x2 < · · · < xr occurs p1 , p2 , . . . , pr times. The mean value and standard deviation are then v u X r u1 r 1 X x= pi xi , s=t pi (xi − x)2 n i=1 n i=1 where n = p1 + p2 + · · · + pr . Exercise 5.5: Although this equation looks very complicated, it should not present any great difficulties: p Z p Z p (ax + b)3 2 (ax + b)3 dx √ dx = + 2b ax + b + b2 x 3 x ax + b The same applies to 5.3 R8 −1 (dx/ √ 3 x) = 32 (82/3 + 12/3 ) = 15/2. Mathematical symbols There is a very wide range of symbols used in mathematical text, of which only a few are directly available from the keyboard. LATEX provides many of the mathematical symbols that are commonly used. They are called with the symbol name prefixed with the \ character. The names themselves are derived from their mathematical meanings. 5.3. Mathematical symbols 5.3.1 125 Greek letters Lower case letters α β γ δ ε ζ η \alpha \beta \gamma \delta \epsilon \varepsilon \zeta \eta θ ϑ ι κ λ µ ν ξ \theta \vartheta \iota \kappa \lambda \mu \nu \xi o π $ ρ % σ ς o \pi \varpi \rho \varrho \sigma \varsigma τ υ φ ϕ χ ψ ω \tau \upsilon \phi \varphi \chi \psi \omega Ψ Ω \Psi \Omega Upper case letters Γ ∆ Θ \Gamma \Delta \Theta Λ Ξ Π \Lambda \Xi \Pi Σ Υ Φ \Sigma \Upsilon \Phi The Greek letters are made simply by putting the command character \ before the name of the letter. Upper case (capital) letters are distinguished by capitalizing the first letter of the name. Greek letters that do not appear in the above list are identical with some corresponding Latin letter. For example, upper case ρ is the same as Latin P and so needs no special symbol. LATEX normally sets the upper case Greek letters in Roman (upright) type within a mathematical formula. If they need to be in italics, this can be brought about with the math alphabet command \mathnormal: $\mathnormal{\Gamma\Pi\Phi}$ appears as Γ ΠΦ. Greek letters may only be used in math mode. If they are needed in normal text, the command must be enclosed in $. . . $ signs. 5.3.2 Calligraphic letters The following 26 calligraphic letters may also be used in math formulas: A, B, C, D, E, F , G, H , I, J, K, L, M, N , O, P, Q, R, S, T, U, V, W, X, Y, Z These are called with the math alphabet command \mathcal: $\mathcal{A, B, C,...,Z}$ 5.3.3 Binary operators Two mathematical quantities combined with one another to make a new quantity are said to be joined by a binary operation. The symbols that are available for use as binary operators are 126 Chapter 5. Mathematical Formulas ± ∓ × ÷ · ∗ ? † ‡ q \pm \mp \times \div \cdot \ast \star \dagger \ddagger \amalg \cap \cup \uplus \sqcap \sqcup \vee \wedge \oplus \ominus ⊗ \otimes ∩ ∪ ] u t ∨ ∧ ⊕ ◦ • / . ô õ \circ \bullet \diamond \lhd \rhd \unlhd \unrhd \oslash \odot ♦ 4 5 / . \ o \bigcirc \Box \Diamond \bigtriangleup \bigtriangledown \triangleleft \triangleright \setminus \wr Package: latexsym amsfonts The underlined symbol names in the above and following tables are only available if one of the packages latexsym (Section B.5.3) or amsfonts (Section 12.4.4) has been loaded. 5.3.4 Relations and their negations When two mathematical quantities are compared, they are connected by a relation. The different types of relational symbols for the various comparisons are ≤ ⊂ ⊆ ä v ∈ ` î \le \leq \ll \subset \subseteq \sqsubset \sqsubseteq \in \vdash \models ≥ ⊃ ⊇ å w 3 a ⊥ \ge \geq \gg \supset \supseteq \sqsupset \sqsupseteq \ni \dashv \perp ≠ . = ≈ ≡ ∝ ≺ k \neq \doteq \approx \cong \equiv \propto \prec \preceq \parallel \| ∼ ' ^ _ ö | \sim \simeq \asymp \smile \frown \bowtie \succ \succeq \mid | A number of the above symbols may be called by more than one name. For example, ≤ may be produced with either \le or \leq. The opposite, or negated, meaning of the relation is indicated in mathematics with a slash / through the symbol: = and 6= mean equals and not equals. One may put a slash through any of the above symbols by prefixing its name with \not. Thus \not\in yields 6∈. The same is true for the keyboard characters: \not=, \not>, and \not< produce 6=, 6>, and 6<. For \not= there is also the special command \neq producing ≠ which is a symbol on its own and not the combined 6=. The following symbols may be negated in this manner. Note that the last two, \not\in and \notin, are not exactly the same: 6∈ and ∉. The latter form is the preferred one. 5.3. Mathematical symbols 6< 6 ≤ 6≺ 6 6 ⊂ 6 ⊆ 6 v 6 ∈ 5.3.5 \not< \not\le \not\prec \not\preceq \not\subset \not\subseteq \not\sqsubseteq \not\in 6> 6 ≥ 6 6 6 ⊃ 6 ⊇ 6 w ∉ \not> \not\ge \not\succ \not\succeq \not\supset \not\supseteq \not\sqsupseteq \notin 6= 6 ≡ 6∼ 6 ' 6 ≈ 6 6 127 \not= \not\equiv \not\sim \not\simeq \not\approx \not\cong \not\asymp Arrows and pointers Mathematical manuscripts often contain arrow symbols, also called pointers. The following arrow symbols are available: ← \leftarrow \gets ⇐ \Leftarrow → \rightarrow \to ⇒ \Rightarrow ↔ \leftrightarrow a \Leftrightarrow 7→ \mapsto ←- \hookleftarrow ( \leftharpoonup ) \leftharpoondown z \rightleftharpoons ←− \longleftarrow ⇐= \Longleftarrow −→ \longrightarrow =⇒ \Longrightarrow ←→ \longleftrightarrow ⇐⇒ \Longleftrightarrow 7−→ \longmapsto ,→ \hookrightarrow * \rightharpoonup + \rightharpoondown \leadsto ↑ \uparrow ⇑ \Uparrow ↓ \downarrow ⇓ x \Downarrow y ~ \updownarrow \Updownarrow % \nearrow & \searrow . \swarrow - \nwarrow Here again the symbols → and ← may also be referred to under the names \to and \gets. Furthermore, the command \Longleftrightarrow may be substituted by \iff, although the latter ( ⇐⇒ ) has a little more spacing on either side than the former (⇐⇒). 5.3.6 Various other symbols The above lists by no means exhaust the complete repertoire of mathematical symbols. However, the following are additional characters that standard LATEX does make available. (Even more symbols are possible with the AMS symbol fonts and amssymb package, Section 12.4.4.) ℵ ı ` ℘ < = \aleph \hbar \imath \jmath \ell \wp \Re \Im \mho 0 \prime ∅ \emptyset ∇ \nabla √ \surd ∂ \partial > \top ⊥ \bot ` \vdash a \dashv ∀ ∃ ¬ [ \ ] k ∠ \ \forall \exists \neg \flat \natural \sharp \| \angle \backslash ♦ 4 ♣ ♦ ♥ ♠ ö ∞ \Box \Diamond \triangle \clubsuit \diamondsuit \heartsuit \spadesuit \Join \infty 128 Chapter 5. Mathematical Formulas 5.3.7 Symbols with two sizes The following symbols are printed in different sizes depending on whether they appear in text or displayed formulas: P X Y ` a N \bigotimes \bigsqcup L M \bigoplus _ \bigvee U ] \biguplus ^ \bigwedge S \oint F G \prod W \coprod V I Q \bigodot O [ \int H K \ Z R J T \sum \bigcap \bigcup The symbols \int and \sum have already been introduced in Section 5.2.5. There it was shown how these symbols may take on upper and lower limits; in the same way, all the above symbols may also be assigned upper and lower limits using the shifting commands ˆ and _. The positioning of the limits varies for some symbols depending on whether they occur in text or displayed formulas. As indicated in Section 5.2.5, the command \limits forces the limits to be written above and below the symbol where they would otherwise be placed beside it. Similarly the complementary command \nolimits sets them beside the symbol when the standard positioning is above and below. I∞ I∞ \[ \ointˆ\infty_0 0 n Y ν=0 5.3.8 \oint\limitsˆ\infty_0 \] 0 Yn ν=0 \[ \prodˆn_{\nu=0} \prod\nolimitsˆn_{\nu=0} \] Function names The universal standard for mathematical formulas is to set variable names in italics but the names of functions in Roman. If one were simply to write the function names sin or log in math mode, LATEX would interpret these as variables s i n and l o g and write them as sin and log. In order to tell LATEX that a function name is wanted, it is necessary to enter a command consisting of the backslash \ plus the function name. The following names are recognized by LATEX: \arccos \arcsin \arctan \arg \cos \cosh \cot \coth \csc \deg \det \dim \exp \gcd \hom \inf \ker \lg \lim \liminf \limsup \ln \log \max \min \Pr \sec \sin \sinh \sup \tan \tanh 5.3. Mathematical symbols 129 Some of these functions may also appear with limits attached to them. This is easily achieved by means of the subscript command after the name of the function: \lim_{x\to\infty} yields limx→∞ in text formulas and lim in displayed formulas x→∞ The following function names may accept a limit with the lowering (index) command _: \det \Pr \gcd \sup \inf \lim \liminf \limsup \max \min Finally, there are the function commands \bmod and \pmod{arg}, both of which produce the function mod in one of two forms: $ a \bmod b $ $ y \pmod{a+b} $ ⇒ ⇒ a mod b y (mod a + b). With AMS-LATEX (Section 12.2.5) it is possible to define additional function names. 5.3.9 Mathematical accents The following mathematical accents are available within math mode: â \hat{a} ǎ \check{a} ȧ \dot{a} ă \breve{a} á \acute{a} ä \ddot{a} à \grave{a} ã \tilde{a} å \mathring{a} ā \bar{a} ~ \vec{a} a The letters i and j should be printed without their dots when they are given an accent. To accomplish this, type the symbols \imath and \jmath instead of the letters, as in $\vec{\imath} + \tilde{\jmath}$: ~ ı + ̃ There are wider versions of \hat and \tilde available with the names \widehat and \widetilde. In this way, these accents may be placed over parts of a formula: d 1Æ − x = −y Ç xyz $\widehat{1-x}=\widehat{-y}$ $\widetilde{xyz}$ Exercise 5.6: The union of two sets A and B is the set of all elements that are in at least one of the two sets, and is designated as A ∪ B. This operation is commutative A ∪ B = B ∪ A and associative (A ∪ B) ∪ C = A ∪ (B ∪ C). If A ⊆ B, then A ∪ B = B. It then follows that A ∪ A = A, A ∪ {∅} = A and J ∪ A = J. Exercise 5.7: Applying l’Hôpital’s rule, one has lim x→0 πx π cos ln sin π x π tan x π / cos2 x cos2 π x sin π x = lim cos = lim = lim = lim =1 x 2 x→0 x→0 tan π x x→0 π / cos π x x→0 cos2 x ln sin x sin x 130 Chapter 5. Mathematical Formulas Exercise 5.8: The gamma function Γ (x) is defined as Γ (x) ≡ lim n→∞ n−1 Y ν=0 n! nx−1 n! nx−1 = lim ≡ n→∞ x(x + 1)(x + 2) · · · (x + n − 1) x+ν Z∞ e−t t x−1 dt 0 The integral definition is valid only for x > 0 (2nd Euler integral). Exercise 5.9: Remove the option fleqn from the document class command in Exercise 5.3 and redo the output. Exercise 5.10: ~ = xα, ~ ~ = βαx, ~ ~ = αx ~ + βx, ~ αx αβx (α + β)x ~y ~ =y ~x ~ but x ~×y ~ = −y ~ × x, ~ x ~y ~ = 0 for x ~ ⊥ y, ~ x ~ + y) ~ = αx ~ + αy. ~ α(x ~×y ~ = 0, for x ~ k y. ~ x Exercise 5.11: Reproduce Equations 5.1 and 5.2 from the next section. 5.4 Additional elements The math elements described in the previous sections already permit the construction of very complex formulas, such as √ lim x→0 √ √ 1 1+x−1 ( 1 + x − 1)( 1 + x + 1) 1 √ = = lim √ = lim x→0 x→0 2 x 1+x+1 x( 1 + x + 1) ∂2U ∂2U + =0 ∂x 2 ∂y 2 I(z) = sin( =⇒ UM = 1 4π I Σ 1 ∂U 1 ds − r ∂n 4π I Σ ∂ r1 ∂n U ds (5.1) (5.2) ∞ ∞ X (−1)n π 2n π (−1)n π 2n+1 π 2 X z ) z4n+1 − cos( z2 ) z4n+3 2 1 · 3 · · · (4n + 1) 2 1 · 3 · · · (4n + 3) n=0 n=0 (5.3) By reading the formulas from left to right there should be no difficulty in reconstructing the text that produced them. For example, the last equation is generated with \begin{equation} I(z) = \sin( \frac{\pi}{2} zˆ2 ) \sum_{n=0}ˆ\infty \frac{ (-1)ˆn \piˆ{2n} }{1 \cdot 3 \cdots (4n+1) } zˆ{4n+1} -\cos( \frac{\pi}{2} zˆ2 ) \sum_{n=0}ˆ\infty \frac{ (-1)ˆn \piˆ{2n+1} }{ 1 \cdot 3 \cdots (4n+3) } zˆ{4n+3} \end{equation} The above examples were made using the equation environment instead of the displaymath environment or its abbreviated form \[. . . \], which has the effect of adding the equation numbers automatically. In the document classes book and report, equations are sequentially numbered within the chapter, the number being preceded by the chapter number and set within parentheses ( ), as illustrated above. For document class 5.4. Additional elements 131 article, the equations are numbered sequentially throughout the entire document. By default the equation number appears right justified and vertically centered with the equation. If there is not enough room for it on the same line, it is printed right justified below the equation. If the document class option leqno has been selected, the equation numbers are set left justified for the entire document. The automatic numbering of equations means that the author may not know at the time of writing just what the equation number is. The LATEX cross-reference system described in Section 9.2.1 has already been explained for referring to section numbers (Section 3.3.3) and may also be used for equation numbers. By including a command \label{name} within the equation environment, one can print the unknown equation number in the text with the command \ref{name}, where name is a keyword consisting of any combination of letters, numbers, or symbols. Examining Equation 5.3 more closely, one notices that the two parentheses pairs ( ) in cos() and sin() could be somewhat larger. Furthermore, this equation just fills the line width, and if it were any longer, it would have to be broken at some appropriate spot and the parts positioned in a meaningful way relative to one another. None of the math elements described so far can accomplish these requirements. Even something so simple as including some normal text within a formula has not yet been mentioned. The rest of this section addresses these problems. Finally, there are times when one is not happy with the sizes that TEX 1 has chosen, as for example in the last integral of Equation 5.2 where ∂ r 1 would be more desirable than ∂ r . This and other formatting aids, such as adjusting horizontal spacing between parts of formulas, are dealt with in Section 5.5. 5.4.1 Automatic sizing of bracket symbols Mathematics often contains bracketing symbols, usually in pairs that enclose part of the formula. When printed, these bracket symbols should be the same size as the included partial formula. LATEX provides a pair of commands \left lbrack sub form \right rbrack to accomplish this. The command \left is placed immediately before the opening (left hand) bracket symbol lbrack while \right comes just before the closing (right hand) symbol rbrack. 132 Chapter 5. Mathematical Formulas \[ \left[ \int + \int \right]_{x=0}ˆ{x=1} \] The pair of brackets [ ] is adjusted to the size of the enclosed formula, as are the raised exponent and lowered index as well. Z x=1 Z + x=0 The commands \left and \right must appear as a pair. For every \left command there must be a corresponding \right command somewhere afterwards. The pairs may be nested. The first \left is paired with the last \right; the following \left with the second last \right, and so on. There must be the same number of \right as \left commands in a nesting. The corresponding bracket symbols lbrack and rbrack may be perfectly arbitrary and do not need to be a logical pair. This set of brackets is admittedly unusual but " permissible. a ~+y ~ +z ~= x \[ \vec{x} + \vec{y} + \vec{z} = b \left( ... \right[ \] Sometimes a formula contains only a single opening or closing bracket without a corresponding counterpart. However, the \left. . . \right commands must still be given as a pair, but with a period ‘.’ as an invisible bracket symbol. −1 0 y= +1 x<0 x=0 x>0 : : : \[ y = \left\{ \begin{array} {r@{\quad:\quad}l} -1 & x<0 \\ 0 & x=0 \\ +1 & x>0 \end{array} \right. \] The array environment in the above example is described in Section 4.8.1 and produces a table in math mode. The \left. . . \right commands may be applied to a total of 22 different symbols. These are ( [ { | / ( [ \{ | / ) ] } k \ ) ] \} \| \backslash b d h ↑ ↓ x y \lfloor \lceil \langle \uparrow \downarrow \updownarrow c e i ⇑ ⇓ ~ \rfloor \rceil \rangle \Uparrow \Downarrow \Updownarrow For example, \left|. . . \right| produces two vertical bars adjusted in height to contain the enclosed formula text. Exercise 5.12: In Equation 5.3, generate cos π π cos( z2 ) and sin( z2 ). 2 2 π 2 z 2 and sin π 2 z 2 instead of 5.4. Additional elements 5.4.2 133 Ordinary text within a formula It is often necessary to include some normal text within a formula, for example single words such as and, or, if, and so on. In this case one must switch to LR mode (Section 4.7.1) while staying in math mode. This is carried out with the command \mbox{normal text} given inside the formula, together with horizontal spacing commands such as \quad or \hspace. For example: Xn = Xk \[ if and only if Yn = Yk and Zn = Zk X_n = X_k \qquad\mbox{if and only if}\qquad Y_n = Y_k \quad\mbox{and}\quad Z_n = Z_k \] In order to set a longer piece of text beside a displayed formula, as in some of the above examples, it is more appropriate to put both the formula and the text in their own parboxes or minipages, placed side by side with the proper vertical positioning. On the other hand, if letters from text fonts are required as mathematical symbols, they should be entered with the math alphabet commands: \mathrm \mathsf \mathtt \mathit \mathbf \mathcal We have already met \mathcal in Section 5.3.2 on calligraphic letters. All these commands function the same way: they set their argument in the corresponding font. B0 (x) Tij $\mathbf{B}ˆ0(x)$ \quad $\mathsf{T}ˆi_j$ The command \mathnormal in Section 5.3.1 also belongs to this group. The difference between it and \mathit is that it sets its argument in the regular math italic font, while the latter uses the normal text italic. The letters are the same, but the spacing is different. $\mathnormal{differ} \ne \mathit{differ}$ dif f er 6= differ All the math alphabet commands set their text in math mode, which means that spaces are ignored as usual. This is not the case for text placed in an \mbox. 5.4.3 Matrices and arrays a11 .. . an1 a12 .. . an2 ··· .. . ··· a1n .. . ann Structures like the one at the left are the basis for matrices, determinants, system of equations, and so on. They will all be referred to here as arrays. 134 Chapter 5. Mathematical Formulas Arrays are produced by means of the array environment, whose syntax and construction are described in Section 4.8.1 on tables. The array environment generates a table in math mode, that is, the column entries are interpreted as formula text. For example: a11 x1 + a12 x2 + · · · + a1n xn = b1 a22 x1 + a22 x2 + · · · + a2n xn = b2 ....................................... an1 x1 + an2 x2 + · · · + ann xn = bn \[ ! \begin{array}{*{3}{c@{\:+\:}}c@{\;=\;}c} a_{11}x_1 & a_{12}x_2 & \cdots & a_{1n}x_n & b_1 \\ a_{22}x_1 & a_{22}x_2 & \cdots & a_{2n}x_n & b_2 \\ \multicolumn{5}{c}{\dotfill} \\ a_{n1}x_1 & a_{n2}x_2 & \cdots & a_{nn}x_n & b_n \end{array} \] As a reminder of the table construction elements (Section 4.8.1): @{t} inserts the contents of t between the adjacent columns. In the above example, this is \:+\: and \;+\;. The commands \: and \; have not yet been introduced but they produce small horizontal spacing in math mode (Section 5.5.1). *{3}{c@{\:+\:}} is an abbreviation for three repetitions of the column definition c@{\:+\:}. c defines the column to be one of centered text. \multicolumn{5}{c} says that the next five columns are to be merged and replaced by one with centered text. The command \dotfill fills the column with dots. It is possible to nest array environments: x11 x21 x12 x22 y z \[ \left( \begin{array}{c} \left| \begin{array}{cc} x_{11} & x_{12} \\ x_{21} & x_{22} \end{array} \right| \\ y \\ z \end{array} \right) \] The outermost array consists of one column with centered text (c). The first entry in this column is also an array, with two centered columns. This array is surrounded left and right by vertical lines with adjusted sizes. The array environment is structurally the same as a vertical box. This means that it is treated as a single character within the surrounding environment, so that it may be coupled with other symbols and construction elements. (1,2,...,n) X p1 between them, which stand for less than, equals, and greater than, respectively. The value of a counter may be tested by putting its name as the argument of the \value command. Examples: \newcommand{\three}{3} \ifthenelse {\three = 3} {O.K.} {What?} \ifthenelse {\value{page} < 100 } {Page xx} {Page xxx} The first case prints ‘O.K.’ since \three is equal to 3; in the second case Page xx is printed if the current page number is less than 100, else Page xxx. (The blanks above are added for clarity, since spaces between arguments are always ignored.) Whether a number is even or odd can be tested with \isodd \ifthenelse {\isodd{\value{page}} {odd} {even} 194 Chapter 8. User Customizations Testing text To test if two commands evaluate to the same piece of text, or if a command is defined as a certain string of text, use \equal{string1}{string2} where string1 and string2 are texts or commands that reduce to text. For example, with \ifthenelse {\equal{\name}{Fred}} {Frederick} {??} the text Frederick is inserted if \name has been defined to be Fred (with \newcommand), otherwise two question marks are printed. Testing lengths Another logical statement compares two lengths. \lengthtest{relation} where relation consists of two lengths or length commands separated by a relational operator <, =, or >. For example, \newlength{\horiz} \newlength{\vert} \newlength{\min} . . . . . . . \ifthenelse {\lengthtest{\horiz > \vert}} {\setlength{\min}{\vert}} {\setlength{\min}{\horiz} sets \min to be the smaller of \horiz and \vert. Testing switches A boolean switch is a parameter that is either htruei or hfalsei, also called a flag. Three commands exist to handle them: \newboolean{string} \setboolean{string}{value} \boolean{string} creates a new switch assigns a value true or false tests its value The last of these is used as test in \ifthenelse and \whiledo. There are a number of internal LATEX switches that may also be tested (but never reset!). The most useful of these are @twoside and @twocolumn for checking if two-side or two-column modes are active. Since they contain the character @, they may only be used inside a class or package file (Appendix D). 8.4. User-defined environments 195 Combining logical statements Any of the above logical statements may be combined to form a more complex statement by means of the logical operators \and \or \not \( \) which should be straightforward to anyone familiar with boolean logic. For example, to set \textwidth to 10 cm if two-column mode is active or if \paperwidth is greater than 15 cm and the page counter is below 100, \ifthenelse {\lengthtest{\textwidth > 10cm} \or \( \lengthtest{\paperwidth > 15cm} \and \value{page} < 100 \) } {\setlength{\textwidth}{10cm}} {} will accomplish this. Such conditionals are fairly complicated, and they are most appropriate for defining new commands that may have alternative actions, or for including in package and class files (Appendix D). A relatively simple example: suppose one is uncertain whether British or American spelling is wanted by the publisher. One can write the document with both included in the text, with a switch in the preamble to make the final selection. \newboolean{US} \setboolean{US}{true} %For American spelling %\setboolean{US}{false} %For British spelling \newcommand{\USUK}[2]{\ifthenelse{\boolean{US}}{#1}{#2}} Now \USUK is a command that prints its first or second argument according to the setting of the flag US. Thus in the text one may write ... the \USUK{color}{colour} of music ... which will yield American spelling if \setboolean{US}{true} has been specified, otherwise the British version. In fact, different sections of the work could have different spelling simply by changing the value of the switch at the appropriate point. As an example of \whiledo: one wishes to write some text n times, where both the text and n are to be variable. \newcounter{mycount} \newcommand{\replicate}[2]{\setcounter{mycount}{#1} \whiledo{\value{mycount}>0}{#2\addtocounter{mycount}{-1}}} Now \replicate{30}{?} will print 30 question marks. 8.4 User-defined environments Environments may be created or changed with the commands 196 Chapter 8. User Customizations \newenvironment{env name}[narg][opt]{beg def }{end def } \renewenvironment{env name}[narg][opt]{beg def }{end def } where the arguments have the following meanings: env name: the name of the environment; for \newenvironment, it may not be the same as any existing environment or command name, whether LATEX or user-defined. For \renewenvironment, on the other hand, there must already be an environment bearing this name. Any changes to LATEX environments should only be undertaken if the user knows what he or she is doing. narg: a number between 1 and 9 that states how many arguments the environment is to have; if the optional argument narg is omitted, the environment is to have no arguments. opt: the default text for the first argument (#1) if it is to be optional; this behaves the same as for \(re)newcommand (page 185). beg def: the initial text to be inserted when \begin{env name} is called; if this text contains entries of the form #n, with n = 1, . . .,narg, then when the environment is started with the call \begin{env name}{arg 1}...{arg n}... each occurrence of #n within beg def is replaced by the text of the argument arg n. end def: the final text that is inserted when \end{env name} is called; here the dummy arguments #n are not allowed since they are only to appear in the beg def text. 8.4.1 Environments without arguments Just as for user-defined commands, environments without the optional argument narg will be illustrated first. A user-defined environment named sitquote is created with \newenvironment{sitquote}{\begin{quote}\small \itshape}{\end{quote}} which sets the text appearing between \begin{sitquote} text \end {sitquote} in the typeface \small\itshape, and indented on both sides from the main margins, as demonstrated here. In this case, beg def consists of the command sequence \begin{quote} \small\itshape while end def is simply \end{quote}. Now the call \begin{sitquote} text \end{sitquote} is the same as \begin{quote}\small\itshape text \end{quote} 8.4. User-defined environments 197 which produces the desired result. This example does not appear to be very practical since the same effect can be achieved with less typing by adding \small\itshape at the beginning of the quote environment. However, it is more consistent with the concept of logical markup introduced in Section 1.2.2. This special quotation environment may be used throughout the document without worrying about its typographical details, which are specified in its definition located in the document preamble. Doing it this way not only ensures consistency, it also simplifies any substitution that may be demanded later by a typographical expert. Let us expand the previous example somewhat as follows: \newcounter{com} \newenvironment{comment} {\noindent\slshape Comment:\begin{quote}\small\itshape} {\stepcounter{com}\hfill(\arabic{com})\end{quote}} where now beg def contains the text and commands \noindent\slshape Comment:\begin{quote}\small\itshape and end def is \stepcounter{com}\hfill(\arabic{com})\end{quote} where com is a user counter created by the \newcounter command. Now since the command \begin{comment} inserts the text beg def at the start of the environment and \end{comment} the text end def at the finish, it should be clear that \begin{comment} This is a comment. Comments should ... ... in round parentheses. \end{comment} will generate the following type of structure: Comment: This is a comment. Comments should be preceded by the word Comment: the text being in a small, italic typeface, indented on both sides from the main margins. Each comment receives a running comment number at the lower right in round parentheses. (1) The user should examine the sequence of commands with the replacement text of this example to see precisely what the effect of this environment is. Two weaknesses should become apparent: what would happen if \begin{comment} were called in the middle of a line of text without a blank line before, and what would happen if the last line of the comment text were so long that there was no more room for the running comment number on the same line? The following revision removes these two problems: 198 Chapter 8. User Customizations \renewenvironment{comment} {\begin{sloppypar}\noindent\slshape Comment: \begin{quote}\small\itshape} {\stepcounter{com}\hspace*{\fill}(\arabic{com})\end{quote} \end{sloppypar}} With the \begin{sloppypar} command, the call to the environment always starts a new paragraph in which no overfull line can occur upon line breaking. If the comment number does not fit on the last line of text, a new line begins with the number right justified because of the command \hspace*{\fill}. Again the user should examine carefully just what is inserted into the processing between the \begin{comment} and the \end{comment}. 8.4.2 Environments with arguments Passing arguments over to an environment is carried out exactly as for commands. As an example, the comment environment will be modified so that the name of the person making the comment is added after the word Comment:, and this name will be an argument when the environment is invoked. \renewenvironment{comment}[1] {\begin{sloppypar}\noindent\slshape Comment: #1 \begin{quote}\small\itshape} {\stepcounter{com}\hspace*{\fill}(\arabic{com})% \end{quote}\end{sloppypar}} The text \begin{comment}{Helmut Kopka} This is a modified ... ... environment argument \end{comment} now produces Comment: Helmut Kopka This is a modified comment. Comments should be preceded by the word Comment:, followed by the name of the commenter, with the text of the comment being in a small, italic typeface, indented on both sides from the main margins. Each comment receives a running comment number at the lower right in round parentheses. The name of the commenter is transferred as an environment argument. (2) This example will now be modified once again by interchanging the comment number and the name of the commenter. Placing the running number after the word Comment: is no problem, for it is simply necessary to insert those commands from {end def } at the location of the #1 dummy argument. However, putting the symbol #1 where the comment number used to be will produce an error message during the LATEX processing since 8.4. User-defined environments 199 this violates the syntax of the \newenvironment command: ‘No dummy arguments shall appear within the {end def}.’ If the dummy argument comes after \begin{quote}, the name will be printed at the wrong place, at the beginning of the comment text. There is a trick to solve this problem: \newsavebox{\comname} \renewenvironment{comment}[1] {\begin{sloppypar}\noindent\stepcounter{com}\slshape Comment \arabic{com}\sbox{\comname}{#1} \begin{quote}\small\itshape} {\hspace*{\fill}\usebox{\comname}\end{quote}\end{sloppypar}} The commands \newsavebox, \sbox, and \usebox are all described in Section 4.7.1. Here \comname is the name of a box that has been created with \newsavebox, in which the first argument, the commenter’s name, is stored. With this new definition, a comment now appears as follows: Comment 3 In this form, every comment is assigned a sequential number after the word Comment. The comment text appears as before, while the name of the commenter is entered as the environment argument and is placed at the right of the last line. Helmut Kopka The implementation of more than one argument for environments is the same as for commands and needs no further explanation. 8.4.3 Environments with an optional argument Similarly, environments may be defined with an optional argument, just as commands. To take our last example once more, if we feel that most comments will be made by Helmut Kopka, we could alter the first line of the definition to \renewenvironment{comment}[1][Helmut Kopka]{..}{..} Now it is only necessary to specify the name of the commenter if it is someone else. With \begin{comment}[Patrick W. Daly]More than ... ... appropriate.\end{comment} we obtain Comment 4 More than one person may want to make a comment, but perhaps one person makes more than others do. An optional argument for the name is then appropriate. Patrick W. Daly 200 Chapter 8. User Customizations Exercise 8.8: Extend the definition of the comment environment so that a page break cannot occur either between the heading ‘Comment n’ and the comment text or between the comment text and the commenter’s name. Exercise 8.9: Create a new environment making use of the minipage environment, to be named varpage and possessing one argument that is a sample text to determine the width of the minipage. The call \begin{varbox}{‘As wide as this sample text’} . . . . . . . . . . . . . . . . . . .\end{varbox} should pack the enclosed text into a minipage that has a width equal to that of the text ‘As wide as this sample text’. Hint: a user-defined length parameter must first be established, say \varwidth. See Section 8.2 for details on assigning lengths to text widths. Exercise 8.10: Generate an environment named varlist with two arguments that behaves as a generalization of the sample list in Section 4.4.3. The first argument is to be the item word that is printed on each call to \item; the second is the numbering style of the item numeration. For example, with the call \begin{varlist}{Sample}{\Alph} . . . . . \end{varlist} every \item command within the environment should produce the sequence ‘Sample A’, ‘Sample B’, . . . . The indentation should be 1 cm larger than the width of the item word, which itself should be left justified within the label box. Hint: once again a user-defined length, say \itemwidth, is necessary for this solution. After the length of the item word has been stored with \settowidth, the indentation may be set with \setlength{\leftmargin}{\itemwidth} to be equal to the width of the item word, and then with \addtolength{\leftmargin}{1cm} to be 1 cm larger. Length assignments for \labelwidth and \labelsep may be similarly set to appropriate values. All further details may be obtained from Section 4.4. 8.5 Some comments on user-defined structures 8.5.1 Reusing sets of definitions User definitions are created to alter page formats, to reorganize the document layout, to invent new structures, and to define shortcuts. That is, they either directly specify typographical elements like the text width, or indicate how new or existing logical elements are to be rendered typographically. As such, they belong in the preamble, where they can be conveniently redefined as needed, effecting the entire document. Once a set of user definitions has been established, what is the best way to reuse them? There are several possibilities: 8.5. Some comments on user-defined structures 201 1. Write a new class file based on an existing one, incorporating the your own changes. This should be reserved for major changes to the layout or document organization, which will be used very frequently. 2. Write your definitions to a package file with the extension.sty to be loaded with the \usepackage command. You can take advantage of special package features, like internal commands and options. 3. Write the definitions to a file with the extension.tex and load it with \input{filename}. No extra features are possible, and the file can be loaded anywhere within the source file. 4. Just copy the definitions from one source file to the next. Methods 1 and 2 are more sophisticated, and should be considered for user definitions that have a wide generality. They are explained in Appendix D. Method 3 is perfectly good for a personal collection of shortcut commands, or common (re)definitions that are applied to many documents. By having one depository for all such customizations, it is easier to maintain them centrally. Finally method 4 is applicable for a short list of uncomplicated definitions. 8.5.2 Unwanted spaces Occasionally user-defined structures generate spacing where none was expected, or more spacing than was desired. This is almost always due to blanks or new lines in the definition, included only to improve the legibility of the input text but interpreted as spacing when the structure is invoked. For example, if the % character had been left out of the first line of the \myftnote definition on page 190, a new line would have been added to the command text at that point, and converted into a blank. This blank would be inserted between the previous word which should receive the footnote marker and the call to the \footnote command that actually generates the marker, with the result that it would be displaced from that word (for example, wrong ∗ instead of right∗ ). ! At this point we should like to point out that many LATEX commands are invisible, in that they do not produce any text at the point where they are called. If such an invisible command is given separated by blanks from the surrounding text, it is possible that two blanks will appear. For example \rule{0pt}{0pt} produces ‘For example produces’ twice the interword spacing between ‘example’ and ‘produces’. Invisible commands without arguments do not present this problem since the trailing blank acts solely as a command name terminator and disappears. Furthermore, the following LATEX commands and environments always remove the subsequent blanks even when arguments are present. 202 Chapter 8. User Customizations \pagebreak \nopagebreak 8.5.3 \linebreak \nolinebreak \label \index \glossary \vspace \marginpar figure table Identical command and counter names In the previous examples a number of counters were introduced for application to specific commands or environments, such as myfn for the command \myfootnote on page 190, or com for the environment comment on page 197. In these cases, the counter and the corresponding command or environment were given different names. This was not necessary: counters may have a name that is identical to that of a command or environment. LATEX knows from the context whether the name refers to a counter or to a command/environment. The different names were chosen in the examples in order to avoid confusion for the beginner. In fact, it is reasonable to give a counter the same name as the command or environment with which it is coupled, a practice that LATEX itself constantly employs (Section 8.1.1). In the abovementioned examples, the counters could just as easily have been named myfootnote and comment to emphasize their interdependence with the command and environment of the same names. 8.5.4 Scope of user definitions User structures that are defined within the preamble are valid for the entire document. Command and environment definitions that are made inside an environment remain in effect only until its end. Even their names are unknown to LATEX outside the environment in which they were defined. Thus if they are to be defined once again in another environment, it is \newcommand or \newenvironment that must be used and not the \renew versions. For command and environment names that have been globally defined, that is, in the preamble, all further new definitions of these names must be made with the \renew version. However, these subsequent definitions will apply only locally within the environment in which they are declared; outside, the previous global definitions will be valid once more. The same applies to structure definitions within nested environments. A definition in the outer environment is effective within all inner ones, but a new definition must be made at the deeper levels with \renewcommand or \renewenvironment. On leaving the inner environment, the new definition will no longer be operative, but rather the old one will be re-established. Warning: Structures that have been created with \newsavebox or with \newcounter are globally defined. If they are given within an environment, their definitions remain effective even outside that environment. Similarly \setcounter functions globally, although \savebox does not. 8.5. Some comments on user-defined structures 203 Local definitions are really not to be recommended. It is far better to place all user definitions at the beginning, in the preamble, where they are most easily visible. A local redefinition of a standard command can lead to puzzling effects that are hard for others, or even for the author, to trace down. Of course, some special effects might just be wanted. 8.5.5 Order of definitions User-defined structures may be nested within one another. If one user definition contains another user-defined structure, it is often the case that the inner one has already been defined. However, this is not necessary. User definitions may contain other user structures that are defined afterwards. What is important is that the other structure is defined before the first command is invoked. For example, a normal sequence of definitions would be \newcommand{\A}{defa} \newcommand{\B}{defb} \newcommand{\C}{\A \B} where \C is defined in terms of \A and \B. However, it is also permissible to write \newcommand{\C}{\A \B} normal text, but without calling \C \newcommand{\B}{defb} \newcommand{\A}{defa} further text with any number of calls to \A, \B and \C 8.5.6 ! Nested definitions User definitions may be nested inside one another. A structure such as \newcommand{\outer}{{\newcommand{\inner}...}} is permissible. The command that is defined with the name {\inner} is valid and known only within the command {\outer}, according to the remarks on the scope of definitions on the facing page. Although the TEX macros make copious use of nested command definitions to limit the lifetime of temporary commands, it is not recommended to nest LATEX definitions excessively since it is too easy to lose track of the bracketing. A forgotten bracket pair will produce an error message on the second call to the outer command, since the inner definition still exists as a leftover from the first call. Nevertheless, here is an example: \newcommand{\twentylove} {{\newcommand{\fivelove} {{{\newcommand{\onelove} {I love \LaTeX!}% \onelove\ \onelove\ \onelove\ \onelove\ \onelove}}} \fivelove\\ \fivelove\\ \fivelove\\ \fivelove}} 204 Chapter 8. User Customizations The entry My opinion of \LaTeX:\\ \twentylove now produces: My opinion of LATEX: I I I I ! love love love love LATEX! LATEX! LATEX! LATEX! I I I I love love love love LATEX! LATEX! LATEX! LATEX! I I I I love love love love LATEX! LATEX! LATEX! LATEX! I I I I love love love love LATEX! LATEX! LATEX! LATEX! I I I I love love love love LATEX! LATEX! LATEX! LATEX! Indenting the lines of the definition, as shown above, can help to keep track of the nesting levels; each line of the same level starts in the same column, ignoring braces. If both the inner and outer definitions are to be provided with arguments, the symbols for the inner and outer dummy arguments must be distinguished. The symbols for the inner definition are ##1 ... ##9, while those for the outer one are the normal #1 ... #9. For example: \newcommand{\thing}[1]{{\newcommand{\color}[2]{The ##1 is ##2.} \color{#1}{red} \color{#1}{green} \color{#1}{blue}}} The entry The colors of the objects are\\ \thing{dress}\\ \thing{book}\\ \thing{car} The colors of the objects are produces The dress is red. The dress is green. The dress is blue. The book is red. The book is green. The book is blue. The car is red. The car is green. The car is blue. The separate definition and calling as in Section 8.5.5 is easier to follow and would be: \newcommand{\thing[1]}{\color{#1}{red} \color{#1}{green} \color{#1}{blue} \newcommand{\color}[2]{The #1 is #2.} ! If one were ever to go to a third level of definitions, the dummy arguments are given as ####1 . . . ####9. And for the fourth level one writes 8 # signs! Part II Beyond the Basics 9 Document Management This chapter describes those features of LATEX that justify the subtitle of Leslie Lamport’s original books, ‘A Document Preparation System’. Whereas in the previous chapters we have concentrated more on markup, logical and typographical, we now present topics that are essential for producing large, complex documents in an efficient manner. The subjects included here are the splitting of a document into several files, selective processing of parts of a document, cross-references to sections, figures, and equations, automated production of bibliographies, indices, and glossaries. 9.1 Processing parts of a document As often pointed out, a LATEX document consists of a preamble and the actual text part. Short documents, such as those that a beginner might have, are written to a single file by means of a text editor, and might be corrected after the first trial printing. As the user gathers experience and confidence, the LATEX documents will rapidly expand in length until one is faced with the task of producing an entire book of more than a hundred pages. Such long documents could theoretically be kept in one file, although that would make the whole operation increasingly clumsy. The file editor functions less efficiently on longer files and the LATEX processing takes correspondingly more time. A better idea is to split the work into several files which LATEX then merges during the processing. 9.1.1 The \input command The contents of another file may be read into a LATEX document with the command \input{filename} 207 208 Chapter 9. Document Management where the name of the other file is filename.tex. It is only necessary to specify the full name of the file if the extension is something other than .tex. During the LATEX processing, the text contained in this second file is read in at that location in the first file where the command is given. The result of the \input command is the same as if the contents of the file filename.tex had been typed into the document file at that position. The command may be given anywhere in the document, either in the preamble or within the text part. Since the \input command may be given in the preamble, it is possible to put the whole preamble text itself into a separate file. The actual LATEX processing file could even be reduced to simply \begin{document} ... \end{document} with a number of \input commands. A preamble file makes sense if one has a series of documents all of the same type requiring a common preamble. This also simplifies any later change to the specifications that must be made in all the documents. Different preamble files may be prepared for various types of processing and may then be selected with \input{proc type}. A file that is read in by means of the \input command may also contain further \input commands. The nesting depth is limited only by the capacities of the computer. In order to obtain a listing of all extra files read in, give the command \listfiles in the preamble. The list appears both on the computer monitor and in the transcript file, at the end of the processing run. The version numbers and any other loading information are also printed. This provides a check as to which files have been input. See Section D.2.9 for a demonstration. Exercise 9.1: Put the preamble of your standard exercise file exercise.tex into a separate file preamble.tex. Split the text part into three files exer1.tex, exer2.tex, and exer3.tex. What should the main file now contain to ensure that LATEX processes the whole exercise text? 9.1.2 The \include command Splitting the document into several files may be practical for writing and editing, but when the files are merged with the \input commands, it is still the entire document that is processed. Even if only one file contains a small correction, all files will be read in and processed once again. It would therefore be desirable to be able to reprocess only the one corrected file. One rough-and-ready method is to write a temporary main file containing only the preamble (which may be read in) and an \input command to read in that specific file. The disadvantage is that all automatic numbering of page numbers, sections, figures, equations, etc. will start from 1, since 9.1. Processing parts of a document 209 all the information from the previous files will be missing. Furthermore, all cross-references from other files will be absent. A much better method is to employ the LATEX command \include{filename} which is only allowed within the text part of the document, together with \includeonly{file list} in the preamble, containing a list file list of those files that are to be read in. The file names are separated by commas and the extension.tex is left off. If filename is in the file list, or if \includeonly is missing from the preamble, the command \include{filename} is identical to \clearpage \input{filename} \clearpage However, if filename is not contained within the file list, \include is equivalent to \clearpage and the file contents are not read in. However, an auxiliary .aux file is read in that sets all the counters and crossreferencing information for that file. Since \include always begins a new page, the document must be split into files at those points where a new page occurs, such as between chapters. Furthermore, \include commands may not be nested: they may only appear in the main processing file. However, an \input command may be given within a file that is \included. The great advantage of the \include command is that the additional information about page, section, and equation numbers will be supplied by the .aux files that are read in in place of the .tex files so that the selective processing takes place with the correct values of these counters. Cross-reference information from the other files is also available so that the \ref and \pageref commands (Section 9.2.1) yield the correct results. All these values will have been determined during a previous processing of the entire document. If the changes in the file that is being selectively processed lead to an increase or reduction in the number of pages, the following files will also have to be reprocessed to correct their page numbers. The same is true if sections are added or removed, or if the number of equations, footnotes, figures, etc. is altered. For example, suppose file 3 ends on page 17, but after the selective processing it now extends to page 22. The following file 4 still begins on page 18, and all further files also have their original starting page numbers. If file 4 is now selectively processed, it will receive the correct number for its first page, 23, based on the stored information in the revised file 3. So far so good. However, if instead file 6 were to be selectively processed right after file 3, it would receive its starting page number from file 5, which has not yet been corrected and would be in error by 5. The same 210 Chapter 9. Document Management applies to all other structure counters. Their correct values can only be guaranteed when the files have been reprocessed in their proper order. In spite of these restrictions, the \include command is extremely useful for large documents, saving considerable computation time. Longer documents are normally written and edited in many stages. The \include command permits one to reprocess selective alterations in a short time, even if the numbering systems temporarily go awry. This can be repaired later on with a complete reprocessing of the entire document, by deactivating the \includeonly command in the preamble. A file that is read in with \include may not contain any \newcounter declarations. This is not much of a restriction, since they should normally be given in the preamble. For example, each chapter of a book might be written to a separate file with names chap1.tex, chap2.tex, . . . . The processing file itself contains the text \documentclass{book} . . . . . . . . . . . . . . . . \includeonly{...} \begin{document} \frontmatter \include{toc} \mainmatter \include{chap1} \include{chap2} . . . \backmatter \include{back} \end{document} where the file toc.tex contains only commands for the title page, table of contents, and other listings: \begin{titlepage} ... \end{titlepage} \tableofcontents \listoftables \listoffigures and back.tex those for bibliography and index: \bibliography{..} \printindex The chapters to be processed are selected by adding them to the argument of \includeonly, not by changing the \include commands, which must always be present to ensure that all the .aux are input every time. For example, by giving \includeonly{toc,chap3} one processes the table of contents and chapter 3. 9.1. Processing parts of a document 9.1.3 211 Monitor input and output There are times when it is desirable that LATEX write a message to the computer monitor during processing. This can be achieved with the command \typeout{message} where message stands for the text that is to appear on the monitor. This text is printed when the LATEX processing reaches this command. It is also written to the transcript file, but does not appear in the processed output. If message contains a user-defined command, it will be interpreted and its translation appears on the monitor. The same thing applies to LATEX commands. This could have dire consequences if the commands, either user or LATEX, are not really printable. To print the command name literally, precede it with the command \protect. The command \typein[\com name]{message} also writes the message text to the monitor, but then it waits for the user to enter a line of text from the keyboard, terminated by typing the hreturni key. If the optional argument \com name is missing, the line of text is inserted directly into the processing. In this way, one could, for example, reuse the same text for a letter for several addressees, entering the name each time from the keyboard. Suppose the text contains Dear \typein{Name:}\\ ... then what appears on the monitor is: At this point, one enters the name of the recipient. If on successive processings Name: ‘George’, ‘Fred’, and ‘Mary’ are entered, the result will be a set of identical letters differing only in their salutations as ‘Dear \@typein= George’, ‘Dear Fred’, and ‘Dear Mary’. If the \typein command contains the optional argument \com name, this is treated the same as \typeout{message} \newcommand{\com name}{entered definition} In this case the definition is stored under the command name \com name interactively and may be invoked and executed in the rest of the document like any other LATEX command. With some experience in LATEX methodology, it soon becomes obvious that interactive processing with the \typein command can be very practical. For example, if the preamble contains \typein[\files]{Which files?} \includeonly{\files} 212 Chapter 9. Document Management the following appears on the monitor: Now LATEX waits for the user to type in the names of one or more files (separated by commas) to be processed. This avoids having to modify the main processing file with an editor every time. Which files? \files= A similar procedure may be employed when a form letter is to be sent to various recipients. One can enter the name and address and even the salutation interactively. Complete forms may be processed by LATEX in this way, with the entries being made from the keyboard. Warning: The \typein command may not be used as the argument of another LATEX command! It may, however, be given in environments such as minipage. Exercise 9.2: Change the main file from Exercise 9.1 so that the files exer1.tex, exer2.tex, and exer3.tex may be read in with the \include command. Arrange that you can determine interactively which of the files is to be processed. Exercise 9.3: Generate output of the form Certificate Olympic Spring Games Walterville 1992 Finger Wrestling Gold Silver Bronze A. T. Glitter S. Lining H. D. Tarnish AUR ARG CUP 7999.9 7777.7 7250.0 Points Points Points so that the following enquiries appear on the monitor one after the other Message Command= Input Sport: Unit: Gold: Country: Value: Silver: . . . \@typein = \unit = \@typein = \@typein = \@typein = \@typein = . . . = Finger Wrestling Points A. T. Glitter AUR 7999.9 S. Lining . . . and the appropriate entries are made interactively. The third column contains the answers necessary to produce the above sample output. Repeat the program with different entries. Let your imagination run wild. 9.2. In-text references 9.2 213 In-text references In a longer text, one often wants to refer to other chapters, sections, tables, and figures, or to pages where some other description has been given. One also needs an index of certain keywords that occur throughout the document. In the days before electronic text processing, such crossreferences and indices meant an enormous amount of extra work for the author or secretary. Today the computer can alleviate much of this burden. In the old days, referring to earlier parts of the text by page number was tedious but feasible. Referencing future parts that had not yet been written had to be limited to section numbers since the page numbers were not yet known, or space had to be left for the page number to be entered at a later date. The production of a book is usually a progressive and constantly shifting process. The manuscript may not necessarily be written in the order in which it is to appear, and even once the initial draft version is finished, there will be major changes due to new considerations by the author or to knowledgeable advice from reviewers. Revisions, deletions, and insertions of entire sections or even chapters are commonplace, not to mention possible reordering of parts of the text. LATEX relegates all the problems associated with such major alterations to the past. No matter what changes the author makes, the information necessary for the cross-references and keyword index is stored for use at any point in the text. 9.2.1 Cross-references As already pointed out in several places, the command \label{marker} is used to store the current value of the relevant counter (section, equation, etc.) at that point in the text, which may then be referred to at other places. The value is assigned to the key marker, which may be any combination of letters, numbers, and characters, even those that are normally special symbols. The page number on which the \label command was issued can be printed with \pageref{marker} at any point earlier or later in the document. If the \label command is given after a sectioning command, or within an equation, eqnarray, or enumerate environment, or inside the argument of a \caption within the figure or table environments, the command 214 Chapter 9. Document Management \ref{marker} prints the number of that section, equation, figure, table, or enumeration that was current when marker was defined, and in the correct format. For enumerate, the same number is printed as is generated by the \item command where the \label appeared. Reference may also be made to theorem-like structures created by a \newtheorem command if the \label is given within the text of that theorem command. For example, a \label with marker text bo-wei was issued in the text of the Bolzano– Weierstrass theorem on page 80: \begin{theorem}[Balzano--Weierstrass] \label{bo-wei}...\end{theorem} so that the input text Theorem˜\ref{bo-wei} on page˜\pageref{bo-wei} generates the output ‘Theorem 1 on page 80’. Similarly, the input text for Table˜\ref{budget04} on page˜\pageref{budget04}, see also Section˜\ref{sec:figref} produces ‘for Table 7.1 on page 174, see also Section 7.6’, since that section contains the marker \label{sec:figref}. Note that the counter whose value is stored by the \label command depends on the context in which the command is given. This is normally fairly self-evident. Within regular text, it will be the counter and its value for the last issued sectioning command, which might not be immediately visible. Therefore, when reference to a section number is desired, it is best to place the \label command immediately after the appropriate sectioning command, or even within its argument, as part of the title text. This is in fact the recommended method. Put the \label command within the body of the text only when you want to refer to the page number at that point. A list of all label markers, their translations, and page numbers may be produced by processing the file lablst.tex, provided with the LATEX installation. 9.2.2 ! How cross-referencing works It is useful to know how the cross-referencing information is managed. What the \label command actually does is to write the key name together with the current value of the appropriate counter(s) and the current page number to an auxiliary file with the root name of the document file plus the extension.aux. The \ref and \pageref commands obtain their information from this .aux file, which is read in at the beginning of the next processing by the \begin{document} command. The same situation as for the table of contents (Section 3.4.2) also applies here: on the first run, the.aux file does not exist so that no cross-reference information 9.2. In-text references 215 can be output; instead the information is gathered and written to a new.aux file at the end of the run. A warning message is printed at the end if the auxiliary information has changed and a new run is necessary. If selective processing is being done with \includeonly and a set of \include commands, then an.aux file exists for each included files, as well as for the main source file. These .aux files are read in on every processing run, whether or not the corresponding .tex file is input. In this way, counter and cross-referencing information for the entire document is maintained even when only parts of it are processed. 9.2.3 Referencing parts of other documents Package: xr It is possible to refer to the marker keys in another LATEX document by means of David Carlisle’s xr package, which is part of the tools collection (Section B.5.4). With \externaldocument{filename} all the keys in the specified file become available in the current document, to be printed with \ref{key} as usual. Difficulties arise if there are duplicate key names in any of the external or current files. To circumvent this problem, an optional argument can be given, for example as \externaldocument[x-]{filename}, in which case all the markers in the external file will be prefixed with x-. Thus the external key intro is referred to with \ref{x-intro}. 9.2.4 Smart referencing: the varioref package Package: varioref When the object being referenced is so close that you know it will be on the same or adjacent page, you very likely will want to alter the text accordingly. However, it might later switch from ‘same’ to ‘adjacent’ after another revision and you will have to change that text once more. The tools package varioref by Frank Mittelbach does this for you. It defines a command \vref{key} which is almost the same as ‘\ref{key} on page \pageref{key}.’ However, if \label{key} is on the current, previous, or next page, it prints appropriate text. Thus depending on the relative locations, Fig. \vref{f1} automatically produces one of Fig. Fig. Fig. Fig. Fig. 5 5 5 5 5 on on on on the preceding page the next page the facing page page 24 when \label on same page, on previous page, on following page, on opposite page with twoside option, when two or more pages away. The command \vpageref prints only the page part of the text, or ‘on this page’ if \label{key} is on the current page. It may also take one or two optional arguments: the texts for the current page and non-current pages. For example, the example \vpageref[above]{f1} prints one of 216 Chapter 9. Document Management the example above the example on the previous page the example on page 24 when \label on same page, on following page, when two of more pages away, while the \vpageref[above example][example]{f1} outputs one of: the above example the example on the next page the example on page 24 when \label on same page, on the following page, when two of more pages away. A range of numbers and pages can be produced with the command \vrefrange, which takes two mandatory arguments, both label keys. It prints text like ‘5 to 7 on pages 212–214’, or ‘5 to 7 on the next page’, and so on. It takes one optional argument, the text to print when both labels are on the current page. The page part of \vrefrange only is printed with \vpagerefrange, which also takes two mandatory (label key) arguments and one optional (text) one. If both labels are on the same page, it behaves like \vpageref; the optional argument is printed if both are on the current page. Since English text is automatically printed by the above commands, they would not be very useful for documents, say, in Italian. The varioref package therefore accepts all the language options recognized by the babel system (Chapter 11) to reprogram the texts. With the option italian, one will get texts like in questa pagina for ‘on this page’ and nella pagina precedente for ‘on the preceding page’, and so on. All the texts are stored in special commands which can be redefined by the user: \reftextbefore \reftextfacebefore \reftextafter \reftextfaceafter \reftextfaraway{key} \reftextpagerange{key1}{key2} \reftextlabelrange{key1}{key2} previous but non-facing page previous but facing page next but non-facing page next but facing page more than one page away page range of 2 labels range of 2 different labels. The last three must be redefined with 1 or 2 arguments, as \renewcommand{\reftextfaraway}[1]{on page \pageref{#1}} \renewcommand{\reftextpagerange}[2]{on pages \pageref{#1}% --\pageref{#2}} \renewcommand{\reftextlabelrange}[2]{\ref{#1} to \ref{#2}} There is also \vreftextvario{text1}{text2} to provide altering texts for the above commands, so that the same text is not printed every time. 9.3 Bibliographies Academic publications normally include a list of references, or bibliography, containing the names of other works that are cited within the text 9.3. Bibliographies 217 by means of a running number. This is the system supported by standard LATEX, described in the next section. The alternative citation method, with author name and year of publication, can be achieved with various extension packages, as described in Section 9.3.4). Often the bibliography has not been finalized before the main text is started. Especially for numerical bibliographies, it would be a great nuisance to have to go through the whole text and change all the numbering every time something was added to the bibliography. Therefore LATEX is programmed not only to format the bibliography but also to keep track of its alterations and additions in order to modify the references in the text automatically. The bibliography is generated most conveniently and efficiently from a general database with the help of the BIBTEX program that should be part of the LATEX installation. How to prepare such databases is explained in Chapter 14. The advantages of a database is that its entries can be reused again and again for all future documents, while the formatting style in each bibliography listing can vary according to the requirements of each document. One can, however, write it by hand without BIBTEX. 9.3.1 Bibliography by hand The actual bibliography, whether created by BIBTEX or by hand, is placed inside the environment \begin{thebibliography}{sample label} entries \end{thebibliography} The individual entries in the bibliography each begin with the command \bibitem[label]{key} entry text Without the optional argument label, \bibitem produces a running number in square brackets as the label for the reference in the text. With label, one can give whatever indicator one wishes, such as an abbreviation of the author’s name, or an arbitrary reference number. The mandatory argument key is a reference key, much like that for the cross-referencing \label command (page 213), which is used to make the actual citation in the main text. The key name can be made up of any combination of letters, numbers, and symbols except commas. The bibliography information itself is contained in entry text, such as ‘author, title, publisher, year, edition, page numbers’, possibly in various typefaces. The output text will be indented after the first line by a width equal to that of the sample label, so this should be as large as the longest label in the bibliography. For the standard application with running numbers, sample label should be a dummy number with as many digits 218 Chapter 9. Document Management as the largest label (for example 99 if there are more than 10 but less than 100 entries). For bibliographies with author–year citations (Section 9.3.4) the entries in the thebibliography are the same, except that the optional label must be present, taking a special form that will transfer the author and year texts to the citation commands. A sample (numerical) thebibliography environment could look as follows: \begin{thebibliography}{99} \bibitem{lamport} Leslie Lamport. \textsl{\LaTeX\ -- A Document Preparation System}, 2nd edition. Addison-Wesley, Reading, MA, 1994 . . . . . . . . . \bibitem{knuth} Donald E. Knuth. \textsl{Computers and Typesetting Vol.\ A--E}. Addison-Wesley, Reading, MA, 1986 \bibitem[6a]{knuth:a} Vol A: \textsl{The {\TeX}book}, 1986 . . . . . . . . . \bibitem[6e]{knuth:e} Vol E: \textsl{Computer Modern Typefaces}, 1986 \end{thebibliography} Here lamport, knuth, and knuth:a have been chosen as keys. The sample label is given as 99 since a two-digit number produces sufficient indentation for the standard form of \bibitem. The entry with the key knuth is the sixth in the list and thus it automatically receives the label [6]; in order for its sub-entries knuth:a . . . knuth:e to be printed as [6a] . . . [6e], it is necessary to set their optional label arguments to 6a . . . 6e. (Yes, this does violate the automatic labeling system.) The bibliography is normally printed near the end of the document by placing the thebibliography environment at the desired location. For document classes book and report, the word Bibliography appears as an unnumbered chapter title at the beginning, whereas for article the word References is written as an unnumbered section heading. The above sample bibliography appears as: [1] Leslie Lamport. LATEX – A Document Preparation System, 2nd edition. Addison-Wesley Co., Inc., Reading, MA, 1994 . . . . . . . . . [6] Donald E. Knuth. Computers and Typesetting Vol. A–E. Addison-Wesley Co., Inc., Reading, MA, 1986 [6a] Vol A: The TEXbook, 1986 . . . . . . . . . [6e] Vol E: Computer Modern Typefaces, 1986 Exercise 9.4: Produce a bibliography with the thebibliography environment, with a label consisting of the first three letters of the author’s name followed 9.3. Bibliographies 219 by the last digits of the year of publication. If the same author has more than one work in a given year, add a running letter to distinguish them, for example knu86c, knu86d. With such labels, it is appropriate to make the reference keys the same as the labels. The indentation depth should be 1.5 cm. Note: The indentation depth is determined by the argument sample label in the thebibliography environment. This is usually a dummy text with the right width. This width can be given precisely with \hspace{width}. Exercise 9.5: Copy the thebibliography environment from the above exercise to the end of your standard exercise file (but ahead of the \end{document} command). Refer to the entries in the bibliography by inserting \cite commands into your text. Make sure that the key in the \cite command is written exactly as in the \bibitem command in the thebibliography environment. 9.3.2 Bibliography with BIBTEX Bibliographic databases and the BIBTEX program are fully described in Chapter 14. Here we just review the essential aspects for the LATEX source file. • All the information for the literature references is placed in one or more databases. Each entry is given an identifying key (the key in the \bibitem argument) which is the handle to refer to it. • In the source text, citations to the references are made with various commands like \cite, \citet, \citep, taking the key as argument. • The bibliography style must be specified somewhere in the document with \bibliographystyle{bib style}; the bib style determines how the bibliography is to be formatted; the basic style is plain for numerical citations, or plainnat with the natbib package. • Give the command \bibliography{database} where the bibliography is to appear; database is a list of all databases to be searched. • Process the source file with LATEX; run BIBTEX and then LATEX twice. BIBTEX writes a bibliography following the formatting specifications of bib style into a thebibliography environment, storing it in a file with extension.bbl; this file is input by the \bibliography command. 9.3.3 Numerical citations Standard LATEX can only handle numerical bibliographies and citations. In this case, the citation in the text is made with the command \cite[extra]{key} 220 Chapter 9. Document Management where key is the reference key that appears in the \bibitem command. With the sample bibliography on page 218, the source text For additional information about \LaTeX\ and \TeX\ see \cite{lamport} and \cite{knuth,knuth:a}. yields: For additional information about LATEX and TEX see [1] and [6, 6a]. If the optional argument extra is included in the \cite command, this text is added after the label(s) but still inside the square brackets. The creation of a bibliographic database is described in \cite[Appendix B]{lamport}, while the program \BibTeX\ itself is explained in \cite[pages 74, 75]{lamport}. The creation of a bibliographic database is described in [1, Appendix B], while the program BIBTEX itself is explained in [1, pages 74, 75]. 9.3.4 Author–year bibliographies with natbib An alternative bibliographic citation style, used in this book and in many scientific journals, makes reference to other published works by citing the author’s name and year of publication. In this case, the entries in the bibliographic listing are not numbered. The citation itself may be either parenthetical [Jones et al., 1999] or textual, as shown by Jones et al. [1999]. There may be some variations within this style: for example, in this book parentheses are used in place of square brackets and the name is left in normal type. None of this is supported by standard LATEX, but rather by additional packages. There are a number of packages developed to deal with this situation, each requiring a different syntax for the optional label argument in the \bibitem command in order to transfer the author and year information to the citation commands. And each has its own bibliography style (.bst) file to allow BIBTEX to accomplish this. Package: The natbib package by Patrick W. Daly is the most universal of these, natbib being compatible with the \bibitem syntaxes, and thus with the.bst files, of other author–year packages such as apalike, chicago, and harvard, to name just a few. Furthermore, natbib can even produce numerical or superscript citations as well, and will also function with the standard (numerical) bibliography styles and \bibitem syntax, albeit only with numerical citations. Furthermore, natbib is integrated with the hyperref package (Section 10.2.4) to make citations into automatic links to the bibliographic entry. The author–year \bibitem The required natbib form of the ‘optional’ label argument to \bibitem within the thebibliography environment is 9.3. Bibliographies 221 \bibitem [short(year)long] {key} . . . where short is the short author list (e.g. Jones et al.) and long is an optional full author list. A sample bibliography might be: \begin{thebibliography}{99} \bibitem[James et al.(2001)James, Jones, and Smith]{JAM01} P. R. James, F. J. Jones, and R. T. Smith, ... 2001. \bibitem[Jones et al.(1999)Jones, Baker, and Toms]{JON99} F. J. Jones, H. P. Baker, and W. V. Toms, ... 1999. \bibitem[Jones et al.(2000a)Jones, Toms, and Baker]{JON00} F. J. Jones, W. V. Toms, and H. P. Baker, ... 2000a. \bibitem[Jones et al.(2000b)Jones, Toms, and Baker]{JON00b} F. J. Jones, W. V. Toms, and H. P. Baker, ... 2000b \end{thebibliography} Such bibliographies will be automatically produced by BIBTEX when a bibliography style is invoked with the \bibliographystyle command that is compatible with natbib. Three such .bst files are provided with natbib, as substitutes for 3 of the 4 basic BIBTEX styles: plainnat, unsrtnat, and abbrvnat (Section 14.1). However, many others also exist as contributions for specific publishers and journals. Author–year citations There is a flexible citation syntax permitting parenthetical (\citep) and textual (\citet) citations, with the abbreviated or full author list, with optional notes both before and after the citations. For example, \citet{JON99} \citet[pg.˜22]{JON99} ⇒ ⇒ Jones et al., (1999) Jones et al., (1999, pg. 22) \citep{JON99} \citep[pg.˜22]{JON99} \citep[e.g.][]{JON99} \citep[e.g.][pg.˜22]{JON99} ⇒ ⇒ ⇒ ⇒ (Jones et al., 1999) (Jones et al., 1999, pg. 22) (e.g. Jones et al., 1999) (e.g. Jones et al., 1999, pg. 22) \citet*{JON99} \citep*{JON00} ⇒ ⇒ Jones, Baker, and Toms (1999) (Jones, Toms, and Baker, 2000) The citation punctuation (type of brackets, points between multiple citations, dates, and so on) can be selected by options when loaded, specified by declarations, or programmed to be associated with the bibliography style. See below. Multiple citations are available as usual, with compression of repeated authors: \citet{JON99,JAM01} \citep{JON99,JAM01} \citep{JON99,JON00} \citep{JON00,JON00b} ⇒ ⇒ ⇒ ⇒ Jones et al. (1999); James et al. (2001) (Jones et al., 1999; James et al., 2001) (Jones et al., 1999, 2000a) (Jones et al., 2000a,b) 222 Chapter 9. Document Management In numerical citation mode, the command \citep behaves like the standard \cite command, printing the reference’s number in brackets, while \citet gives the authors’ names followed by the reference’s number. This is textual citation in numerical mode, allowing the author to use the same syntax for both citation modes. \citet{JON99} \citet[pg.˜22]{JON99} ⇒ ⇒ Jones et al. [21] Jones et al. [21, pg. 22] \citep{JON99} \citep[pg.˜22]{JON99} \citep[e.g.][]{JON99} \citep[e.g.][pg.˜22]{JON99} ⇒ ⇒ ⇒ ⇒ [21] [21, pg. 22] [e.g. 21] [e.g. 21, pg. 22] \citep{JON00,JON00b} ⇒ [21, 32] The commands \citeauthor{key} and \citeyear{key} print just the author names and year, respectively; a starred version \citeauthor prints the full author list. There also exist capitalized variants of these citation commands, \Citet, etc., for use at the beginning of a sentence, when the first author name begins with something like ‘von’. \citet{delaM89} has shown ... ⇒ \Citet{delaM89} has shown ... ⇒ de la Mar has shown . . . De la Mar has shown . . . Package options Many aspects of formatting the citations can be controlled by options specified when loading natbib with the \usepackage command: round citations in round parentheses (default); square citations in square brackets; curly citations in curly braces; angle citations in angle brackets; colon to separate multiple citations with semicolons (default); comma to use commas as separators; authoryear for author–year citations (default); numbers for numerical citations; super for superscripted numerical citations; 9.3. Bibliographies 223 sectionbib puts the bibliography in a section instead a chapter; for use with the chapterbib package (Section 9.3.5); sort orders multiple citations into the sequence in which they appear in the list of references; sort&compress as sort but in addition multiple numerical citations are compressed if possible (as 3–6, 15); longnamesfirst makes the first citation of any reference the equivalent of the starred variant (full author list) and subsequent citations normal (abbreviated list). Note: natbib defaults to author–year citations, but if any single \bibitem command does not conform to any of the recognized author–year syntaxes, it will switch automatically to numerical citations. Further customizations There are several formatting commands in natbib that may be (re)defined by the author to achieve special effects in the bibliography, such as font or spacing between entries. In standard LATEX, these are all fixed. \bibsection can be redefined to the desired sectioning command for introducing the list of references. This is normally \section* or \chapter*. \bibpreamble is printed after the bibliography heading but before the actual list of references; is normally undefined, but can be defined to insert any desired leading text. \bibfont can be a font declaration, e.g. \small to apply to the whole list of references; is normally undefined. \citenumfont can be a font declaration or command like \itshape or \textit for formatting numerical citations; normally undefined. \bibnumfmt is a command with an argument to format the numbers in the list of references; the default definition is [#1]. 224 Chapter 9. Document Management \bibhang is the indentation after the first line of each reference; change this with the \setlength command. \bibsep is the vertical spacing between references; change this with the \setlength command. There are many other customization possibilities and specialized features to natbib which can be found in the supplied documentation (process natbib.dtx if it not already provided as a.dvi or.pdf file) or in the short summary natnotes.tex. 9.3.5 Multiple bibliographies Package: chapterbib In standard LATEX, with or without BIBTEX, there can only be one bibliography per document. However, it is not uncommon for a book to consist of independent chapters, each with its own bibliography and local citations. The chapterbib package by Donald Arseneau solves this problem. It requires that the document be broken up into individual source files that are read into the main file with the \include command of Section 9.1.2. Each such file must contain its own thebibliography environment, or its own \bibliographystyle and \bibliography commands if BIBTEX is to be used. The citation commands will work locally within each file. Even if the same reference appears in several bibliographies, with a different number each time, the citations will refer to the one in the local file. One must process BIBTEX individually on each of the separate files, creating a series of.bbl files. Then the document is reprocessed with LATEX, at least twice; the.bbl files are read in by the individual \bibliography commands. If you cannot make use of the \include commands because you do not want each file to begin on a new page, you can still localize the bibliographies and their citations with the cbunit environment. This does not work with BIBTEX, however. In that case, you must still put the bibliographic units into separate files, and then read them in with the \cbinput{file} command. Set the package option draft when loading chapterbib, process with LATEX, process each file with BIBTEX, remove the draft option, process with LATEX at least twice. With classes book and report, the bibliography is placed in an unnumbered chapter; this is undesirable if each chapter is to have its own bibliography. In this case, add the package option sectionbib to change the bibliography to an unnumbered section instead. The chapterbib package is compatible with natbib except for the sectionbib option. The two packages clash on their redefinitions of bibliography. In this case, add the option to natbib instead of to chapterbib. 9.4. Keyword index 9.4 225 Keyword index LATEX itself does not produce a keyword index automatically as it does a table of contents, but it can prepare input data for the MakeIndex program (Section 9.4.3) that does generate such an index, in a form that LATEX can use on a later run. 9.4.1 The index environment A keyword index is formatted in the environment \begin{theindex} index entries \end{theindex} which switches to a two-column page format with a running head INDEX. The first page of the index carries the heading Index in the same size as a chapter heading for the book and report document classes, and as a section heading for the article class. (More precisely, the actual word printed is contained in the command \indexname which may be redefined for other languages.) The individual entries are made with commands \item \subitem \subsubitem and \indexspace followed by the keywords and their page numbers. For example, commands, 18 arguments, 19, 101 multiple, 103, 104 replacement symbol, 20 as environments, 42 used as arguments for sectioning commands, 41, 42 displayed text, 21–32 \item commands, 18 \subitem arguments, 19, 101 \subsubitem multiple, 103, 104 \subsubitem replacement symbol, 20 \subitem as environments, 42 \subitem used as arguments for sectioning commands, 41, 42 \indexspace \item displayed text, 21--32 If the text entry is too long for one line, it is broken and continued on the next line, indented deeper than all other lines, as in the above example ‘used as argument for sectioning commands, 41, 42’. The command \indexspace leaves a blank line in the index. 9.4.2 Preparing the index entries The theindex environment only sets up a suitable format for the index. The entries themselves, as well as their page numbers, are generated by the MakeIndex program described in Section 9.4.3. This program requires input information from the LATEX file in the form of unsorted keywords and page numbers. The author enters this information in the text file with the command \index{index entry} 226 Chapter 9. Document Management where index entry is the text to be entered into the index. It may contain any combination of letters, numbers, and symbols including even command characters and blanks. This means that even commands may be included in the index entry, such as \index{\LaTeX\ logo}. Even the one command that may otherwise never be used as an argument, \verb, may be included. However, if index entry does contain a command, \index may not be used as an argument of another command. Normally all the \index commands are ignored by LATEX and do absolutely nothing. They are activated only when the preamble contains the command \makeindex in which case, a file with the document’s root name plus the extension .idx is opened. Now the \index commands write index entry and the current page number to this file in the form \indexentry{index entry}{pagenumber} It is this .idx file that is the input to the MakeIndex program. There are special symbols that may be used in the index entry to indicate main and subitems and other refinements. The MakeIndex program expects the \index entries to be of one of the three forms: \index{main entry} \index{main entry!sub entry} \index{main entry!sub entry!sub sub entry} The individual main and sub-entries may contain any combination of characters with the exceptions of !, @, and |. The exclamation point is the divider between the various entry fields. If the \index command contains only a main entry, this will become the text for an \item command. The main entries will be in alphabetical order. If the \index command contains a main and a sub-entry, the text sub entry will be assigned to a \subitem command underneath the corresponding main entry. The texts for the \subitem will also be in alphabetical order. Similarly the text of a sub sub entry will appear following a \subsubitem command, alphabetically ordered, below the appropriate sub entry text. The main and sub-entries may also contain special characters and even LATEX commands that are to be neglected during alphabetization. This is indicated by an entry of the form lex entry@print entry, in which lex entry is used for the alphabetical ordering while print entry is the actual text to be output. For example, in the keyword index in this book, which was generated with MakeIndex, all the command names appear as input text and are ordered without the preceding \ character. These entries were made in the text as \index{put@\verb=\put=}. 9.4. Keyword index 227 An entry may be terminated with the character sequences |( or |) to designate the beginning and end of a range of page numbers. For example, \index{table|(} \index{table|)} on page 95 on page 110 produces the entry ‘table’ with page numbers given as 95–110. Instead of having the page number printed after the entry, a reference may be made to another index entry. For example, with \index{space|see{blank}} \index{table|seealso{array}} the entries ‘space, see blank’ and ‘table, see also array’ are made in the index. The three characters !, @, and | therefore have special functions for the MakeIndex program. In order to print these characters literally as text without their functions, the quote character " must precede them. For example, "! represents a literal exclamation point and not the entry divider. The quote character itself is thus a fourth special symbol and must be entered literally as "". However, there is a special rule in MakeIndex syntax that says a quote character preceded by a backslash will be interpreted as part of a command: thus \" may be used to put a German umlaut in an entry (as in \index{Knappen, J\"org}). This special rule can lead to additional problems at times: in this book the index entry \! had to be typed as "\"!. It is possible to specify varying fonts for the page number. For example, in the index of this book, page numbers are set in bold face to indicate the page where a command is defined or first explained. This is achieved with an entry of the form \index{blank} \index{blank|textbf} on page 11, and on page 22 which in the second case puts the page number for this entry as the argument of a command \textbf. The line in the theindex environment becomes \item blank, 11, \textbf{22} Note: The vertical bar in the \index entry is not a typing error, but must replace the backslash as the LATEX command symbol under these circumstances. ! There is a file idx.tex in the LATEX installation, which can improve the readability of the .idx files. By processing the idx.tex file (that is, calling latex idx), the user is prompted for the name of the.idx file to list: 228 Chapter 9. Document Management ******************************** After the root name of the.idx file has * Enter idx file’s first Name. * been entered from the keyboard, a two******************************** column page format is output containing the index entry texts listed under \filename= page headings of the form Page n. No further information is obtained through such a formatted listing, but it is far easier to work with than a straightforward output of the.idx file alone. Even if the \index commands have no effect without the \makeindex command in the preamble, it is a good idea to include them in the text from the initial development of the document. The \makeindex command can be included later when the final version of the document is ready. At this point, the MakeIndex program can be run to produce the theindex environment from the data in the .idx file just as BIBTEX produces thebibliography environments. This tool is described in the next section. Package: showidx The LATEX installation also contains the package showidx, which prints the index entries from the \index commands as marginal notes, beginning at the top of the page on which they occur. This is useful for going through a preliminary version of the document to check that all index entries are really on the proper page or whether additional entries have to be made. If showidx is used, it is a good idea to increase the width of the marginal note box with the declaration \marginparwidth (Section 4.10.6) in the preamble. Unfortunately, the present book format is not suitable for such a demonstration. 9.4.3 Running MakeIndex The tiresome drudgery of making up the theindex environment for a keyword index can be dispensed with if the program MakeIndex is available. This program was written by Pehong Chen with the support of Leslie Lamport. We will give only an abbreviated description of its use here. More details are in the documentation accompanying the program package. The program MakeIndex processes the .idx file, producing as output another file with the root name of the document and the extension .ind, containing the complete theindex environment. It is run by clicking the appropriate icon in the editor shell, or from a command line with makeindex root name.idx Package: makeidx or simply makeindex root name A subsequent LATEX processing outputs the index at the location of the \printindex command which, together with the \see command, is defined in the package makeidx. Thus the production of an index in this way requires the package file makeidx to be loaded with the \usepackage command. The alphabetical ordering of MakeIndex normally follows the standard ascii code, first symbols, then digits, and finally letters, where upper case comes before lower case. Blanks are included as symbols. There are a 9.4. Keyword index 229 number of options that allow these rules to be changed. How the options are invoked when the program is called depends on the computer type, but we assume here a hyphen preceding the option letter, as in makeindex -g -l root name The most important options are: -l Letter ordering: blanks are ignored when sorting; -c Compress blanks: multiple and leading blanks are removed as they are in normal LATEX; -g German ordering: following the German rules in which symbols precede letters (lower before upper case) which precede numbers; the sequences "a, "o, "u, and "s (the codes for ä, ö, ü, and ß in the usual LATEX adaptations for German) are treated as though they were ae, oe, ue, and ss, which is standard German practice; -s Style specification: allows the name of an index formatting file to be included to redefine the functioning of MakeIndex. The -s option reads in an index style file containing commands to define both the input and output of the MakeIndex program. For example, it is possible to change the special symbols !, @, |, and " so that different characters execute their functions and they themselves revert to being pure text. The style-defining file consists of a list of pairs in the form keyword attribute. The attribute is either one character in single quotes (for example, ’z’), or a character string in double quotes (for example, "a string"). The most important keywords, together with their default definitions, are: quote ’"’ defines the quote symbol; level ’!’ defines the entry separation symbol; actual ’@’ defines the lexical switch symbol; encap ’|’ defines the dummy command symbol for page formatting. There are many more keywords for defining complicated output structures. These are described in the documentation that should be included with the MakeIndex program package. The file makeindex.tex contains a short manual by Leslie Lamport (but without mentioning style definitions). 230 Chapter 9. Document Management 9.4.4 Glossary A ‘glossary’ is a special index of terms and phrases alphabetically ordered together with their explanations. To help set up a glossary, LATEX offers the commands \makeglossary in the preamble and \glossary{glossary entry} in the text part which function just like the commands for making up a keyword index. The entries are written to a file with extension .glo after the command \makeglossary has been given in the preamble. The form of these file entries from each \glossary command is \glossaryentry{glossary entry}{pagenumber} The information the .glo file can be used to establish a glossary. However, there is no equivalent to the theindex environment for a glossary, but a recommended structure is the description environment (Section 4.3.3) or a special list environment (Section 4.4). PostScript and PDF 10 PostScript is a printing and plotting language developed by the Adobe Systems Inc. Unlike the printing instructions for other types of printers, the PostScript code may be written to an ascii file, viewed on a computer monitor, put online, downloaded, included in emails. It therefore represents a type of electronic paper. It is also a programming language, and thus offers enormous possibilities for including special effects that cannot easily be inserted with other output formats. Several packages exist to exploit these, packages which are then limited to PostScript output. However, the PostScript advantages are so attractive that this can be justified. Portable Document Format, PDF, is another Adobe product, a successor to PostScript, inheriting many of it properties. However, PDF includes many features to make it applicable to true electronic documents: internal and external links, bookmarks, animation, encryption, etc., features that have no correspondence in paper. It represents a revolutionary new type of information medium. PostScript has played a very important role in the development of LATEX, setting the standards for graphics inclusion, and offering additional font families over the standard Computer Modern set. Now PDF carries on that tradition. With the pdfTEX program, PDF is actually married to TEX and thus to LATEX. In the next sections we describe the generation of PostScript output with LATEX, the usage of PostScript (type 1) fonts, and then the production of PDF output with all its bells and whistles. 10.1 LATEX and PostScript PostScript output is best produced with the dvips driver program written by Tomas Rokicki, available with most TEX installations. It is this very powerful and flexible program that has set the standard for DVI conversion programs. 231 232 Chapter 10. PostScript and PDF Its two most significant features are the inclusion of graphics as encapsulated PostScript images, as described in Chapter 6, and the capability of making use of PostScript fonts in place of the Computer Modern ones (Section G.5). There are also enhanced drawing capabilities, as demonstrated in Sections 13.2.2 and 13.3.2. 10.1.1 The dvips driver The dvips driver program operates on the DVI result from TEX, with or without LATEX, to generate PostScript output, which may be written to a file or sent directly to a printer. One either clicks the appropriate icon in the editor shell, or issues the command from a command line prompt: dvips myfile to process myfile.dvi and generate myfile.ps. (The LATEX source text was of course in myfile.tex.) The PostScript file may be viewed with a PostScript viewer like GhostView or sent to a PostScript printer, or included in an email. There are many options that may be included in the command line, appearing between dvips and the file name. For example, to output five pages only starting at the 10th, sending them to a file named p5-15.ps, give dvips -p 10 -n 5 -o p5-15 myfile You may also specify the first (-p) and last (-l) page numbers, whether only odd (-A) or even (-B) pages are to be printed, or in reverse order (-r). The page numbers with -p and -l refer to the actual page numbers in the document, or rather to its first occurrence. Hence -p 8 might start with page viii rather than page 8. Specifying -p =8 will start with the 8th page, regardless of its actual number. The list of options can be printed to the monitor with dvips --help. One useful option is t landscape to rotate the output into landscape mode, which should be done if the document has been processed with the landscape option in \documentclass. However, dvips has another way of accomplishing this: add the driver-specific command \special{landscape} in the source text itself and dvips will automatically print in landscape mode. The output is written to a file with the same root name as the input, but with extension .ps, unless the option -o filename is given. To send the output directly to a printer, specify that printer as the output ‘file’, as -o \lpt1. Beware, if that printer is not a PostScript printer, it will simply output the PostScript code directly as text, something that normally uses a considerable amount of paper. 10.1. LATEX and PostScript 233 A full manual for dvips should be available as dvips.ps or dvips.pdf; otherwise the source file dvips.tex can be processed (with TEX, not LATEX!). The program is configured to the local installation by means of a file config.ps that should be located in texmf\dvips\config. This sets up certain parameters for the default printer, as well as various paper formats, indicating which is to be the default (European A4 or American letter). This can be overridden with -t a4 or -t letter. Another important configuration item is a list of font mapping files (Section 10.1.3), to associate TEX font names with actual PostScript fonts and their files. Additional configuration files are usually provided, for specific printers or other font mappings, all with the name config plus a different extension. They may be invoked on the command line with the option -P plus extension. For example, config.cx contains lines for a generic PostScript printer with resolution of 300 dpi; with -P cx, this file is input, overriding the default values in config.ps. Another example for adding PostScript fonts is given in Section 10.1.3. Of course, the dvips driver manages not only PostScript fonts but also the standard TEX pixel fonts generated by the METAFONT program (Section G.3). These bitmaps are stored in .pk files that need to be generated for the desired printer, size, and resolution. Originally, the user had to ensure that they were present before the driver program could address them. Fortunately, dvips has revolutionized this process by calling METAFONT itself if the needed.pk files are missing. However, it is the use of PostScript fonts that make dvips especially interesting. We describe in some detail how they are integrated into the TEX/LATEX system in the next sections since almost all of this applies equally well to PDF output. 10.1.2 Invoking PostScript fonts Under the New Font Selection Scheme of Appendix A, it is relatively simple to invoke the PostScript fonts, provided that the font definition .fd files are provided. These are normally to be found in the directory psnfss in the standard installations. It also contains packages for the 35 standard PostScript fonts, plus those for a number of other commercially available fonts. These packages are actually quite simple; for example, the times.sty file contains only four lines, which are listed on page 379. All these packages do is redefine the three font families, \rmdefault, \sfdefault, \ttdefault and the bold face default attribute \bfdefault. The packages for the 35 standard fonts, and the three assignments that they make, are listed in Table 10.1 on the next page. (The 35 fonts include italic and bold variants of these.) These packages are only meaningful when the resulting DVI output is to be transformed with dvips to PostScript or PDF files, or when the LATEX source is to be processed with pdfTEX to generate PDF directly. Other 234 Chapter 10. PostScript and PDF Table 10.1: The psnfss packages and their fonts Package \rmfamily \sffamily \ttfamily times.sty Times-Roman Helvetica Courier palatino.sty Palatino Helvetica Courier newcent.sty NewCenturySchlbk AvantGarde Courier bookman.sty Bookman AvantGarde Courier avant.sty AvantGarde helvet.sty Helvetica drivers can only handle the TEX pixel fonts described in Appendix G (also known as type 3 fonts). Some drivers, in particular the monitor previewers xdvi and windvi, will also invoke programs to generate the bitmap .pk files from the PostScript.pfb source files. Why bother to use these packages when dvips is capable of including the pixel fonts just as well? The answer is that the standard PostScript fonts are well known from other applications, and there are additional commercially available fonts in PostScript format; they therefore offer a wider choice than simply the traditional Computer Modern fonts that are limited to TEX and LATEX. Furthermore, although the pixel fonts can be included in PDF output, the results viewed on the monitor are simply atrocious. They are slow to draw and appear very fuzzy. (They do print all right, however.) PDF should make use of PostScript fonts exclusively. In Section G.6 we explain how the standard Computer Modern and Extended Modern fonts are now available in PostScript encoding, especially for this need. 10.1.3 Installing PostScript fonts ! The packages listed in the previous section invoke the PostScript fonts by means of the NFSS system, provided they have been properly included in the installation. This means that the following files must be present: .tfm the font metric files for both the virtual and raw fonts; .fd the NFSS font definition files associating the font attributes to precise virtual font names; these and the.tfm files are the only ones read by LATEX itself; .vf virtual font files that instruct the DVI driver how to produce the characters; usually this refers to characters in a real font with different encoding; .map mapping files that tell the dvips driver the true internal names of the real fonts, plus any re-encodings or distortions that must be undertaken. 10.1. LATEX and PostScript 235 The .map files are a feature of dvips that has been taken over by pdfTEX and other programs that make use of PostScript fonts. It translates the LATEX names for the fonts into the internal names used by PostScript itself. For example, the line ptmr8r Times-Roman "TeXBase1Encoding ReEncodeFont" <8r.enc says that the font known to LATEX as ptm8r is really the Times-Roman font. Furthermore, the text in quotes is also inserted into the PostScript output; in this case, it is a command to state that the symbol assignments (the encoding) should be that of the TeXBase1Encoding vector. The definition of this encoding vector is to be found in the file 8r.enc, which must also be inserted, since it is not part of basic PostScript. Note that type 1 fonts are essentially a collection of symbols identified by name, whereas application programs like LATEX address characters by positional number. It is the encoding vector that associates those numbers with symbol names for the benefit of the application. However, they are not intrinsic to the font itself. For fonts other than the 35 standard ones included in every PostScript output device, additional files must also be input. For example hlhr8r LucidaBright "TeXBase1Encoding ReEncodeFont" <8r.enc $ which produces < x >. Boxed formulas A formula may be placed in a box with the command \boxed{formula} For example, \[ \boxed{\int_0ˆ\infty f(x)\,\dif x \approx \sum_{i=1}ˆn w_i \meˆ{x_i} f(x_i)} \] produces Z∞ f (x) dx ≈ 0 n X wi exi f (xi ) i=1 12.2.6 Multiline equations Equations consisting of several lines which are horizontally aligned at set points, such as the equals sign, can be generated in standard LATEX with the eqnarray and eqnarray* environments (Section 5.4.7). Many authors consider these to be far too limited for publications with complicated multiline equations. AMS-LATEX therefore provides a range of further alignment environments for formulas extending over a single line: align gather falign multline alignat split 12.2. Standard features of AMS-LATEX 271 With the exception of split, all exist in a standard and a *-form. As for eqnarray, the standard form adds an automatic equation number to each line, while the *-form does not. The standard LATEX equation environment for single line formulas is also available in AMS-LATEX in a *-form. It may be used in combination with multiline environments. Common features of alignment environments All the alignment, or multiline, environments switch to math mode at the start and back to text mode at the end, except for split which must be called in math mode. A new line is forced in the formula with the \\ command, as usual; an optional argument \\[len] can be added to increase the line spacing by len, again as usual. The automatic numbering with the standard forms can be suppressed for single lines by adding \notag before the \\ line break. Alternatively, the line can be given a desired marker with \tag{mark}. For example, with \tag{$\dag$}, the marker is (†). Using the *-form instead, the marker text is printed without the parentheses. The vertical position of the equation number or marker can be adjusted with the command \raisetag{len} which moves the marker upwards by len for that line only. A negative value moves it downwards. The multline environment The multline environment is a variant of the equation environment for single formulas that are too long for one line. The line breaks occur where the user forces them with the \\ command. The first line is left justified, the last right justified, and lines in between are centered. However, if the option fleqn has been given, all the lines appear left justified. The equation number, if present, appears at the right of the last line by default or if the option reqno has been selected; if the option leqno has been chosen, the number is placed at the left of the first line. (See Section 12.2.8 for the amsmath options.) It is possible to shift individual lines fully to the left or right with the commands \shoveleft{formula} and \shoveright{formula}. The entire formula text for that line, except the terminating \\, is placed in their arguments. The left and right margins for the formula are set by the length parameter \multlinegap which is initially 10 pt. This may be altered by the user with the \setlength or \addtolength commands. 272 Chapter 12. Math Extensions with AMS-LATEX An equation with five lines could be broken to look as follows: First line — left justified Second line — horizontally centered Third line — pushed to the left Fourth line — pushed to the right Last line — right justified (12.1) \begin{multline} \framebox[.75\columnwidth]{First line --- left justified}\\ \framebox[.6\columnwidth]{Second line --- horizontally centered}\\ \shoveleft{\framebox[.6\columnwidth]{Third line --- pushed to the left}}\\ \shoveright{\framebox[.6\columnwidth]{Fourth line --- pushed to the right}}\\ \framebox[.75\columnwidth]{Last line --- right justified} \end{multline} A real equation would contain mathematical expressions and not the \framebox commands in the above demonstration. The split environment Like multline, the split environment is meant for a single equation that does not fit on one line. Line breaks are again forced with the \\ command; the difference is that in each line there is an alignment marker & such that the lines are horizontally positioned to line up the markers. The split environment does not switch into math mode, nor does it produce an equation number. It is intended to be applied within another math environment, such as equation or gather. This is why there is an equation* environment in AMS-LATEX. The equation number, if present, is provided by the outer environment. It is applied to the entire multiline formula, which by default, or with the option centertags, is centered on the group of lines. With the option tbtags, it is placed either at the left of the last line, or at the right of the first line, depending on the further options leqno and reqno, respectively. (See Section 12.2.8.) ! p n X Y 1 X ni l p−2 (−1) (k − l) Hc = 2n l=0 li l1 +···+lp =l i=1 (12.2) p h i X ki −li 2 2 × [(k − l) − (ki − li )] × (k − l) − (ki − li ) j=1 12.2. Standard features of AMS-LATEX 273 \begin{equation}\begin{split} H_c&=\frac{1}{2n}\sum_{l=0}ˆn (-1)ˆl (k-l)ˆ{p-2} \sum_{l_1+\dots+l_p=l} \prod_{i=1}ˆp \binom{n_i}{l_i}\\ &\quad\times[(k-l) - (k_i-l_i)]ˆ{k_i-l_i}\times \Bigl[(k-l)ˆ2 - \sum_{j=1}ˆp (k_i-l_i)ˆ2\Bigr] \end{split}\end{equation} The alignment has been chosen to be just before the equals sign. The second line begins with the alignment marker & so that the equation continues below the = in the first line. A \quad has been inserted so that the × is not immediately below the equals sign. Alternatively, one could place the & after the = and dispense with \quad in the second line. However, the above is more suitable when there are continuation lines beginning with =. Note the centered equation number at the right. The gather environment The gather environment switches to math mode, centering each of its formula lines without any alignment. The formula lines are separated by \\ commands. Each line receives an equation number, unless the *-form has been used, or \notag has been issued in that line. 4 9 n2 n2 ∞ X 1 2 3 n n + + + ··· + + ··· = (12.3) 2 3 4 n+1 n+1 n=1 n s n2 1 n n = 1 <1 = lim converges since lim 1 n→∞ n→∞ n+1 e 1+ n root condition 2+ diverges since ∞ X 3 4 n+1 n+1 + + ··· + + · · · = (12.4) 4 9 n2 n2 n=1 Z∞ 1 ∞ x+1 dx = ln x − = ∞ (integral condition) x2 x c c \begin{gather} \frac{1}{2} + \left(\frac{2}{3}\right)ˆ4 + \left(\frac{3}{4} \right)ˆ9 + \dots + \left(\frac{n}{n+1}\right)ˆ{nˆ2} + \dotsb = \sum_{n=1}ˆ\infty \left(\frac{n}{n+1}\right)ˆ{nˆ2} \\ \text{converges since}\quad\lim_{n\to\infty} \sqrt[n]{\left(\frac{n}{n+1}\right)ˆ{nˆ2}} = \lim_{n\to\infty} \left(\frac{1}{1 + \dfrac{1}{n}}\right)ˆn = \frac{1}{\me} < 1 \tag*{root condition}\\ 2 + \frac{3}{4} + \frac{4}{9} + \dots + \frac{n+1}{nˆ2} + \dotsb = \sum_{n=1}ˆ\infty \frac{n+1}{nˆ2}\\ \text{diverges since}\quad\int_cˆ\infty \frac{x+1}{xˆ2}\, 274 Chapter 12. Math Extensions with AMS-LATEX \dif x = \left[ \ln x -\frac{1}{x}\right]_cˆ\infty = \infty \tag{integral condition} \end{gather} Note the use of \tag and \notag (page 271) to add text as markers to the second and fourth lines. The align environment The align environment is intended for multiple equations with horizontal alignment, usually on an equals sign or equivalent. New lines are indicated with \\ as usual. Each line is split into aligned columns such that the first column is right justified against the & character, the second left justified; the third column is right justified against the third &, the fourth column left justified again, and so on. This is the same as an array environment with column specification {rl rl rl ...}. 0 (x n ) = nx n−1 n 1 0 = − n+1 xn x 0 √ 1 n x = √ n n xn − 1 0 (sin x)0 = cos x 0 (cos x)0 = − sin x (ex ) = ex (ax ) = ax ln a (ln x)0 = (loga x)0 = 1 x 1 x ln a 1 cos2 x 1 (cot x)0 = − sin2 x (tan x)0 = \begin{align*} \left(xˆn\right)’ &= nxˆ{n-1} & \left(\meˆx\right)’ &= \meˆx & (\sin x)’ &= \cos x \\ \left(\frac{1}{xˆn}\right)’ &= -\frac{n}{xˆ{n+1}} & \left(aˆx\right)’ &= aˆx\ln a & (\cos x)’ &= -\sin x\\ \left(\sqrt[n]{x}\right)’ &= \frac{1}{n\sqrt[n]{xˆn -1}} & (\ln x)’ &= \frac{1}{x} & (\tan x)’ &= \frac{1}{\cosˆ2 x}\\ & & (\log_a x)’ &= \frac{1}{x\ln a} & (\cot x)’ &= -\frac{1}{\sinˆ2 x} \end{align*} The align* environment is used here to prevent the lines from being numbered, something that is not appropriate for such a collection of formulas. The alignment within each of the three column pairs is on the equals sign. The input for the last line begins with a double && to produce an empty column pair. Occasionally a set of formulas is to be aligned on several equals signs in one line, as in the equations below for the volume V , inertial moment Iz , and mass M of an arbitrary body, in Cartesian, cylindrical, and spherical coordinates. In this case, the second and third parts are separated by a 12.2. Standard features of AMS-LATEX 275 double && so that the left-hand sides of these column pairs are empty: the equals signs are always on an odd-numbered alignment marker. Z V = ZZZ dv ZZZ dx dy dz = ρ dx dρ dφ = V ZZZ = Z Iz = ρ 2 dv = ZZZ (x 2 + y 2 ) dx dy dz = V ZZZ ρ 3 dz dρ dφ ZZZ r 4 sin3 θ dr dθ dφ = Z M= ZZZ δ dv = r 2 sin θ dr dθ dφ (12.5) (12.6) ZZZ δ dx dy dz δρ dz dρ dφ = V ZZZ = δr 2 sin θ dr dθ dφ (12.7) \begin{align} V &= \int\limits_V\dif v &&= \iiint\dif x\,\dif y\,\dif z &&= \iiint \rho\,\dif x\,\dif \rho\,\dif \phi \notag \\ &&&&&= \iiint rˆ2 \sin\theta\,\dif r\,\dif\theta\,\dif\phi\\ I_z &= \int\limits_V \rhoˆ2\,\dif v &&=\iiint(xˆ2 + yˆ2) \,\dif x\,\dif y\,\dif z &&= \iiint \rhoˆ3\,\dif z\,\dif \rho\,\dif \phi \notag \\ &&&&&= \iiint rˆ4\sinˆ3\theta\,\dif r\,\dif\theta\,\dif\phi\\ M &= \int\limits_V \delta\,\dif v &&= \iiint \delta \,\dif x\,\dif y\,\dif z &&= \iiint \delta\rho\,\dif z\,\dif\rho\,\dif\phi\notag \\ &&&&&=\iiint\delta rˆ2\sin\theta\,\dif r\,\dif\theta\,\dif\phi \end{align} There are two variations on the align environment, falign and alignat. The first has exactly the same syntax as align but it inserts so much spacing between the column pairs that the entire line is filled out. The alignat environment is just the opposite: no spacing is inserted automatically between the column pairs. It must take the number of column pairs as a mandatory argument, but otherwise the syntax of the contents is the same as that for align. The example above with the volume, inertial moment, and mass of a body could just as well have been given with \begin{alignat}{3} formula text \end{alignat} (In fact, this is precisely what was done in order to fit it within the line width of this book.) If one or more columns are empty, as in this example, it is possible to control their widths precisely in the alignat environment by adding 276 Chapter 12. Math Extensions with AMS-LATEX explicit spacing between the two & characters in one of the lines. See Section 5.5.1 for spacing in math mode. In summary, for the align environment and its variants, the first, third, fifth, etc. & characters are alignment markers, while the second, fourth, sixth, etc. are column pair separators. Nested alignment environments We have already pointed out on page 272 how the split environment is to be placed inside an equation environment. The same is true for the environments aligned and gathered, which may be used as building blocks within formulas. Their contents and behavior are otherwise the same as their related environments. Both of these environments take an optional argument pos \begin{aligned}[pos] \begin{gathered}[pos] lines lines \end{aligned} \end{gathered} which takes values of t or b to determine the vertical alignment (top or bottom) when they appear beside other elements. When no pos is given, they are centered. In this way s =x+y α = aa β = bbbbb d=u−v −w versus γ=g δ = dd versus p =x◦y η = eeeeee ϕ=f is produced with \begin{equation*} \begin{aligned} \alpha&=aa\\ \beta&=bbbbb\\ \gamma&=g \end{aligned} \qquad\text{versus}\qquad \begin{aligned}[t] \delta&=dd\\ \eta&=eeeeee\\ \varphi&=f \end{aligned} \qquad\text{versus}\qquad \begin{gathered}[b] s= x+y\\ d= u - v - w\\ p = x\circ y \end{gathered} \end{equation*} The cases environment Although it is possible with standard LATEX to produce structures of the form ( 0 if r − j is odd, Pr −j = (12.8) (r −j)/2 r ! (−1) if r − j is even. 12.2. Standard features of AMS-LATEX 277 as demonstrated by a similar example in Section 5.4.1 on page 132, the AMS-LATEX cases environment allows a simpler input: \begin{equation} P_{r-j}=\begin{cases} 0 & \text{if $r-j$ is odd,}\\ r!\,(-1)ˆ{(r-j)/2} & \text{if $r-j$ is even.} \end{cases} \end{equation} There may be more than two cases in the environment, as in the example reproduced here from page 132: −1 : 0 : y= +1 : x<0 x=0 x>0 \[ y = \begin{cases} -1 &:\quad x<0\\ \hfill 0 &:\quad x=0\\ +1 &:\quad x>0 \end{cases} \] 12.2.7 Equation numbering Numbering hierarchy With the standard LATEX classes book and report, equations are given a double number with the chapter designation and then a sequential number starting at 1 for each new chapter. For the article class, the equations are numbered sequentially throughout the work. With the amsmath package, it is possible to alter this hierarchy. For example, if an article is to have the equations numbered within each section, with the section number, give \numberwithin{equation}{section} to redefine the equation numbers to include the section number and to make the equation counter reset every time the section counter is incremented. This is as though the equation counter had been created with \newcounter{equation}[section] (Section 8.1.2), something which the user cannot normally bring about. Furthermore, \theequation is redefined to be \thesection.\arabic{equation}, something that is in the user’s power but which is not much use if the equation counter is never reset. Subnumbering equations On page 190 we give an example of how equations may be subnumbered, that is, the main equation number stays the same and a letter is appended to it, as 1.8a, 1.8b, 1.8c . . . . The amsmath package provides this feature with the subequations environment. Numbered equations appearing within \begin{subequations} ... \end{subequations} 278 Chapter 12. Math Extensions with AMS-LATEX will all have the same main number which is one more than that of the previous one, with sequential, lower case letters attached. Within the environment, the equation counter refers to the subnumber, that is, to the letters, while the main number is to be found in the parentequation counter. To change the format of the subnumber, say to 1.8-A, 1.8-B, . . . , give \begin{subequations} \renewcommand{\theequation} {\theparentequation-\Alph{equation}} . . . \end{subequations} Referencing equation numbers The LATEX cross-reference system is described in Section 9.2.1 and works exactly the same way with AMS-LATEX: when \label{marker} is issued in a mathematical formula that receives an automatic equation number, that number can be printed anywhere in the text with \ref{marker}, where marker is arbitrary text to identify that equation. The amsmath package adds a command \eqref{marker} to print the equation number in parentheses, as it appears beside the math formula. For example, the cases equation on page 276 is referred to as equation 12.8 with \ref, or as equation (12.8) with \eqref. If \label is given immediately after the start of a subequations environment, the corresponding \ref commands will print the main equation number without the extra letter. In this way one can refer to the entire group of equations. Later \label commands are associated with individual equation lines and reference them with the letters. Page breaks within multiline formulas Unlike the standard LATEX eqnarray environment, the AMS-LATEX multiline math environments do not normally allow any page breaks to occur within them. The idea is that the author should have more control over where such breaks may occur. To allow or force a page break within a multiline equation, one gives \displaybreak[num] just before the line breaking command \\. Here the optional num has the same meaning as for the standard \pagebreak command (page 33): without it, a new page is forced, but it may take values of 0–4 to allow a break with increasing degree of encouragement, whereby 4 also forces the page break. Alternatively, one can issue \allowdisplaybreaks in the document preamble to allow LATEX to break pages automatically within multiline 12.2. Standard features of AMS-LATEX 279 formulas as necessary. This command too takes an optional argument num with possible values between 0 and 4 which make it progressively easier for automatic page breaks to occur. Once \allowdisplaybreaks has been given in the preamble, it is still possible to suppress page breaks within a formula by ending an equation line with \\* instead of with \\. 12.2.8 Package options for amsmath The main amsmath package for AMS-LATEX recognizes a number of options that may be given when it is loaded with \usepackage[options]{amsmath} They are listed here as pairs with opposing effects. The member of each pair that is assumed if neither is given, the default, is indicated by underlining. centertags | tbtags The equation number for a split environment (page 272) is centered vertically by default. With tbtags, it is placed either to the left of the first line or to the right of the last line, depending on the side on which numbers are to appear. sumlimits | nosumlimits In displayed formulas, initial and final limits P appear below and above the sign with the sumlimits option. With nosumlimits, they are placed beside the sign, raised and lowered with the usual ˆ and _ characters. PQ`SU Other T F Wsymbols V J Nthat are L affected by these options are and . On the other hand, integral signs are not influenced by them. sumlimits ∞ m−1 X Y 1 n! = 2; n−i= n 2 (n − m)! n=0 i=0 X∞ n=0 nosumlimits Ym−1 1 n! = 2; n−i= i=0 2n (n − m)! The input text is the same for both of the above cases. intlimits | nointlimits Integral signs normally have their limits at the side; these options allow them to be placed above and below as for summations. intlimits Za p 0 a2 − x2 Z1 a dx = 0 2 q 2 1 − sin t d sin t = a 2 πZ/2 0 cos2 t dt = π a2 4 280 Chapter 12. Math Extensions with AMS-LATEX nointlimits Zap Z1 q Z π /2 π a2 a2 − x 2 dx = a2 1 − sin2 t d sin t = a2 cos2 t dt = 4 0 0 0 where again the input text is the same for both cases. As a reminder, the standard LATEX treatment of limits on integral signs is the same as for nointlimits. namelimits | nonamelimits The function names \det, \gcd, \inf, \lim, \liminf, \limsup \max, \min, \Pr, and \sup frequently take lower limits which normally appear below the name in displayed formulas. With nonamelimits, they are placed at the lower right. namelimits 1 x = e = 2.7182 . . . lim 1 + x→∞ x nonamelimits 1 x limx→∞ 1 + = e = 2.7182 . . . x The above options determine the standard placement of limits for the entire document. It is still possible to change the behavior in any particular case with the \limits and \nolimits commands, as in normal LATEX. The remaining package options select the side for equation numbers and the horizontal positioning of equations. leqno | reqno The standard location for equation numbers is on the right side, at the margin; with leqno, they are placed on the left side of the equation. fleqn With this option, all displayed equations are printed flush left, set off from the left margin by an amount \mathindent. Without this option, equations are centered. (This is like the fleqn class option for the standard classes, page 39.) 12.3 Further AMS-LATEX packages The AMS-LATEX packages described in this section must be loaded explicitly if their features are to be exploited. Unlike the amsbsy and amstext packages, they are not loaded automatically with amsmath. They may, however, be used on their own, independently of the main package. 12.3.1 Extended theorem declarations Package: amsthm The amsthm package offers many additional possibilities for generating theorem-like declarations described for standard LATEX in Section 4.5. As for standard LATEX, a new theorem declaration is created with a statement like 12.3. Further AMS-LATEX packages 281 \newtheorem{com}{Comment} where the first argument is the name of the theorem type (here com) and the second is the title that is printed when the theorem declaration is invoked. For example, \begin{com} Theorem declarations can have any name. \end{com} produces the declaratory text Comment 1. Theorem declarations can have any name. In addition to the two mandatory arguments, the \newtheorem command may have one of two optional ones. The complete syntax is \newtheorem{type}[num like]{title} or \newtheorem{type}{title}[in counter] where num like is the name of an existing theorem-like declaration which is to be numbered in the same sequence as type, and in counter is a counter name like chapter or section to reset the numbers of the type declarations. All this is standard LATEX so far. The amsthm package adds the following features. • A \newtheorem* is provided that defines an unnumbered theorem structure. • Three predefined theorem styles are available: plain in which the title and number are in bold face and the text italic; definition with title and number in bold face and the text in normal font; remark for title and number in italic and the text normal. The desired style is activated by first issuing \theoremstyle{style}; all subsequent \newtheorem statements will have this style until a new one is activated. • A \swapnumbers can be issued to cause all following new theorem types to have the numbers appear before the title, as 1 Comment. • New theorem styles may be defined by the user by means of a \newtheoremstyle command, or additional predefined styles may be loaded with package options. Since this is fairly specialized and complex, it is best to examine the example file thmtest.tex or read the documentation in amsthm.dtx. 282 Chapter 12. Math Extensions with AMS-LATEX • A proof environment is available for presenting short proofs. It is an unnumbered structure with the title Proof. The text is terminated automatically with the Q.E.D. symbol . This symbol may be altered by redefining the command \qedsymbol; it may be printed at any time by issuing \qed. The amsthm package has much in common with Frank Mittelbach’s theorem package in the tools collection of Section B.5.4. 12.3.2 Commutative diagrams Package: amscd The extra AMS-LATEX package amscd makes it easier to generate commutative diagrams like the one here at the right. S WΛ ⊗ T y j − −−−→ (S ⊗ T )/I T yEnd P (Z ⊗ T )/J These diagrams are created within the CD environment using some additional arrow commands. These bear the rather unusual names @>>> @<<< @AAA and @VVV for arrows pointing right, left, upwards, and downwards, respectively.The command @= draws a horizontal double rule, a lengthened equals sign. Any text or symbols between the first and second > or < characters will appear above the horizontal arrow in \scriptstyle font. Similarly, any text or symbols between the second and third characters will be printed below the arrow. For vertical arrows, text or symbols between the first and second A or V are placed to the left; those between the second and third to the right, again in \scriptstyle. The above example diagram, which is taken from the AMS-LATEX manual amsldoc.tex, was produced with \[ \begin{CD} Sˆ{\mathcal{W}_\Lambda}\otimes T @>j>> T\\ @VVV @VV{\End P}V\\ (S\otimes T)/I @= (Z\otimes T)/J \end{CD} \] The command \End to print the function name ‘End’ is not standard. It must be previously defined with \DeclareMathOperator{\End}{End} (see page 268). 12.3.3 References with upref package Package: upref Normally the numbers printed with the \ref and \pageref commands are in the current font, whether that be bold, italic, or upright. In order to ensure that the numbers are always upright, load the extra AMS-LATEX package upref. 12.4. The AMS fonts 12.4 283 The AMS fonts The AMS makes a number of fonts available to complement the regular Computer Modern fonts provided with the standard TEX/LATEX installation. They include extra math alphabets, supplemental CM bold math italic and symbol fonts in smaller sizes than 10 pt, Cyrillic fonts, and additional symbol fonts. In the next sections we describe these various fonts and how to take advantage of them. 12.4.1 Extra CM math fonts Standard TEX installations of Computer Modern fonts provide bold math italic cmmib10, the bold symbols cmbsy10, and math extensions cmex10 fonts only in 10 pt size, as indicated by the suffix 10 to their names. The AMS has supplemented these with versions in sizes 5–9 pt. cmmib5 cmbsy5 cmmib6 cmbsy6 cmmib7 cmbsy7 cmex7 cmmib8 cmbsy8 cmex8 cmmib9 cmbsy9 cmex9 The small caps font cmcsc10 is also given companions cmcsc8 and cmcsc9. The normal LATEX installation automatically assumes that these fonts are on the system and incorporates them into the necessary NFSS font definition files. Substitutions will be made if they are missing. 12.4.2 Cyrillic fonts The AMS Cyrillic fonts were originally used in reviews of books published in Russian and other Slavic languages in which the titles were to be rendered in the original language. In 1988, the Humanities and Arts Computing Center of the University of Washington redesigned them for general purpose Slavic studies, adding the pre-Revolutionary and accented letters. The overall appearance was also greatly enhanced (see Layout 8 on page 497). These fonts all bear the prefix wncy, followed by the style designation r (upright), b (bold), i (italic), sc (small caps), or ss (upright sans serif), and the design size in points. The best way to enable the Cyrillic fonts is simply to select font encoding OT2 under NFSS, as illustrated in Section A.2 on page 371. The .fd (font definition) files for the Cyrillic fonts have been so set up that the other font attributes fully parallel those of the Latin fonts. This means wncyr10 has all the same attributes as cmr10, except for the encoding: family cmr, shape n, series m. (Of course, if the CM fonts are not the 284 Chapter 12. Math Extensions with AMS-LATEX current standard ones, it will require more than just selecting the OT2 encoding to activate these Cyrillic fonts.) The layout of the Cyrillic fonts has been chosen in such a way that the input text may be entered following the regular English transliteration scheme. Thus Cyrillic S is in position 83 where Latin S is normally situated. Typing S when a Cyrillic font is active outputs the correct equivalent S. Numerals and punctuation are to be found in the standard locations and so may be typed in as usual. ‘Sankt-Peterburg 10?’ is thus generated by {\cyr Sankt-Peterburg 10?}. Since the Cyrillic alphabet possesses more letters than the Latin, many of them must be transliterated with multi-letter combinations. These are automatically programmed into the fonts using TEX’s ligature system. For example, Ch is treated as a ligature for symbol 81 Q just as fi is for fi in a Latin font. This means that multi-letter transliterations are simply typed in. The input for ‘Hruwev’ is {\cyr Khrushchev}, where Kh → H and shch → w. The transliteration scheme is that for English; other languages have their own systems to reproduce the original pronunciation. For example, ‘Gorbaqv’ is Gorbatschow in German, Gorbaciov in Italian, and Gorbachev in English. These other schemes do not work with these fonts. Not all letters can be produced so automatically (for example, the in Gorbaqv) and for this reason the AMS provides a file cyracc.def containing macro definitions for accented letters and other special features, such as the hard and soft signs. When these macros are given in a Latin font, additional transliteration symbols appear. 12.4.3 Euler fonts The fonts known as the Euler collection, named after the eighteenthcentury mathematician Leonhard Euler, have been collected from various sources by the AMS. They include a ‘blackboard’ font, representing a professor’s handwriting on a blackboard, a Fraktur or Gothic font, and a script font. Their main purpose in mathematics is to be a substitute for the CM calligraphic math alphabets. Package: To use the blackboard characters, one must load the package amsfonts amsfonts (which is included automatically with the amssymb package) and then employ the math alphabet command \mathbb. Thus $\mathbb{A B C ..}$ produces ABCDEFGHIJKLNMOPQRSTUVWXYZ Package: eucal The package eucal redefines the \mathcal command to use the Euler script characters in place of the CM calligraphic letters. If this package is loaded with the option mathscr, the command \mathcal is left unchanged and instead \mathscr is defined to invoke these letters. In this case, $\mathscr{A B C ..}$ produces 12.4. The AMS fonts 285 ABCDEFGHIJKLNMOPQRSTUVWXYZ Package: eufrak Finally, the package eufrak defines the math alphabet command \mathfrak, with which $\mathfrak{A B C ..}$ yields ABCDEFGHIJKLNMOPQRSTUVWXYZ This math alphabet is also enabled with the amsfonts package. 12.4.4 Extra math symbols The set of symbols in the CM math symbol fonts by no means exhausts the fantasies of active mathematicians. To overcome this deficiency, the AMS has produced two fonts, msam10 and msbm10, containing only symbols, arrows, and the blackboard characters. They are also available in sizes 5–9 pt. Since these fonts originated in the days when TEX could only handle 128 characters in any font, that is exactly how many they contain. Today, they could be combined into one font of 256 characters. Two packages permit access to this treasure trove of hieroglyphs: amsfonts enables the \mathbb math alphabet command for the blackboard characters, and defines those symbol names which are otherwise only provided in the latexsym package (Section 5.3.3). amssymb is the more convenient package, which loads amsfonts and then defines names for all the symbols in the two fonts. For example, \[ \circlearrowright \Cup \lessapprox \lll \varpropto \because \circeq \vDash \blacktriangle \sphericalangle \] ú Ú Þ ∝ ∵ Ð î All the symbols and their associated names from the amssymb package are to be found in Tables H.20–H.26 on pages 599–601. 13 Drawing with LATEX The inclusion of graphical material from other programs is treated in Chapter 6. Such ‘foreign’ files do add some complications (which are greatly reduced today with LATEX 2ε ) and can cause portability problems. What would be desirable is a means to do graphics with LATEX itself so that the source text file is fully self-contained. Standard LATEX does contain the means to make somewhat primitive drawings on its own. The word ‘primitive’ should not be considered derogatory, for simple building blocks are the basic units for constructing very complicated, sophisticated structures. They are also useful for superimposing imported graphics or for adding embellishments to them, as demonstrated in Section 6.1.5. This chapter describes the intrinsic LATEX drawing capabilities, and then explains some extensions that are available to enhance them. Many more possibilities exist for adding specialized diagrams, from chemistry, to music, to chess positions. These are described in detail in The LATEX Graphics Companion by Goossens et al. (1997). 13.1 The picture environment 13.1.1 Picture coordinates The picture building blocks can only be put in place once a coordinate system has been established for that picture. This consists of a reference point or origin, and two mutually perpendicular coordinate axes, as well as a length unit for the coordinates. The origin is the lower left corner of the picture and the axes are its lower and left edges. These edges are referred to as the x-axis (lower) and y-axis (left). Once the unit of length (UL) has been specified, every point within the picture area can be uniquely referred to with two decimal numbers: the first is the number of length units along the x-axis, the second the number along the y-axis. 287 288 Chapter 13. Drawing with LATEX The coordinate numbers are generally positive, meaning that the point lies to the right and above the reference point. Since this point is the lower left corner of the picture, all other points should be more to the right and higher than it. However, negative values are also possible. A negative x value (a negative number for the first member of a coordinate pair) defines a point left of the origin, while a negative y value (the second member of the pair is negative) specifies a point below the reference point. negative coordinate values y y-axis 1.4 6 q(1.8,1.4) 6 (3.0,2.0) r (−2.2,1.8) r origin r UL - s UL- - x-axis 1.8 r (−1.8,−0.8) -x r (2.5,−1.0) The unit length is selected with the command \setlength{\unitlength}{length} In the left-hand example above, the unit length was set to a value of 1.5 cm with the command \setlength{\unitlength}{1.5cm}. The point (1.8,1.4) then lies 1.8 times the unit length (= 2.7 cm) to the right, and 1.4 times (= 2.1 cm) above the origin. In the right-hand example, the unit length is set to 1 cm. The unit of length is normally set to a convenient size such as 1 cm, 1 mm, or 1 in and the picture is built up accordingly. Once it has been completed, it is possible to rescale the whole thing simply by changing the value of the length unit. A picture that was originally designed with \unitlength set to 1 cm can be enlarged by a factor 1.2 by redefining its length unit to be 1.2 cm. 13.1.2 The picture environment Pictures are constructed within the picture environment which is started with \begin{picture}(x dimen,y dimen) picture commands \end{picture} 13.1. The picture environment 289 where (x dimen,y dimen) is a pair of numbers that specifies the size (dimensions) of the picture in the x-direction (horizontal) and y-direction (vertical). This pair of numbers is enclosed in round parentheses! The unit of length is that previously selected by \unitlength. \setlength{\unitlength}{1.5cm} \begin{picture}(4,5) ... ... ... \end{picture} produces a picture that is 4 length units wide and 5 units high. Since the length unit has been set to 1.5 cm, the actual size is 6 cm wide and 7.5 cm high. Picture commands are those commands described below that are used to produce and position the individual picture elements. These are the only commands that are allowed within the picture environment, other than font style and size declarations (Section 4.1) and the line thickness commands \thicklines and \thinlines. These last determine which of the two available line thicknesses will become current for drawing lines: one may switch back and forth as one pleases. Initially thin lines are active. The value of the parameter \unitlength must not be altered within the picture environment, for it must remain the same for the entire picture. It may, however, be changed between pictures. If the \unitlength specification together with the picture environment are enclosed within another environment, such as \begin{center} ... \end{center}, then that value of \unitlength is valid only until the end of the environment. A picture environment without a preceding \unitlength command uses the standard value of 1 pt. 13.1.3 The positioning commands Picture elements are generated and positioned by means of the two commands \put and \multiput, which have the syntaxes: \put(x,y){pic elem} \multiput(x,y)(∆x,∆y){num}{pic elem} The pic elem is one of the picture element commands described in the next section. The arguments (x,y) are the placement coordinates, designating the location of the picture element within the picture coordinate system, in units of \unitlength. If this is 1 cm, then (2.5,3.6) means that the element is to be positioned 2.5 cm to the right and 3.6 cm above the lower left corner of the picture. The \multiput command generates the same picture element num times, moving it (∆x,∆y) each time. Thus the element is drawn at (x, y), (x + ∆x, y + ∆y), (x + 2∆x, y + 2∆y), . . . up to (x + [num − 1]∆x, y + [num − 1]∆y) 290 Chapter 13. Drawing with LATEX The coordinate pair (x, y) is incremented by (∆x, ∆y) for each successive placement. The values of the incrementing pair may be positive or negative. Thus \multiput(2.5,3.6)(0.5,-0.6){5}{pic elem} produces the pic elem a total of five times, first at the location (2.5,3.6) and then at (3.0,3.0), (3.5,2.4), (4.0,1.8), and finally (4.5,1.2). Note that the numbers for the coordinate and increment pairs are given in round parentheses ( , ) and that the two numbers within each pair are separated by a comma. The num and pic elem entries, on the other hand, are enclosed in curly brackets { } as usual. Warning: Since the comma separates the two numbers in a coordinate pair, it may not be used in place of a decimal point. For coordinate entries, decimal numbers must be written with a period, not a comma. 13.1.4 Picture element commands Text within pictures The simplest picture element of all is a piece of text, positioned at the desired location within the picture. This is accomplished by putting text in place of pic elem in the \put or \multiput command. The arrow points to the location (1.8,1.2). The command \put(1.8,1.2){An arrow} inserts the text ‘An arrow’ so that its lower left corner is at the (1.8,1.2) specified position. The text as picture element may also be packed into a \parbox or a minipage environment, and the reference point for the coordinate entry in the \put command depends on the positioning arguments of that box: An arrow \parbox[b]{..}{..} Reference point is the lower left corner of the last line in the parbox. \parbox{32mm}{...} For a standard parbox, the reference point is the vertical center of the 7 left edge. \parbox[t]{..}{..} Reference point is the left corner of the top line in the parbox. lower Exercise 13.1: Produce a picture 100 mm wide and 50 mm high with \unitlength equal to 1 mm. Place the given texts at the following locations: (0,0) ‘The First Picture’, (90,47) ‘upper left’, (70,40) ‘somewhere upper right’, and put a parbox of width 60 mm at (25,25) containing ‘A separate exercise file with the name picture.tex should be created for the exercises in this Chapter.’ Exercise 13.2: Repeat the picture processing with a value of 1.5 mm for \unitlength, and with positioning arguments t and b for the parbox. 13.1. The picture environment 291 Picture boxes—rectangles The box commands \framebox, \makebox, and \savebox (Section 4.7.1) are available in the picture environment but with an extended syntax. In addition, there is another box command \dashbox: \makebox(x dimen,y dimen)[pos]{text} \framebox(x dimen,y dimen)[pos]{text} \dashbox{dash len}(x dimen,y dimen)[pos]{text} The dimensional pair (x dimen, y dimen) defines the width and height of the rectangular box in units of \unitlength. The positioning argument pos determines how the text is located within the box. It may take on values: [t] top The input text appears—centered horizontally—below the upper edge of the box. [b] bottom The input text appears—centered horizontally—above the lower edge of the box. [l] left The input text begins—centered vertically—at the left edge of the box. [r] right The input text ends—centered vertically—at the right edge of the box. [s] stretch The input text is stretched horizontally to fill up the box, and centered vertically. Without the optional argument pos, the input text is centered vertically and horizontally within the box. These positional values may be combined two at a time: [tl] top left The text appears at the upper left. [tr] top right The text appears at the upper right. [bl] bottom left [br] bottom right The text appears at the lower left. The text appears at the lower right. The order of the values is unimportant: tl has the same effect as lt. These box commands are to be used as pic elem in the placement commands \put and \multiput. The box is so placed that its lower left corner is at the position given by the coordinate pair in the placement command. \put(1.5,1.2){\framebox(2.5,1.2){center}} 292 Chapter 13. Drawing with LATEX The arrow indicates the point (1.5,1.2) which is the position of the lower left corner of the rectangle with width 2.5 units and height 1.2 units. The text ‘center’ is centered both horizontally and vertically. UL = 0.8 cm. 6 center 1.2 UL ? 2.5 UL - (1.5,1.2) The effect of the text positioning argument is made clear with the following examples (UL = 1 cm): (3.0,3.2) center right @ R @ top center bot. left @ I @ (0.0,1.95) (2.0,0.3) @ I @ (3.0,1.95) center @ R @ stretch \put(0.0,1.95){\framebox(2,1.0) [t]{top center}} \put(3.0,1.95){\framebox(2,0.8) [lb]{bot. left}} \put(3.0,3.2){\framebox(2,0.6) [r]{center right}} \put(2.0,0.3){\framebox(2,0.6) [s]{stretch\hfill center}} The picture element \makebox is exactly the same as the \framebox command but without the rectangular frame. It is most often employed with the dimensional pair (0,0) in order to place text at a desired location. (See Section 4.7.1 for the effect of zero width boxes on the enclosed text.) (2.0,2.8) -flush left (3.0,1.6) \put(3,1.6){\makebox(0,0){center center}} \put(2,0.5){\makebox(0,0)[tr]{top right}} \put(4,1.0){\makebox(0,0)[b]{bot center}} \put(2,2.8){\makebox(0,0)[l]{flush left}} center ? center (2.0,0.5) bot center The combination [lb] positions the text in exactly 6 @ R the same way as simply typing the text in as pic elem top right (4.0,1.0) without a box, as shown on page 290. The picture element \dashbox also produces a framed box, but with a dashed line around it. The argument dash len specifies the dash length. \put(1.0,0.75){\dashbox{0.2}(4,1){dashed frame}} dashed frame A dashed frame looks best when both the height and width are a multiple of the dash length. * (1.0,0.75) Even in the above picture box commands, the entered text may be put into a vertical box (\parbox or minipage). Since vertical boxes themselves possess an optional positioning argument b or t, which must not conflict with that of the picture box, the following rule must be observed: If a picture box command contains the positioning argument b or t, then the same value must be applied to the enclosed vertical box. If the picture box command has no positioning argument or only r or l, then the vertical box must be used in the standard (no argument) form. 13.1. The picture environment 293 The positioning argument of a picture box has the same effect on the enclosed vertical box as it does on a line of text, in that the whole box is treated as a single unit. Exercise 13.3: Reproduce the organization table below with the boxes and included text but without the horizontal and vertical lines and arrows. These will be part of the next exercise. Hint: first draw the boxes on a piece of squared paper so that the edges of the boxes lie on the printed rules. Select the unit of length to be the rule spacing of the paper. Take as the origin the lower left corner of an imaginary frame surrounding the entire diagram. Directorate Scientific Advisors - Trustees Managing Director 6 Science Project planning and managing - Administration Personnel Bookkeeping - Technical Head Staff planning Drafting Projects Services Stores Phys. Plant Workshops Development Analysis Theory Library Computer facilities Orders Receiving Customs including general services Project hardware construction Labs Project working groups Straight lines In the picture environment, LATEX can draw straight lines of any length, horizontally and vertically as well as at a limited number of angles. The syntax for this picture element reads \line(∆x,∆y){length} For horizontal and vertical lines, length specifies how long the line is to be in length units. For lines at an angle, it has a somewhat more complicated meaning, as is explained below. The line begins at that spot given by the placement coordinates in the \put or \multiput command. (0,0) (7.5,0) @ R @ \thicklines \put(0,0){\line(1,0){6}} \put(0,0){\line(0,1){1}} \put(6,0){\line(0,1){0.5}} The angle at which the line is drawn is given by the slope pair (∆x,∆y). The slope pair (1,0), in which ∆x = 1 and ∆y = 0, produces a horizontal line, while the pair (0,1) leads to a vertical line. This is illustrated in the above example. In general (∆x,∆y) has the following meaning: 294 Chapter 13. Drawing with LATEX y 6 q 6 ∆y ? q A ∆x - Beginning at a point A on the line and moving a distance ∆x in the x direction (horizontally), ∆y is the distance one must move in the y direction (vertically) in order to rejoin the line. By specifying a slope pair (∆x,∆y), a line is drawn at just that angle to fulfill the above x conditions. As mentioned already, the number of different slopes available is limited. This is because ∆x and ∆y may only take on values according to certain rules: 1. The number must be a whole integer (negative or positive). 2. Only the values 0, 1, . . . , 6 are allowed. 3. The two numbers in the pair may not contain a common divisor. Pairs such as (3.5,1.2) (rule 1) and (7,0) (rule 2) are thus forbidden. Similarly (2,2) and (3,6) are invalid pairs by rule 3, since both numbers in the first pair are divisible by 2, and those in the second by 3. The same angles are achieved with the pairs (1,1) and (1,2) respectively. In all there are 25 allowed slope pairs, including (1,0) for horizontal and (0,1) for vertical lines, as one can verify by writing down all the possibilities. In addition, the numbers in the slope pair may be positive or negative, for example, (0,-1), (-2,-5). A negative ∆x in the above diagram means motion to the left, and a negative ∆y is for motion downwards. Thus \put(2,3){\line(0,-1){2.5}} draws a line starting at point (2,3) and going 2.5 length units vertically downwards. y 6 q ∆x=2 H 6 HH ∆y=−1 H ? HH H H Hq len = 3.5 -x For lines at an angle, the argument length determines the projected distance along the x-axis. This is made clearer with the help of the diagram on the left. \put(1.0,2.75){\line(2,-1){3.5}} If one draws dashed lines straight down from the two end points, then that part of the x-axis between them is the projection of the line on to the x-axis. Sloping lines must have a minimum length of about 10 pt or 3.5 mm, otherwise a warning is issued and no line is drawn. Arrows The arrow picture element is made with the command 13.1. The picture environment 295 \vector(∆x,∆y){length} which functions exactly the same as the \line command as far as the arguments and their limitations are concerned. The command draws a line from the placement location given in the \put or \multiput command and places an arrow head at the end. Just as for lines, arrows too must have a length of at least 10 pt or 3.5 mm. Rules 1–3 apply to ∆x and ∆y as well, with the further restriction that the allowed numbers are limited to 0, 1, . . . , 4. This makes a total of 13 possible angles for arrows, not counting changes in sign. QQ Q Q Q Q Q QQ s \begin{picture}(5,2)\thicklines \put(5,0){\vector(-1,0){5}} \put(0,0){\vector(1,1){2}} \put(2,2){\vector(3,-2){3}} \end{picture} Exercise 13.4: Complete the diagram in Exercise 13.3 by including the missing horizontal and vertical lines and arrows. Exercise 13.5: Generate the figure at the right. The corner points are (0,5), (0,10), (5,15), (10,15), (15,10), (15,5), (10,0), and (5,0) and the length unit is 0.1 inch. H @ HH A @ B@ H A@ B H @ A @ B @ H AH@ B @ AH PP @ AA@ PP B PP @ A A @ B PPP@A B @ P A P @A H @ B A @HH @ B @ A HH @ B @A H H @ HB @ A Circles The circle picture element is produced with the commands \circle{diameter} \circle*{diameter} With the *-form of the command, a solid filled-in circle is printed rather than just an outline as for the standard form. Only certain sizes are available so LATEX selects the one closest to the specified diameter entry. If the size is too small, a warning is output to the monitor and no circle is printed. # 6 u } "! \begin{picture}(3,1.6) \put(1,1){\circle*{0.2}} \put(1,1){\circle{1.2}} \put(1,1){\vector(0,1){0.6}} \put(2.5,1){\circle*{0.5}} \end{picture} The placement location in the corresponding \put command refers to the center of the circle. 296 Chapter 13. Drawing with LATEX Ovals and rounded corners The term oval is used here to mean a rectangle whose corners have been replaced by quarter circles; the largest possible radius is chosen for the circles such that the sides join together smoothly. The command to produce them is \oval(x dimen,y dimen)[part] The placement location in the corresponding \put command refers to the center of the oval. \put(3.0,0.75){\oval(4.0,1.5)} Here we have set the values x dimen = 4.0 - 4 UL UL and y dimen = 1.5 UL, whereby the unit 6 length UL has been selected to be 0.8 cm. q(3.0,0.75) 1.5 UL The center of the oval is at the placement co- ? ordinates in the \put command, at (3.0,0.75). The optional argument part takes on values t, b, l, or r, for making half ovals. q [b] (1.75,4.2) 3.5 UL [t] (1.75,2.6) q 6 1.2 UL \put(1.75,4.2){\oval(3.5,1.2)[b]} \put(1.75,2.6){\oval(3.5,1.2)[t]} \put(1.75,1.0){\oval(3.5,1.2)[l]} \put(3.25,1.2){\oval(3.5,1.2)[r]} 1.2 UL The width and height specifications for half ovals are always those of the entire figure 3.5 UL even though only part of it is being drawn. 6 Similarly, the placement coordinates in the (1.75,1.0) q (1.2 UL) q (3.25,1.0) corresponding \put command refer to the [l] [r] ? center of the complete oval. (Unit length 3.5 UL here is UL = 1 cm.) - ? The argument part may also be one of the combinations tl, tr, bl, or br to generate a quarter oval. The order of the two letters is unimportant, so that lt, rt, lb, and rb are equally valid. 3 UL \put(2.0,2.5){\oval(3.0,1.0)[tl]} \put(2.5,2.5){\oval(3.0,1.0)[tr]} (2.0,2.5) q q (2.5,2.5) \put(1.0,1.5){\oval(1.0,2.0)[bl]} 6 ? [tl] [tr] \put(3.5,1.5){\oval(1.0,2.0)[br]} 1 UL q q 2 UL (1.0,1.5) [bl] Once again the size specifications refer to the entire oval and not just to the part that is drawn, and the placement coordinates in the \put com mand refer to the center of the complete oval. 1 UL (3.5,1.5) [br] Quarter and half circles may also be drawn as partial ovals with equal width and height, but only up to a certain size. The following examples 13.1. The picture environment 297 demonstrate that sections of circles are possible up to a size of about 1.5 cm. $ ' \put(2.0,1.0){\oval(4.0,4.0)[t]} \put(2.0,1.0){\oval(1.5,1.5)[t]} # q q # " q q q \put(0.75,0.75){\oval(1.5,1.5)[bl]} \put(1.75,0.0){\oval(1.5,1.5)[tl]} \put(2.25,0.0){\oval(1.5,1.5)[tr]} ! \put(3.25,0.75){\oval(1.5,1.5)[br]} Sections of ovals may be combined with other picture elements. The placement coordinates in the \put command, however, require some serious consideration to get them positioned properly. r \put(0.5,2.5){\oval(1.0,1.0)[t]} \put(0.0,2.5){\vector(0,-1){2.5}} \put(1.0,2.5){\vector(0,-1){1.5}} \put(0.5,2.5){\circle*{0.1}} ? q (2.75,0.5) ? \put(2.5,0.5){\line(0,1){2.5}} \put(2.75,0.5){\oval(0.5,0.5)[bl]} \put(2.75,0.25){\vector(1,0){1.25}} In all the above examples, the centers of the ovals have been marked with a black dot to indicate where they are. They are not normally a part of the \oval picture element. Exercise 13.6: Although the object pictured here is very offensive, it does make an excellent exercise for the picture environment. Hint: sizing and positioning can be worked out best by overlaying the illustration with transparent graph paper. UL=1 mm E E @ u u u u u u u u @ rm rm u u u u u u u u u Vertically stacked text It is sometimes necessary to write text vertically in a diagram, as in the example here at the right. This is carried out with the command \shortstack[pos]{col} y – a x i s The positioning argument can take on values l, r, or c. The standard is c for centered. The command is similar to a tabular environment with only one column. The text is entered as col, each row being separated from the next by \\. The \shortstack command is most frequently implemented for placing short lines of text inside a framed box, or for stacking single letters 298 Chapter 13. Drawing with LATEX vertically. The individual rows are separated from each other with the smallest possible vertical spacing. This means that rows with letters sticking up or down (like h and y ) will have larger apparent gaps between them than rows without such letters. Adding \strut to each line, as in the third example, equalizes the vertical spacing. L This Not e spacing b A strut really t e leaves t the in each s some e room best t r line for for words 6 s help at all is better * (1.0,0.5) * (3.0,0.5) * (5.0,0.5) (8.0,0.8) (9.0,1.2) The placement coordinates of the corresponding \put command refer to the lower left corner of an imaginary box that contains the vertically stacked text. The first of the above texts is left justified, the second centered, and the third right justified. The last two on the right are centered. They were entered with \put(1.0,0.5){\shortstack[l]{This\\spacing\\leaves\\some\\...}} \put(3.0,0.5){\shortstack{Not\\really\\the\\best\\ ...}} \put(5.0,0.5){\shortstack[r]{A strut\strut\\in each\strut\\...}} \put(8.0,0.8){\shortstack{L\\e\\t\\t\\e\\r\\s}} \put(9.0,1.2){\shortstack{b\\e\\s\\t}} The \shortstack command may also be used outside of the picture environment within normal text. One possible application is for marginal notes, as in Section 4.10.5. Framed text The \framebox command generates a frame of a predetermined size in which text may be inserted at various positions (page 291). In text mode, there is the command \fbox for drawing a frame around text that fits it exactly (Section 4.7.1). This command is also available in the picture environment. The amount of spacing between the box frame and the enclosed text is given by the parameter \fboxsep. The placement of an \fbox by means of the \put command occurs in an unexpected manner, as shown below: \begin{picture}(5,2) \setlength{\fboxsep}{0.25cm} \put(0,0){\framebox(5,2){}} \put(1,1){\fbox{fitted frame}} \end{picture} fitted frame (1,1) The additional frame spacing is often unwanted in a diagram, especially if the frame surrounds a picture object rather than text. In this case, the command 13.1. The picture environment 299 \frame{pic elem} is used instead. The placement coordinate of the \put command then refers to the lower left corner as usual. W O TEXT \put(0.0,0.5){\frame{TEXT}} R \put(1.5,0.0){\frame{\shortstack{W\\O\\R\\D}}} D The contents of the \frame command can be any of the previous picture elements, and need not be merely text. However, in many cases the output comes out wrong. \put(0,0){\frame{\vector(1,1){1.0}}} \put(2,0){\frame{\circle{1.0}}} The first example produces the correct result, while the second has failed. In such cases, one can try putting the picture object inside a \makebox of suitable size and positioning as argument for the \frame command. However, it would then make more sense to use the \framebox command itself in place of \frame{\makebox...}. Curved lines Curved lines may be drawn in the picture environment with the commands \qbezier[num](x1 ,y1 )(x2 ,y2 )(x3 ,y3 ) which draw a quadratic Bézier curve from point (x1 , y1 ) to (x3 , y3 ) with (x2 , y2 ) as the extra Bézier point. The curve is actually drawn as num + 1 dots. The number of points num is an optional argument; if it is omitted, its value will be calculated to produce a solid-looking line. The meaning of the extra point can be illustrated with the example at the right. The input is \begin{picture}(40,20) \qbezier(0,0)(20,20)(40,10) \end{picture} (20,20) p p rp p p p p pp (0,0) pr pp p pp p pp p pp pp pp pppp pppp pppp p p pr (40,10) The curve is drawn from (0,0) to (40,10) such that the tangents at the endpoints (the dotted lines) intersect at the extra Bézier point (20,20). Another way of stating this is that, as one moves from the first to the third point, one begins by heading directly towards the second point, and on arrival at the destination, one is moving directly away from that second point again. The dotted lines in the above example, which are not drawn by the \bezier functions, illustrate this. A dotted curve may be drawn by specifying the number of points num; some experimentation may be required to get just the right effect. 300 Chapter 13. Drawing with LATEX Line thickness There is a choice of two line thicknesses for the picture elements \circle, \oval, and \vector, as well as for sloping lines. These may be selected with \thicklines or \thinlines Each of these declarations remains in effect until countermanded by a call to the other one, or until the end of the environment in which it was invoked. Initially, \thinlines is in effect. The thickness of the horizontal and vertical lines may be set with the declaration \linethickness{thickness} to any desired size. The argument thickness is a positive length specification. With \linethickness{1.5mm}, all subsequent horizontal and vertical lines will have a thickness of 1.5 mm. Since frame boxes are constructed out of horizontal and vertical lines, the command \linethickness also affects the \framebox and \dashbox commands. Saving parts of pictures It is possible to store a combination of picture elements as a sub-picture under a certain name, and to recall the whole set as often as one wants without having to reissue the individual commands every time. First each sub-picture must have a name reserved for it with \newsavebox{\sub pic name} which creates a box with the name \sub pic name for storing the picture. Afterwards, the sub-picture is saved with \savebox{\sub pic name}(x dimen,y dimen)[pos]{sub pic} where the arguments (x dimen,y dimen) and pos have the same meaning as for \makebox on page 291. If the picture commands sub pic are simply a piece of text, this command is exactly the same as the \makebox command except that the text is not printed but stored under the name \sub pic name. The sub pic may be set down anywhere within the main picture as a separate picture element. \usebox{\sub pic name} \newsavebox{\sub} \savebox{\sub}(2,1)[br]{\small Sub-Pic} 2 UL .... 6 \put(0.7,0.0){\frame{\usebox{\sub}}} 1 UL ? Sub-Pic \put(3.0,1.0){\frame{\usebox{\sub}}} Sub-Pic 13.1. The picture environment 301 This example may not seem very practical, since the \savebox and \usebox commands could have been replaced by a \framebox together with \multiput to achieve the same result with even less effort. However, the main advantage of these two commands is not for multiple setting of text, but rather for more complex sub pic compositions. It should be pointed out that a \savebox command may be given outside of the picture environment, and even within the preamble. Such a sub-picture is then available in all picture environments throughout the document. However, if a \savebox is defined within an environment, it keeps its contents only until that environment comes to an end. The picture elements inside a \savebox will be sized according to the value of \unitlength in effect at the time that the box is constructed. It will not be rescaled by a later change in \unitlength. 13.1.5 Making graph paper Package: graphpap The package graphpap adds a new command for drawing gridded paper: \graphpaper[num](x,y)(lx,ly) which places a grid with its lower left corner at (x,y), which is lx units wide and ly units high. Grid lines are drawn for every num units, with every fifth one thicker and labeled. If num is not specified, it is assumed to be 10. All arguments must be integers, not decimal fractions. For example, \graphpaper(50,50)(200,100) produces 150 UL=0.3 mm 100 (50,50) @ R 50@ @ 50 100 150 200 250 Exercise 13.7: Produce a sheet of graph paper 10 cm by 15 cm with 2 mm separation between the lines. This sheet may be used to determine the positioning of picture elements when planning a new diagram. 13.1.6 Shifting a picture environment The generalized syntax of the picture environment contains a further coordinate pair as an optional argument 302 Chapter 13. Drawing with LATEX \begin{picture}(x dimen,y dimen)(x offset,y offset) picture commands \end{picture} In this form, (x offset,y offset) specifies the coordinates of the lower left corner. This means that for all \put commands in the environment, the amounts x offset and y offset are effectively subtracted from the placement coordinates, so that the entire picture is shifted by x offset to the left and by y offset downwards. 13.2 Extended pictures 13.2.1 The epic package Package: epic With the intention of adding some higher level commands and creating a more user-friendly interface to the picture environment, Sunil Podar released his epic package, adding new features and enhancements. One idea is to be able to draw multiple objects relative to each other, with only a limited number of absolute coordinates, making reuse and shifting much easier. Another goal is to simplify the drawing of lines. This code was originally written for LATEX 2.09, but functions just as well as a LATEX 2ε package. Thus it is implemented with \usepackage{epic} It makes the following new commands available to the user: \multiputlist \dottedline \jput \matrixput \dashline \picsquare \grid \drawline \putfile as well as the environments: dottedjoin dashjoin drawjoin The \multiputlist command is a variation on the regular \multiput command; rather than placing the same element in several locations, it puts different elements at regularly spaced intervals. \multiputlist(x,y)(∆x,∆y)[pos]{Obj1, Obj2, . . . , ObjN } places the N picture elements Obj1, . . . , ObjN at (x,y), (x+∆x,y+∆y), and so on. They are actually put into a series of \makebox(0,0)[pos]{}, so that the optional pos argument specifies the location of the element relative to the plotted point (Section 13.1.4). The elements in the list are separated by commas, so they must be enclosed in {} if they themselves contain commas. The \matrixput command is the 2-D equivalent of \multiput, creating an array of a single picture element. Its syntax is: 13.2. Extended pictures 303 \matrixput(x,y)(∆x1 ,∆y1 ){n1 }(∆x2 ,∆y2 ){n2 }{Obj} Thus, \matrixput(0,0)(3,5){3}(10,0){5}{\circle{1.5}} produces c c c c c c c c c c c c c c c The \grid command is similar to the \graphpaper command, but it will also optionally label the axes. \grid(width,height)(∆width,∆height)[X0 ,Y0 ] draws a grid of size width×height, with grid lines at intervals ∆width and ∆height. If the optional argument is given, the grid lines are labeled starting at X0 , Y0 , which must be integers, incremented by ∆width and ∆height, which must also be integers in this case. The \grid command must be placed inside a \put command to specify its lower left corner: \put(0,0){\grid...}. A set of points can be joined by a dotted line with the command \dottedline[dot char]{dot gap}(x1 ,y1 )(x2 ,y2 ). . . (xn ,yn ) where dot gap is the spacing (in \unitlength units) between the dots and dot char is the character used for the dot; if it not specified, the \picsquare (see below) is used by default, a small square. A near solid line can be achieved by making dot gap very small, but this could cause TEX to run out of memory. To join a set of points with a dashed line, one uses \dashline[stretch]{dash len}{dot gap}(x1 ,y1 )(x2 ,y2 ). . . (xn ,yn ) where dash len is the length of the dashes (in \unitlength units), which are constructed as a series of dots to produce a solid looking dash. If the optional dot gap is given, then the dashes are made as a series of dots with that separation. The optional stretch is a number between −100 and infinity. If it is 0 or missing, the number of dashes is chosen so that the gaps between them are the same length as the dashes; if stretch is positive, the number of dashes is increased by stretch percent; if negative, it is reduced by that amount. With various combinations of stretch and dot gap, different dash patterns can be produced. To draw a solid-looking line through a set of points, one uses \drawline[stretch](x1 ,y1 )(x2 ,y2 ). . . (xn ,yn ) which draws the lines as a series of line segments using the LATEX line fonts. Since these have a limited number of angles, the result can appear fairly jagged. By increasing the optional stretch factor (again a percent), more segments are used and the appearance is improved; by decreasing it, the line can begin to look dashed. As an example of these three line drawing commands, 304 Chapter 13. Drawing with LATEX \begin{picture}(100,13) \dottedline[.]{3}(0,0)(10,10)(20,0) \dashline{3}(30,0)(40,10)(50,0) \drawline(60,0)(70,10)(80,0) \end{picture} produces . . . . . . . . . . @ @ @ . For each of the three line drawing commands, there is a corresponding environment, named dottedjoin, dashjoin, and drawjoin, each taking the same set of optional and mandatory arguments as the commands, except for the set of coordinates. Within these environments, one gives a set of \jput commands, which behaves exactly like the regular \put, except that all its elements are joined by the selected line type. For example, \begin{picture}(100,13) \begin{dottedjoin}{2} \jput(0,0){\circle{3}} \jput(20,8){\makebox(0,0){\Large$\star$}} \jput(40,3){\makebox(0,0){\small Finish}} \end{dottedjoin} \begin{dashjoin}[20]{3} \jput(55,3){} \jput(70,10){\oval(10,5)} \jput(80,0){\circle*{2}} \end{dashjoin} \end{picture} produces: .. .h ... .. .. . . .? . . . . .... .. Finish u Real life data curves are generated by other software programs. These results can be imported into the picture environment by storing them in a data file, named say mycurve.put and then issuing \putfile{mycurve.put}{\picsquare} The data file contains a list of x y coordinates, one pair per line, with possible comments beginning with % as usual. The \putfile command places its second argument at all the points listed in the data file. The default dot character for plotting all lines is the \picsquare, a black square that scales with the current line thickness. A different dot character may be used with \putfile if one wishes. It is also possible to specify the dot character for \dottedline, but the default is \picsquare. 13.2. Extended pictures 305 The default values for the optional stretch argument in \dashline and \drawline are initially 0, but may be changed at any time by redefining (with \renewcommand) \dashlinestretch and \drawlinestretch, respectively. This makes it possible to revise a whole set of curves with one command, rather than manually changing each one. 13.2.2 The eepic package Package: eepic The epic commands are still subject to many of the limitations of the picture environment: limited number of slopes for lines, limited line thicknesses, restrictions on circle sizes. This is because the picture environment uses LATEX fonts to ‘draw’ inclined lines and circles, making the results portable to all output devices. The eepic package, by Conrad Kwok repairs these problems by employing graphic commands executed by the DVI driver itself. They are transmitted to the .dvi file by \special commands, which are driverspecific. Thus greater flexibility is achieved, but at the price of loss of portability. The package is therefore most suitable for use with the PostScript dvips driver, as well as with the previewers xdvi and windvi. It does not work with pdfTEX, unfortunately; on the other hand, it has no problems with dvipdfm. However, eepic not only recodes the features of epic, it also adds some additional functionality. If one wishes to invoke these extra features with a driver that does not recognize the graphics \specials, one can use the emulation package eepicemu instead. A comparison of the results with these two packages is shown in Figure 13.1 on the next page. In either case, one must load epic with one of eepic or eepicemu: \usepackage{epic,eepic} or \usepackage{epic,eepicemu} The following standard picture elements are modified by the eepic package: \line(∆x,∆y){length} (page 293) where ∆x and ∆y may take on any positive or negative integer values, and not just those between ±6. \circle{diameter} (page 295) may have any value for diameter; the same for \circle*. \oval (page 296) may have the maximum diameter of the corners set to any value; this is stored in the length \maxovaldiam which the user may change; the default value is 40 pt. Similarly, all the extra commands from epic package are also revised internally. The restrictions on slopes never apply directly to them, but lines of arbitrary slope are drawn with little segments at the nearest available slope, or as series of dots, requiring much computer time and 306 Chapter 13. Drawing with LATEX Figure 13.1: Comparison of results using the true eepic drawing functions (top) and those with the emulation in eepicemu (bottom). (This example is taken from the eepic user’s manual.) overloading the output file. With eepic, these lines are drawn more efficiently. Additional features added by eepic (and eepicemu, even if they do not work very well): \allinethickness{dimen} sets the line thickness to dimen for all picture elements, including circles, ovals, splines, not just for straight lines; \Thicklines sets thickness of straight lines to 1.5 times that of \thicklines; \path(x1 ,y1 )(x2 ,y2 ). . . (xn ,yn ) is a fast version of \drawline, without the stretch option; a solid line is always drawn; \spline(x1 ,y1 )(x2 ,y2 ). . . (xn ,yn ) draws a curve from the first to last point, with intermediate points as control points; \ellipse(x diam,y diam) draws an ellipse with horizontal and vertical sizes x diam, y diam respectively; there is also *-form to produce a solid ellipse; \arc{diameter}{start}{end} draws the arc of a circle with diameter (in \unitlength units) from angle start to end, in radians, clockwise from 0 pointing to the right; start must be from 0 to 2π , and end from start to start+2π . 13.3. Other drawing packages 13.3 307 Other drawing packages 13.3.1 The XY-pic package As indicated at the beginning of this chapter, an exhaustive description of many other specialized packages, for drawing or using METAFONT fonts, can be found in The LATEX Graphics Companion by Goossens et al. (1997). Most of these are designed for TEX in general, but will also work with LATEX. We mention two of these here just to show the possibilities. The XY-pic package can carry out general drawing entirely with extra METAFONT fonts, making it fully portable among all output drivers. The fonts are also available in type 1 coding (Section G.6) so that the package works just as well with PDF output. It was created by Kristoffer H. Rose and then extended by Ross Moore and others. Even an overview of XY-pic is beyond the scope of this book. We recommend the supplied User’s Guide and more extensive Reference Manual both to be found in texmf\doc\generic\xypic. The descriptions and illustrations in Chapter 5 of Goossens et al. (1997) are especially helpful. To give a flavor of the syntax in XY-pic, we give the following examples: \xymatrix{ U \ar@/_/[ddr]_y \ar@/ˆ/[drr]ˆx \ar@{.>}[dr]|-{(x,y)} \\ & X \times_Z Y \ar[d]ˆq \ar[r]_p & X \ar[d]_r \\ & Y \ar[r]ˆg & Z} \xy /r1.5pc/:,+<5pc,3pc>*+{P};p @(,+(2,2)*{+}@+, +(2,-2)*{+}@+ ,+(2,2)*{+}@+, +(2,0)*+{C}="C" ,*\qspline{},"C",**\crvs{.} ,@i @)\endxy that produce the diagrams: U x (x,y) y + # X ×Z Y p q %/ X r g P + __ _C + /Z Y The first example, with \xymatrix, organizes its contents in rows and columns, not dissimilar to the tabular environment. In this case, the first row contains U in the first column, and the rest are empty; the second row has an empty first column (starts with &, the column separator) while the next two columns contain X \times_Z Y and X; the third row also has an empty first column, with entries Y and Z in the remaining columns. Everything else describes how these nodes are connected. For example, 308 Chapter 13. Drawing with LATEX \ar@/_/[ddr]_y means ‘draw an arrow, curving down to the node located two down and one right, and subscript it with y.’ And so on for the other connections. The second example, with \xy. . . \endxy gives more complicated drawing instructions, placing objects at given coordinates, joining them with arrows, lines, curves. As can be seen from both of these examples, it takes some practice to learn the syntax and to exploit XY-pic fully. 13.3.2 PSTricks In Chapter 10 we describe how the PostScript language plays a very important role in TEX and LATEX by making a wide spectrum of fonts available to complement the original Computer Modern fonts. But PostScript is also a powerful plotting language. It was in order to exploit the PostScript possibilities directly that Timothy van Zandt wrote the PSTricks package for direct use within TEX, and thus within LATEX. Actually PSTricks consists of over a dozen packages. The complete functionality may be loaded with the package pstricks, or the individual packages may loaded singly. (Since PSTricks is really a TEX utility, the LATEX package pstricks.sty does nothing more than load the pstricks.tex file containing the actual code.) Some of these packages are: pst-3d pst-blur pst-char pst-coil pst-eps pst-fill pst-gr3d pst-grad pst-lens pst-node pst-osci pst-plot pst-poly pst-slpe pst-text pst-tree 3-D drawing adding blurred shadows stroking and filling character paths coil and zigzag objects export objects to EPS files adds \psboxfill command drawing 3-D grids gradient color fills simulating effect of a lens placing and joining nodes emulating oscilloscopes plotting data drawing polygrams improvement on pst-grad setting text along a path tree commands As with XY-pic, it is beyond the scope of this book on document production with LATEX to describe the extensive plotting features of PSTricks. We refer to Goossens et al. (1997), Chapter 4 for a description of most of these packages (some have been added since then) and otherwise to the supplied manuals and documentation to be found in texmf\generic\ source\pstricks. 14 Bibliographic Databases and BIBTEX In academic publications, a bibliography or list of references is standard procedure. In Section 9.3 we describe how a bibliography can be formatted with the thebibliography environment and how its entries are referred to within the text. Often authors find that they are constantly referring to the same publications in most of their own papers. Similarly, researchers working in the same field will frequently be referring to the same set of papers. This means that many of the entries in the thebibliography environment will be repeated from one work to the next, or even among co-workers at one institute. It would be very useful if the bibliographic entries could be stored in one database file once and for all to be available for all documents with a list of references in that field. Such a database system is possible with the BIBTEX program supplied with the LATEX installation. The information about the various publications is stored in one or more files with the extension .bib. For each publication there is a key that identifies it, and which may be used in the text document to refer to it. Such a file is called a bibliographic database. 14.1 The BIBTEX program BIBTEX is an auxiliary program to LATEX that automatically constructs a bibliography for a LATEX document by searching one or more databases. To this end, the LATEX file must contain the command \bibliography{database1, database2, . . . } at that point in the text where the bibliography is to appear. Here the argument database1, database2, . . . is a list of root names, separated by commas, of the bibliographic database files that are to be searched. The extension.bib is not explicitly written. Reference can be made to a publication in one of the databases at any place in the text with the commands 309 310 Chapter 14. Bibliographic Databases and BIBTEX \cite{key} \citep{key} \citet{key} as is explained in Sections 9.3.3 and 9.3.4. The key is the database identifier for that publication, which of course the user must know beforehand. After the first LATEX processing, the BIBTEX program must be run either by clicking the appropriate icon in the editor shell, or from a command line with bibtex plus the root name of the LATEX file. Supposing this source file name is comets.tex, the call bibtex comets produces a new file with the name comets.bbl, containing the extracted information for those publications for which there was a \cite reference, packaged in a thebibliography environment to be input into the document on the next LATEX run. Occasionally the bibliography is to include publications that were not referenced in the text. These may be added with the command \nocite{key} given anywhere within the main document. It produces no text at all but simply informs BIBTEX that this reference is also to be put into the bibliography. With \nocite{*}, every entry in all the databases will be included, something that is useful when producing a list of all entries and their keys. After running BIBTEX to make up the.bbl file, it is necessary to process LATEX at least twice to establish both the bibliography and the in-text reference labels. The bibliography will be printed where the \bibliography command is issued; it in fact inputs the.bbl file. The formatting of the bibliography may be selected with the declaration \bibliographystyle{style} which may be issued anywhere in the document. Its only function is to inform BIBTEX what bibliography style file (.bst) is to be loaded to determine the resulting format. Many contributed.bst files exist, designed for specific journals and publishing houses, and it is possible to create one’s own (Section 14.3). However, the supplied standard ones for numerical citation only are: plain The entries in the bibliography are ordered alphabetically; each is assigned a running number in square brackets as the in-text reference marker, printed where the \cite commands are issued. unsrt The entries are ordered according to their first references by the \cite and \nocite commands. The entry for the first \cite 14.2. Creating a bibliographic database 311 receives the number 1, that of the next \cite with a different key the number 2, and so on. The markings and listings are otherwise the same as for plain. alpha The ordering in the bibliography is the same as for plain but the markers are an abbreviation of the author’s name plus year of publication. A reference to Smith (1987) would appear as [Smi87] instead. abbrv The ordering and marking are the same as for plain, but the bibliographic listing is shortened by abbreviating first names, months, and journal names. For author–year citations and the natbib package (Section 9.3.4), there exist the bibliographic styles plainnat, unsrtnat, and abbrvnat, producing the same bibliography format as the corresponding standard styles, but with natbib compatibility. 14.2 Creating a bibliographic database Creating a bibliographic database might seem like more work than typing up a list of references with the thebibliography environment; the great advantage is that the entries need to be included in the database once and only once and are then available for all future publications. Even if a different bibliography style is demanded in later works, all the information is already on hand in the database for BIBTEX to write a new thebibliography environment in another format. In fact, we feel that even for a single document, it is simpler to make an entry into the database than to adhere to the very precise and fiddly requirements of a literature list, especially regarding punctuation and positioning of the authors’ initials. The database entry proceeds very quickly and easily if one has a generalized template, as illustrated in Section 14.2.6. The entries in a bibliographic database are of the form @BOOK{knuth:86a, AUTHOR = "Donald E. Knuth", TITLE = {The \TeX{}book}, EDITION = "third", PUBLISHER = "Addison--Wesley", ADDRESS = {Reading, Massachusetts}, YEAR = 1986 } The first word, prefixed with @, determines the entry type, as explained in the next section. The entry type is followed by the reference information for that entry enclosed in curly braces { }. The very first entry is the key 312 Chapter 14. Bibliographic Databases and BIBTEX for the whole reference by which it is referred to in the \cite command. In the above example this is knuth:86a. The key may be any combination of letters, numerals, and symbols, except commas. The actual reference information is then entered in various fields, separated from one another by commas. Each field consists of a field name, an = sign, with optional spaces on either side, and the field text. The field names shown above are AUTHOR, TITLE, PUBLISHER, ADDRESS, and YEAR. The field text must be enclosed either in curly braces or in double quotation marks. However, if the text consists solely of a number, as for YEAR above, the braces or quotation marks may be left off. For each entry type, certain fields are required, others are optional, and the rest are ignored. These are listed with the descriptions of the various entry types below. If a required field is omitted, an error message will occur during the BIBTEX run. Optional fields will have their information included in the bibliography if they are present, but they need not be there. Ignored fields are useful for including extra information in the database that will not be output, such as a comment or an abstract of the paper. Ignored fields might also be ones that are used by other database programs. The general syntax for entries in the bibliographic database reads @entry type{key, field name = {field text}, .... field name = {field text} } The names of the entry types as well as the field names may be written in capitals or lower case letters, or in a combination of both. Thus @BOOK, @book, and @bOOk are all acceptable variations. The outermost pair of braces for the entire entry may be either curly braces { }, as illustrated, or parentheses ( ). In the latter case, the general syntax reads @entry type(key, ... ... ) However, the field text may only be enclosed within curly braces {...} or double quotation marks "..." as shown in the example above. 14.2.1 The entry types The following is a list of the standard entry types in alphabetical order, with a brief description of the types of works for which they are applicable, together with the required and optional fields that they take. The meanings of the fields are explained in the next section. @article Entry for an article from a journal or magazine. required fields author, title, journal, year. optional fields volume, number, pages, month, note. 14.2. Creating a bibliographic database 313 @book Entry for a book with a definite publisher. required fields author or editor, title, publisher, year. optional fields volume or number, series, address, edition, month, note. @booklet Entry for a printed and bound work without the name of a publisher or sponsoring organization. required fields title. optional fields author, howpublished, address, month, year, note. @conference Is the same as @inproceedings below. @inbook Entry for a part (chapter, section, certain pages) of a book. required fields author or editor, title, chapter and/or pages, publisher, year. optional fields volume or number, series, type, address, edition, month, note. @incollection Entry for part of a book that has its own title. required fields author, title, booktitle, publisher, year. optional fields editor, volume or number, series, type, chapter, pages, address, edition, month, note. @inproceedings Entry for an article in conference proceedings. required fields author, title, booktitle, year. optional fields editor, volume or number, series, pages, address, month, organization, publisher, note. @manual Entry for technical documentation. required fields title. optional fields author, organization, month, year, note. address, edition, @mastersthesis Entry for a Master’s thesis. required fields author, title, school, year. optional fields type, address, month, note. @misc Entry for a work that does not fit under any of the others. required fields none. optional fields author, title, howpublished, month, year, note. @phdthesis Entry for a PhD thesis. required fields author, title, school, year. optional fields type, address, month, note. 314 Chapter 14. Bibliographic Databases and BIBTEX @proceedings Entry for conference proceedings. required fields title, year. optional fields editor, volume or number, series, address, month, organization, publisher, note. @techreport Entry for a report published by a school or other institution, usually as part of a series. required fields author, title, institution, year. optional fields type, number, address, month, note. @unpublished Entry for an unpublished work with an author and title. required fields author, title, note. optional fields month, year. Each entry type may also have the optional fields key and crossref. The former provides additional information for alphabetizing the entries, especially when the author information is missing. The author information is normally found in the author field but may also be in the editor or even organization fields. This key field has nothing to do with the key for identifying the entry in the \cite command. The crossref field gives the key for another entry in the database that shares many of the information fields, as illustrated in Section 14.2.3. 14.2.2 The fields The fields that may be used within a bibliographic entry are listed below together with their meanings. They are always given in the form: field name = {field text} field name = "field text" or address The address of the publisher or other institution. For major publishing houses, it is sufficient to give just the city. For smaller publishers, giving the full address is recommended. annote An annotation that may be used by non-standard bibliography styles to produce an annotated bibliography. The standard BIBTEX styles ignore it. author The name(s) of the author(s) as described in Section 14.2.4. booktitle The title of a book when only part of it is being cited. Section 14.2.4 for special considerations on capitalization. chapter A chapter or section number. See 14.2. Creating a bibliographic database 315 crossref The key of another entry in the database that shares many of the same field entries. See Section 14.2.3. edition The edition of a book, usually written in full and capitalized, as ‘Second’. The standard styles will change it to lower case as necessary. editor The name(s) of the editor(s) as described in Section 14.2.4. If there is also an author field, then this gives the editor of the book or collection in which the citation appears. howpublished States anything unusual about the method of publishing. Should be capitalized. Example: ‘Privately published’. institution The name of the sponsoring institution for a technical report. journal The name of a journal or magazine. Abbreviations are provided for the most common ones (see Section 14.2.5). key An addition for alphabetizing purposes when the author information is missing. This is not the same as the key for identifying the entry to a \cite command. month The month in which the work was published or, if unpublished, when it was written. Abbreviations exist in the form of the first three letters of the (English) names. note Any additional information that should be added. Capitalize the first letter. number The number of a journal, magazine, technical report, or work in a series. Journals are usually identified by volume and number; technical reports are issued a number by the institution; books in series sometimes have a number given to them. organization The sponsoring organization for a conference or a manual. pages A page number or a range of pages, in the form 32,41,58 or 87--101 or 68+. The last form indicates page 68 and following pages. A single hyphen given for a range will be converted by the standard styles to the double hyphen to produce a dash, as ‘87–101’. publisher The publisher’s name. 316 Chapter 14. Bibliographic Databases and BIBTEX school The name of the academic institution where a thesis was written. series The name of a series or set of books. When citing a book from a series, the title field gives the name of the book itself while the optional series specifies the title of whole set. title The title of the work, obeying the capitalization rules listed in Section 14.2.4. type The type of technical report, for example, ‘Research Note’. url The universal resource locator, or Internet address, for online documents; this is not standard but supplied by more modern bibliography styles. volume The volume number of a journal or multi-volume book. year The year in which the work was published or, if unpublished, in which it was written. It should normally consist of four numerals, such as 1993. Additional field names may be included, which BIBTEX will simply ignore. For example, to add the abstract of an article in the database, abstract = {text of an abstract} This can be of use in other applications as well as for database management. 14.2.3 Cross-referencing fields If many entries in the bibliographic database share a common set of field information, such as for a number of works all appearing in the same conference proceedings, it is possible to refer to another entry containing that common set with the crossref field. For example, @INPROCEEDINGS{xyz-1, crossref = {xyz-proceedings}, author = {J. S. Jones}, title = {The First Results from the {Appleville Experiment}}, pages = {34--38} } . . . . . . . . . . . . . @PROCEEDINGS{xyz-proceedings, editor = {C. H. Kelvin}, title = {Proceedings of the First Conference on the {Appleville Experiment}}, booktitle = {Proceedings of the First Conference on the {Appleville Experiment}} year = 1991 } 14.2. Creating a bibliographic database 317 The first entry, with key xyz-1, is to obtain all its missing fields from the second entry, by means of the crossref field referring to the entry with key xyz-proceedings. The missing fields are editor, booktitle, and year, those that are common to all articles in the conference proceedings. Note that booktitle is an ignored field for @PROCEEDINGS but needs to be included here since it is required for @INPROCEEDINGS. If an entry is referred to by two or more other entries, then it too will be included in the bibliography, even though its key never appeared as the argument of a \cite or \nocite command. In order for this system to function properly, the entry that is referred to must appear in the database(s) after all those that refer to it. It is therefore recommended to put all such referenced entries at the end of the database. Cross-references may not be nested. 14.2.4 Special field formats There are some special rules for entering the texts to the fields author, editor, title, and booktitle. BIBTEX will process names, putting surnames first, abbreviating given names with initials, and so on, according to the instructions in the style file. Thus it is important that the program knows what is a given name and what a surname. Similarly for titles, capitalization may change depending on style and/or entry type, so BIBTEX must know what words are always capitalized. Names The names in the author and editor fields may be typed in either in the form {Given Names Surname} or as {Surname, Given Names}. That is, BIBTEX assumes that if there is no comma the last capitalized name is the surname, or family name; otherwise what comes before the comma is taken to be the surname. Thus the name texts "John George Harrison" and "Harrison, John George" are equivalent for Mr J. G. Harrison. However, if a person has a double surname, without a separating hyphen, the second form must be employed, or the double name must be enclosed in braces, as "San Martino, Maria" or "Maria {San Martino}" for Ms M. San Martino. Auxiliary words to a surname that are not capitalized, such as von or de, may be entered in either form: "Richard von Mannheim" or "von Mannheim, Richard" "Walter de la Maire" or "de la Maire, Walter" Anything enclosed in braces will be treated as a single item, something that is used in ambiguous cases, or when the name contains a comma or the word and. An example is 318 Chapter 14. Bibliographic Databases and BIBTEX "{Harvey and Sons, Ltd}" If the name contains a Junior or some other addition, it must be entered {Surname, Junior, Given Name}, for example as "Ford, Jr, Henry" or "Ford, III, Henry" However, if there is to be no comma, then the Jr must be treated as part of a double surname, something that is not recommended at all: "{Filmore Jr}, Charles" or "Charles {Filmore Jr}" Accents within a name formed with a backslash command should be enclosed in braces with the backslash as the first character after the opening brace. In this way, the alphabetization and the formation of labels with the alpha bibliography style will function properly. For example, author = "Kurt G{\"o}del", year = 1931 will produce the label [Göd31] as desired. The accent text must not be enclosed any deeper than shown here. Accents should be formed with the backslash command for most generality. Some language modifications have shorthands for accented letters (like "a instead of \"a for German) but these should be avoided in the database to ensure that the results will be universally understood. Hyphenated first names are properly abbreviated. Thus "Jean-Paul Sartre" becomes ‘J.-P. Sartre’. If an author or editor field is to contain more than one name, the names are separated by the word and. For example, author = "Helmut Kopka and Daly, Patrick William" or AUTHOR = {Peter C. Barnes and Tolman, Paul and Mary Smith} If the and is actually part of the name, the whole name must be enclosed in braces, as pointed out above. Do not insert any ˜ characters between names or initials; BIBTEX will do this automatically as it deems fit. If only initials are given for the authors given names, insert a blank between them, as P. W. Daly, not P.W. Daly. The latter will be interpreted as a single given name and will be abbreviated as ‘P. Daly’ If the author list is too long to type in all the names, it may be terminated with and others. This will be converted to the form of et al. prescribed in the style file. Titles The capitalization of the title depends on the bibliography style: usually book titles are capitalized while article titles are not. The text in the fields 14.2. Creating a bibliographic database 319 title and booktitle should be written in the capitalized form so that BIBTEX can change to lower case as required. The general rules for capitalizing titles in English state that the first word of the title, the first word after a colon, and all other words are capitalized except articles and unstressed prepositions and conjunctions. For example: title="The Right Way to Learn: A Short-Cut to a Successful Life" Words that are always to be capitalized, such as proper nouns, must be enclosed in braces. It is sufficient to enclose only the letter that must be capitalized. The two following examples are equivalent: title = "The {Giotto} Mission to Comet {Halley}" or TITLE = {The {G}iotto Mission to Comet {H}alley} 14.2.5 Abbreviations It is always possible to use an abbreviation in the field text in place of actual text. Some abbreviations, such as the names of the months and some standard journal names, are already available, and the user is free to define new ones for his or her personal use. The name of an abbreviation consists of any combination of letters, numbers, and symbols except " # % ’ ( ) , = { } An abbreviation is defined with the command @string{abbrev name = {text}} @string(abbrev name = {text}) or where abbrev name stands for the name of the abbreviation and text is the replacement text. For example, if the abbreviation @string{JGR = {Journal of Geophysical Research}} has been defined, the following two field statements are identical: journal = JGR journal = {Journal of Geophysical Research} The name of the abbreviation is not enclosed in braces or double quotes, otherwise the name itself will be interpreted literally as the field text. In both the @string command and the name of the abbreviation, the case of the letters is unimportant. The above abbreviation could just as well be defined as or @STRING{jgr = {Journal of Geophysical Research}} @StrinG{jGr = {Journal of Geophysical Research}} 320 Chapter 14. Bibliographic Databases and BIBTEX and it may be referred to in the fields as JGR, JGr, JgR, Jgr, jGR, jGr, jgR or jgr. Abbreviations may be concatenated with the symbol # between them. Thus after giving @string{yrbk = {Institute Yearbook}} this abbreviation may be combined with other abbreviations and text, as in title = "Max-Planck˜" # yrbk # 2000 to produce ‘Max-Planck Institute Yearbook 2000’. Standard abbreviations exist for the months of the year, the names consisting of the first three letters of the name, as jan, feb, etc. These are actually included within the .bst file, and can change their definition for styles intended for other languages. However, the name of the abbreviation remains the same, the first 3 letters of the English name. Further predefined abbreviations are available (in the .bst file) for some standard journal names. Those produced with custom-bib are especially extensive. See Section 14.3. The @string commands may be issued anywhere in the database between two bibliographic entries, but must already be defined before they are used. Therefore, it makes most sense to insert all the abbreviation definitions at the beginning of the database file. 14.2.6 Using a template Typing in the text for bibliographic entries into a database might seem to be rather complicated since there are so many things to remember, such as which fields are required and which are optional, what their formats are, and so on. One way to simplify this task is to make up templates for the most common entry types that you use. A template is basically a complete entry with all the fields left blank. It is stored in a separate file on its own, to be inserted into the database file whenever a new entry of that type is to be made. Then the field texts are written in. An appropriate template for the entry type @article could be @ARTICLE{ , AUTHOR = {}, TITLE = {}, YEAR = {}, JOURNAL = {}, volume = {}, number = {}, month = {}, pages = {}, 14.3. Customizing bibliography styles note 321 = {} } in which the is a reminder that the keyword is to go here, the required fields come first and are capitalized, while the optional fields are in lower case. Finally, we mention that BIBTEX has been written by Oren Patashnik, Stanford University, in close association with Leslie Lamport. The BIBTEX installation should contain the two files btxdoc.tex and btxhak.tex for additional information about BIBTEX. In particular, btxhak.tex contains instructions for writing bibliographic style files. Process these files with LATEX, if the resulting.dvi or.pdf files are not already there. 14.3 Customizing bibliography styles It seems that every journal and publishing house has its own set of rules for formatting bibliographies. The differences are really minor, such as whether to use commas or colons here, or to put volume numbers in bold or italic typeface. Nevertheless, in spite of this triviality, the rules are rigid for each house. Standard LATEX provides only four bibliography styles, and their differences have more to do with sorting and labeling than with such fussy details. It is possible to design one’s own .bst file, by modifying existing ones; however, this requires a knowledge of the peculiar BIBTEX programming language, something that puzzles even experienced LATEX users. There are some 50.bst files in the BIBTEX directories of the TEX file servers, and probably many more in contributed LATEX directories. Each is designed for a specific journal and there is no guarantee that it would be accepted by another one. What is a user to do if his or her publisher demands a certain format that just is not to be found? How can one seek a given format anyway among those offered? Some help can be found in the custom-bib application written by Patrick W. Daly. The heart of this package is a generic (or master) bibliography style merlin.mbs containing alternative coding for a multitude of different bibliographic features or options. It is processed with the DocStrip program which is capable of including alternative coding according to selected options (see Section D.7.1). Because of the large number of options offered (well over 100), a menuguided interface is provided, called makebst.tex. When processed under TEX or LATEX, this ‘program’ first asks which .mbs file is to be read, and then interactively constructs a DocStrip batch job to produce the selected bibliographic features according to menu information contained in the .mbs file itself. This means that there could be a number of .mbs files 322 Chapter 14. Bibliographic Databases and BIBTEX to choose from, each one explaining its set of options to the user via makebst. Support for other languages is provided by means of additional .mbs files, one for each language, which contain the translations for such words as volume, editor, edition, and so on. Some of the features provided by the supplied generic bibliographic style file are: • numerical or author–year citations; in the latter case, one may also choose which \bibitem style is to be used; • order of references: by citation order, alphabetical by all authors, alphabetic by author–year label; • format of authors’ names: first name plus surname, initials plus surname, surname plus initials, reversed initials only for first author, and more; • number of author names to include before giving et al.; • typeface to be used for the author names; • position of date, parentheses or brackets around the year; • format of volume, number, and pages for journals; • capitalization of article titles as sentence or title style; • whether to use the word and or an ampersand &; • placement of commas with the word and; • whether to abbreviate editor, volume, chapter, etc.; • first and last page numbers or only first; • optional addition of shorthand designations of common journal names; • and much more. Abbreviations for many journal names in physics, optics, and geophysics can be provided in those .bst files produced by custom-bib, which then may be used in BIBTEX databases. It is unfortunate that these are to be found in the .bst files themselves, which means that they may not be universally present. Which ones are present depends on the options chosen by the producer of the style file. The file shorthnd.tex in the custom-bib installation lists all the current possible abbreviations. (Actually, it is generated by running LATEX on shorthnd.ins, which then produces the most current list from the existing .mbs files.) To check what any particular .bst file contains, open it and look for the MACRO commands. Presentation Material 15 So far we have been assuming that the output of a LATEX project is to be printed paper or an electronic document looking like printed paper displayed on the computer monitor. Another important type of output is presentation material, the visual support displayed in front of an audience during an oral presentation. Traditionally, this consisted of a set of slides to the projected onto a screen, but in more recent times this has been replaced by viewgraphs (or transparencies) and an overhead projector, giving the speaker much more interactive control over the presentation. However, the truly modern presentation is done electronically, with the entire presentation stored in a computer directly connected to the projector; there are no slides to fall out of the cassette, or be inserted the wrong way around, no viewgraphs to spill out onto the floor. The only thing that can go wrong is that the computer refuses the connection, needs rebooting, or the necessary display program is missing. Such teething problems are occurring less frequently now that this form of presentation is becoming standard. In spite of the change in medium away from the 200 × 200 pieces of film, a computer presentation is still called a slide show, a term which today presupposes the electronic medium. We will use the word slide more generally to mean a page of text and/or graphics for presentation, whether it is to be printed on paper and then photographically rendered to film or transparency, or to be directly projected from the computer. The preparation of such a slide with LATEX is much the same regardless of the final projection method; direct projection does offer additional features which we also address. We start this chapter with the standard LATEX method for slide preparation, the slides class, and then describe the far more advanced seminar class (Section 15.2). The latter is especially suitable for interesting PDF electronic presentations. We then illustrate pdfscreen (Section 15.3), a package designed more for documents meant for electronic viewing but which can also produce slides. Finally we show in Section 15.4 how PDF presentations may be enhanced with the help of an additional program. 323 324 Chapter 15. Presentation Material 15.1 Slide production with SLITEX The term SLITEX was used in the old LATEX 2.09 system to indicate a separate specialized version of LATEX for producing projection material. This awkward and cumbersome device was needed then because of the way fonts were hardwired into the formats. With LATEX 2ε , this is no longer necessary, and the entire functionality is now found within the slides class, considerably streamlined over the obsolete version, running under regular LATEX, or pdfLATEX. The word SLITEX therefore should be retired, but since is is a nifty expression, we will continue to use it to distinguish the slides class, which is considerably different from article and the other standard classes. 15.1.1 The slides class A slide is meant to be projected before an audience and is therefore something quite different from a sheet of paper to be read held in the hand. One could of course make up the text for slides with the normal LATEX commands, but there would be problems getting the font size right, arranging overlays, making sure that the text does not change pages unexpectedly, and the question of whether book-style fonts are suitable for projection. The LATEX class slides attempts to solve these. A different set of fonts is used by this class, ones in which the lower case letters are relatively larger than in the normal fonts, and with a much bigger base size. This has the effect of limiting the amount of text that fits on one page/slide, but this is in fact very good practice for presentation material. The text really should be restricted to keywords and abbreviated sentences. A full page of normal text projected on to a screen will not be read by the audience. One is not obliged to use the built-in fonts; one may still select other (sans serif) font packages, such as helvet for Helvetica (Section 10.1.2) as one pleases. They will be used in larger sizes than usual. Slides should also make use of color. The original SLITEX had a complicated method for producing color overlays (in black and white, to be copied in color) which now is totally eliminated from the slides class. Instead, one simply makes use of the color package of Section 6.2. Most of the formatting commands of regular LATEX may be used with slides, except for the page breaking and sectioning commands. The special features that are unique to this class are described in the next sections. 15.1.2 The slide environments The source file for producing slides is structured much the same as that for a normal document, except that it is the slides class that is invoked 15.1. Slide production with SLITEX 325 as \documentclass{slides} preamble text \begin{document} slide text \end{document} If colors are wanted the color package of Section 6.2 must be added, for example as \usepackage[pdftex]{color} (You will have to specify your own driver as the option here, or rely on the local configuration to give it automatically, as is usually the case.) The preamble may contain global specifications, for changing the paper size or selecting a page style, as usual. It may not contain any printable material. Any text that appears after \begin{document} but before the special slide environments described below is output to an unnumbered leading page that comes before any slides. This may serve as a cover page for the slides. There are three environments available for organizing different parts of a slide: the main slide itself, possible overlays, and additional notes to the slide. Slides A slide or viewgraph is created by means of the environment \begin{slide} text and commands \end{slide} The contents of a slide environment may be any text that one pleases. Note that the slides class makes use of its own set of character fonts. The standard font in the normal size is roughly equivalent to the LATEX sans serif font \sffamily in the size \LARGE. All the regular font commands and declarations of Section 4.1 are available, along with the other display and list environments of Chapter 4. However, there can be no page breaks within the environment, for the entire text is expected to fit on one page (slide or viewgraph). The successive slide environments will be numbered consecutively. If the page should overflow, a warning message is printed. Any color commands from the color package may be employed, if that package has been loaded. Overlays An overlay is an addition to a slide that can be laid on top of it to fill in certain gaps. The idea is to create suspense during a presentation, by 326 Chapter 15. Presentation Material filling in some key words a few minutes later, or to be able to replace some text by alternatives. The slides class generates overlays with the overlay environment, which functions exactly the same as the slide environment, except that the numbering is done as a sub-number of the last slide. Thus the overlays following slide 6 are numbered 6-a, 6-b, and so on. \begin{overlay} text and commands \end{overlay} The slide environment for a viewgraph that is to have overlays must come before the overlay environments that go with it. Both the slide and overlay should contain identical texts, except that certain parts are printed in ‘invisible’ ink by means of the two declarations \invisible and \visible These two commands function just like font declarations. They may be set within curly braces {} to limit their scope, or used to apply to the whole environment. Normally, in the slide, a few words might be made invisible, while in the corresponding overlay, \invisible is declared at the start and only those words that were blanked out in the slide are made visible. This may be seen in the sample on page 329. Note: the \invisible command does not work with fonts other than the default ones, nor with pdfTEX. However, for pdfTEX, there are better methods to achieve the same results (Section 15.4.1). One application for overlays is to present alternative text. One might, for example, show a table of cost estimates, with the figures on an overlay. By exchanging this overlay for another, new numbers that can be achieved by certain procedural changes may be fitted into the same table. Notes During a presentation, it is often necessary to refer to a list of keywords or other notes between the actual projected slides. The slides class has the note environment for producing such reminders for the speaker. \begin{note} text \end{note} Like the overlays, notes are sub-numbered with respect to the previous slide, but with numbers instead of letters. Following slide 4, notes are numbered 4-1, 4-2, and so on. 15.1.3 Further features Page styles The LATEX command \pagestyle{style} may also be used with the slides class. The following styles are available: 15.1. Slide production with SLITEX plain 327 All slides, overlays, and notes have their number at the lower right corner. headings The same as plain except that if the clock option is selected (see below), a time marker is printed in the lower left corner of the notes. This is the default page style. empty The sheets are printed with no page numbers. In normal LATEX, the command \pagestyle is issued in the preamble and is valid for the whole document. Individual pages may be given a different style by means of the \thispagestyle command which remains in effect for only one page. This command should not be employed within one of the environments, but rather a new \pagestyle command may be given outside of the slide, overlay, and note environments. Timing notes The option clock can be selected with \documentclass; it activates two additional commands: \settime{secs} \addtime{secs} and prints the time in minutes at the bottom of each note. In this way, the notes contain a reminder of how far advanced the presentation should be at that point. The value of the time marker is set and incremented with the above two commands, which take a number in seconds as argument. The initial value of the timer is 0. Selective slide processing During the construction of a slide show, one is likely to spend considerable time working on individual slides, ignoring the others for the time being. Complicated slides need to be corrected, processed, and viewed. One can speed this up by selecting only a few slides for processing, by placing the command \onlyslides{slide list} in the preamble. The slide list stands for a list of slide numbers in ascending order, for example, 2,5,9-12,15, specifying the slides, or range of slides, that are to be processed. Non-existent slide numbers may also appear in the slide list. If the slide file contains, say, 20 slides, the command \onlyslides{1,18-999} will allow only slides 1 and 18–20 to be processed. Any overlays that belong to these slides will also be output. Finally, the command 328 Chapter 15. Presentation Material \onlynotes{note list} in the preamble limits the notes that are output to those listed in note list. Supposing that slide 5 has three note environments associated with it, \onlynotes{5} arranges that only the note pages 5-1, 5-2, and 5-3 are printed. The \onlyslides and \onlynotes commands function similarly to the command \includeonly described in Section 9.1.2. An interactive means of selecting slides and notes to process may be set up exactly as illustrated in Section 9.1.3 with the \typein command: \typein[\slides]{Which slides to do?} \onlyslides{\slides} During processing, the message ‘Which slides to do?’ is typed to the monitor, and the user replies with the desired slide numbers. A similar scheme may be set up for \onlynotes. A sample slide file An example of input text with the slides class, with a leading page, overlay, and note, and using the clock option, is given here. The fourpage result is shown on the opposite page. \documentclass[a4paper,clock]{slides} \begin{document} \begin{center}\Large\bfseries Sample Viewgraphs \end{center} \begin{slide} \begin{center}\large Advantages of \texttt{slides}\end{center} \begin{itemize} \item Uses special fonts \item Forces key words instead of long text \invisible \item Supports color layers \visible \end{itemize} Color commands may be used {\invisible as color layers} \end{slide} \begin{overlay} \invisible \begin{center}\large Advantages of \texttt{slides}\end{center} 15.1. Slide production with SLITEX The Leading Page 329 The Slide Page Advantages of slides • Uses special fonts Sample Viewgraphs • Forces key words instead of long text Supports color layers Color commands may be used as color layers 1 The Overlay Page The Note Page Advantages of slides Uses special fonts Forces key words instead of long text Add the overlay only for LATEX 2.09 • Supports color layers Color commands may be used as color layers 1-a 5 min 1-1 330 Chapter 15. Presentation Material \begin{itemize} \item Uses special fonts \item Forces key words instead of long text \visible \item Supports color layers \invisible \end{itemize} Color commands may be used {\visible as color layers} \end{overlay} \addtime{300} \begin{note} Add the overlay only for \LaTeX˜2.09 \end{note} \end{document} 15.2 Slide production with seminar The slides class of the previous section some basic support for the production of presentation material. To improve on this, Timothy van Zandt has written the seminar class with many additional features. This was originally meant as a ‘main style’ for LATEX 2.09, but has been upgraded to a LATEX 2ε class file by Sebastian Rahtz with fixes by David Carlisle and Denis Girou. They only changed the interfacing so that it would work as a class file, leaving the functionality untouched. Unfortunately, the supplied manual for seminar (sem-user.tex) has not been updated, and is still couched in the language of LATEX 2.09; in particular it confuses packages and ‘style options’. We will try to correct this here. If seminar is being used for PDF output, as for an electronic presentation, it is vital to include Sebastian Rahtz’ hyperref package (Section 10.2.4), which detects the presence of seminar and adjusts the PDF page sizes accordingly. This should be done even if no other hyperref features are utilized. There are some other refinements to make seminar function smoothly with pdfTEX, explained in Section 15.2.7. 15.2.1 Overview The seminar class is loaded as usual with \documentclass[options]{seminar} Here we summarize its main features which differ from SLITEX. 15.2. Slide production with seminar 331 • The slide material is put into the slide environment, for landscape slides, and in slide* for portrait slides. • Regular Roman fonts are used, but this can be changed. The options semhelv and semlcmss switch to sans serif family with the PostScript Helvetica and the standard SLITEX fonts, respectively. • Regular font sizes are used, with default 10 pt as usual. However, the slide text is magnified on output to make it more suitable for projection; the magnification factor can be set, but the default is a factor of 2, so the effective default font size is 20 pt. • A slide is started automatically when the current one is full, or may be forced with the \newslide command; the entire slide show could therefore be contained within a single slide environment. • There is a choice of framing style for the slide text; the framing may be turned off with \slideframe{none} in the preamble. • Everything outside of the slide or slide* environments counts as note text. The notes are printed on separate pages, numbered n.1, n.2, . . . , for those following slide number n. • The options slidesonly, notes, and notesonly control whether only the slides, both slides and notes, or only the notes are printed. By default, both are printed. • With the article option (not to be confused with the class of the same name), the slide show is printed in miniature form, 2 per page, appropriate for reviewing or as a handout. There is a notesonly* option to be used with article to indicate the missing slides. We now explain these features in more detail. 15.2.2 Magnification and lengths Rather than using enlarged fonts as does SLITEX, seminar works with ‘normal’ sizes, which are then magnified at output. One can set the magnification step with \slidesmag{num} in the preamble, where num is an integer between −5 and 9. Step 0 is one-to-one, and each step indicates an additional factor of 1.2. The default is step 4 (factor 2). By default, the basic font size is 10 pt, but this may be altered with the usual options 11pt and 12pt. All these are magnified on output. The font size can be changed at any point in the document with \ptsize{pt}, where pt can be one of 8, 9, 10, 11, 12, 14, or 17. If this is given within a slide environment, it applies only within that environment. 332 Chapter 15. Presentation Material The article option produces a handout, with 2 slides per page, using a separate magnification which is set with \articlemag{num}; the default step is 0, no magnification. The output magnification applies to all sizes and lengths. This means, any lines drawn with \rule or spaces inserted with \hspace or \vspace are also magnified if they specify absolute units like pt or in. The size of the slide itself remains unchanged by the magnification, since the purpose is only to increase the size of the contents relative to the slide. To set lengths to values that remain fixed relative to the slide dimensions, use \setslidelength and \addtoslidelength in place of \setlength and \addtolength. For example, \newlength{\fixed} \setslidelength{\fixed}{3in} \addtoslidelength{\fixed}{1cm} \rule{1pt}{\fixed} draws a line of height 1 pt × magnification and of fixed length 3 in + 1 cm. For the article output, there are also the corresponding commands \setartlength and \addtoartlength The following length commands are slide lengths (do not magnify) and may be used wherever a length is required: \semcm \semin \textwidth \textheight \linewidth 1 centimeter 1 inch width of the text area height of the text area current width of text These are particularly useful with the \includegraphics command and its options width= and height=. 15.2.3 Landscape and portrait slides In contrast to SLITEX, the seminar class allows landscape and portrait slides to be mixed. However, there are several aspects that need to be considered. The slide and slide* environments determine whether the contents should be in landscape or portrait slides, but the actual placement will only be correct when it agrees with the orientation of the entire document, as specified by the options landscape and portrait. That means, when the landscape option is chosen, the landscape slides will be properly formatted, but the portrait ones not. The reverse applies with the portrait option. What one must do is to print the landscape and portrait slides separately, each with the appropriate option, and with the \landscapeonly or \portraitonly command in the preamble. 15.2. Slide production with seminar 333 When using the dvips driver, one can print the landscape and portrait slides together by including the option semrot, which ensures that the portrait slides are rotated into the landscape orientation. The entire document (slide show) can be printed in one go. The portrait sheets are then manually rotated to the correct orientation. This would not be acceptable for a PDF electronic presentation, where one wants the two orientations to be mixed in one file, with the text always upright. Another solution for pdfTEX is given is Section 15.2.7. When printing both orientations together with the semrot option, the head and footlines will not normally be rotated with the text for portrait slides. This can be corrected by issuing \rotateheaderstrue. In this way, the output is the same as when one prints landscape and portrait slides separately. Selecting landscape orientation in itself does not force the output printer to go into landscape mode; it only sets the page dimensions so that the text is written along the longer side. The printer is informed about the landscape intentions either by a switch when the file is sent to it, or by an option to the DVI driver. Again, dvips can get around this, as explained on page 232. Using seminar and dvips, one should define \renewcommand{\printlandscape}{\special{landscape}} to allow the class to instruct the printer to go landscape when necessary. This also avoids the warning message on processing that the output must be printed in landscape mode. 15.2.4 Slide formatting Here we describe the various ways to control the size, layout, and other formatting aspects of the slides. Slide size By default, the paper size is American letter size, 11 × 8.5 in, and the slide dimensions (slide writing area) are 8.5 × 6.3 in. By specifying the a4 option the paper size becomes 29.7 × 21 cm and the slide dimensions 22.2 × 15.2 cm. (The a4paper option exists, but may cause an error.) The slide size may be altered temporarily as optional arguments to the slide and slide* environments, as for example, \begin{slide}[10cm,7cm] \begin{slide*}[7cm,10cm] Both of the above produce a slide 10 cm wide and 7 cm high. 334 Chapter 15. Presentation Material Margins Normally the material within a slide is centered vertically. The declaration commands \centerslidefalse and \centerslidetrue turns this centering off and on, respectively. Without centering, the text is pushed to the top of the slide. The text is left justified by default, with a ragged right margin. This can be changed with \raggedslides[len] where len is the maximum space between the end of the line and the right margin. Omitting len produces a ragged right margin, while a value of 0 pt yields right justification; giving 2 em, say, creates a semi-ragged margin. The margins between the slide area and the edge of the page are set with the commands \slideleftmargin \slidetopmargin \sliderightmargin \slidebottommargin which are all set initially to 0.6 in. Since these are commands, not lengths, they must be changed with \renewcommand. Framing The slide area can be framed, the default being a rectangular box like that produced by \fbox (which is exactly what it is). The frame style can be chosen with \slideframe[cmds]{style} The possible values for style are plain (the default) or none. The optional cmds are settings to adjust the frame parameters, such as \fboxrule and \fboxsep. By including the fancybox package, one also has shadow, double, oval, and Oval as allowed values for style, with their corresponding parameters (Section 4.7.9). All frames make use of the lengths \slideframewidth and \slideframesep for the frame thickness and separation from text. These may only be altered (with \setlength) outside the \slideframe command; in the optional cmds, one must alter \fboxrule and \fboxsep directly. It is possible to define one’s own frame style with \newslideframe{new style}[cmds]{\box cmd{#1}} 15.2. Slide production with seminar 335 where new style is the name of the new style (for use with \slideframe), cmds are box parameter settings, and \box cmd is a box command, like \fbox or \shadowbox. There is a semcolor option for seminar, but this is not based on the LATEX color package, but depends on PostScript and the dvips driver. With the color package, one can make use of the \color and \textcolor commands for setting text in color, as well as \colorbox and \fcolorbox for colored boxes and \pagecolor to color the whole page (page 167). Two examples for defining color frame styles are \newslideframe{gplain}{\fcolorbox{green}{white}{#1}} \newslideframe{rshadow}[\color{red}]% {\shadowbox{\color{black}#1\color{red}}} The first makes use of the color frame box command \fcolorbox, while the second shows a trick to combine color commands with \shadowbox, which normally prints a black shadow box. The two \color{red} commands ensure all sides of the box are in red, while the \color{black}#1 puts the box’s contents in black. Page styles Page styles determine how the running head and footlines appear on each page, just as in normal text. The regular LATEX page style of Section 3.2 (plain, empty, myheadings, and headings) are all available, and the default is plain, with the page/slide number centered in the footline. A different page style may be selected with \pagestyle{style} at any time, or with \thispagestyle{style} for just the current page. There is also an additional page style align that puts + marks at the four corners. You can define your own page styles with \newpagestyle{style}{headline}{footline} \renewpagestyle{style}{headline}{footline} which is preferable to using the styles in the fancyhdr package of Section 3.2.2 since that cannot handle the magnified lengths correctly. For example, to define a page style with a centered text in the head, and a footline with a text at the left and the slide number at the right, give \newpagestyle{mystyle}% {\hfill Report\hfill}% {March 20, 2004\hfill\thepage} Note here that \thepage prints the number for the current page, whereas \theslide and \thenote refer to the latest slide and note numbers respectively; \thepage is always set to whichever of them is being printed. 336 Chapter 15. Presentation Material Font commands can be included in the new definitions, but one should be aware that the commands \slideheadfont and \slidefootfont are always inserted into the head and footlines. These are defined to be \scriptsize, but may be redefined by the user. It is possible to select different page styles for the slides and notes. The \pagestyle command sets the style for both (as well as for the article output) while \slidepagestyle applies only to slides. Page breaking Unlike SLITEX where each slide environment generates a single slide (and warnings if it is too big), the seminar package allows the text to break naturally into multiple slides just as normal text does into pages. A new slide may be forced with \newslide. You can add some extra tolerance for the page breaking by specifying \extraslideheight{len} where len is the additional height allowed before a break in automatically inserted. By setting this to be large, automatic page breaks never occur, and the user has full control, either with \newslide or by ending the environment. Setting it to 0 pt causes pages to be broken as for regular text. The default is 10 pt. 15.2.5 Selective output One can select to output just the slides, or just the notes, or both, by adding one of the options slidesonly, notesonly, or notes to the \documentclass command. There is also a notesonly* option to print the notes alone in article output but with indicators for the slides. A problem arises if slidesonly has been selected. Any global specifications issued after \begin{document} and outside of a slide environment will be ignored. One might want to redefine parameters in this way; including them inside the slide environment makes the changes local to that one environment. To avoid this, such global commands should be placed inside a allversions* environment. (If you actually want to include text and not just non-printing specifications, use the allversions environment instead.) Just as for SLITEX, one can output selected slides or notes. This is useful during development of the slide show, when one may spend much time designing a complicated slide and is constantly processing it to see the results; this can become tediously slow if the other, completed, slides are also complicated or include large graphics files. As for SLITEX (page 327), the \onlyslides{list} command in the preamble ensures that only those slides whose numbers are included in list are processed. However, there is also a \notslides{list} command to exclude those slides in list. 15.2. Slide production with seminar 337 The list a set of numbers in any order, separated by commas, or a range with a hyphen. It is even possible to include \ref commands for slides containing the corresponding \label, something that is very useful during development when the slide numbers are yet finalized. For example, \onlyslides{4,2,\ref{sum},10-999} outputs slides 2, 4, the slide containing \label{sum}, and all from 10 to 999. Non-existent numbers are ignored, so 10-999 really means ‘10 to the end’, unless there really are so many slides in this show. 15.2.6 Additional features Counters The seminar class provides all the standard LATEX counters (Section 8.1) as well as slide and note counters, the values of which are printed with \theslide and \thenote. The page number is printed with \thepage, which is set to whichever of the others is current, or to the true page number for article output. The footnote counter is the only one that is reset to 1 for each new slide. If you want other counters to be reset too, say equation, specify this with \slidereset{list} or \addtoslidereset{list} where list is a comma-separated list of counters. The first command overwrites the existing list of counters, the second adds to it. The note environment As an alternative to note pages being generated by all text outside of the slide environment, one can issue \noxcomment in the preamble, or select option noxcomment in \documentclass, and then place all the notes in \begin{note} . . . \end{note} environments. Overlays Overlays for slides can be produced by including the options semlayer and semcolor. These make use of PostScript coding and therefore only work with the dvips driver or equivalent. The \overlay{n} indicates that the following text is to appear on overlay n; it remains in effect until the current scope is ended, at the end of the environment or {..} group, or when another \overlay command is issued. 338 Chapter 15. Presentation Material Overlays are not so useful for a PDF electronic presentation. Instead, one creates the same effect by building the page successively. A method of doing this is explained in Section 15.4.1. Adding a background image Slide shows are made more effective with the use of color, and with a background pattern or picture. A background color can be added with the \pagecolor command from the color package. However, even more effective is a background image. If this is a graphics file named mybg.png, one can insert it as a background to all slides with the following trick. This does require the fancybox package for the \fancyput command. \newlength\bgwidth \newlength\bgheight \ifportrait \setslidelength{\bgwidth}{\paperwidth} \setslidelength{\bgheight}{\paperheight} \else \setslidelength{\bgwidth}{\paperheight} \setslidelength{\bgheight}{\paperwidth} \fi \ifarticle\else \fancyput(-1\semin,1\semin){\raisebox{-\bgheight} {\includegraphics[totalheight=\bgheight, width=\bgwidth]{mybg.png}}} \fi What this does is first to define and set two new lengths, \bgwidth and \bgheight, to be the non-magnified size of the full page, for the current orientation. The \fancyput command places its contents on each page, relative to a point 1 in from the upper left corner; with the above coordinates, it is shifted exactly to the upper left corner. The graphics is inserted here, shifted down by the page height, and expanded/shrunk to fit the page exactly. One must design the graphics correctly so that any distortion is minimal. The \ifarticle construction prevents the background image from being included with article output. This should work with any type of output, PostScript or PDF or other. Of course, the type of graphics file must conform to those allowed by the DVI driver. For PostScript, it must be an.eps file, not.png. See also page 345 for an alternative means of adding background images. 15.2. Slide production with seminar 339 Local configuration The seminar class reads in the file seminar.con if it exists. This gives the user the chance to write all the specifications and new definitions that he or she always employs to this file, to have them automatically included in every seminar source file. 15.2.7 Using pdfTEX with seminar Although the seminar class originated in the pre-LATEX 2ε days, and many of its extra features are coded for PostScript and the dvips driver without the modern graphics and color packages, there is no problem using it with today’s LATEX and those packages. This is particularly true for PDF output. However, with pdfTEX itself, there are some extra length parameters \pdfpagewidth and \pdfpageheight which need to be properly set to get the output right. This is most simply guaranteed by including the hyperref package (Section 10.2.4) even if no other of its features is needed. Another difficulty arises if landscape and portrait slides are mixed. If the goal is only to print to paper or transparencies, then the two orientations may be processed and output separately, as explained above. However, for an electronic presentation, this would be most inconvenient. Certainly the ability to mix the two orientations is highly desirable. The following code makes this possible. It revises the slide* environment to interchange the PDF page dimensions, so that a true portrait page is produced. (This is not possible with printed output where a single print job must have a fixed orientation.) \@ifundefined{pdfoutput}{\endinput}{% \ifcase\pdfoutput \endinput \fi} \newcommand*{\pdf@revpage}{% \@tempdima=\pdfpagewidth \pdfpagewidth=\pdfpageheight \pdfpageheight=\@tempdima \@tempdima=\paperwidth \paperwidth=\paperheight \paperheight=\@tempdima } \ifarticle \pdf@revpage \fi \renewcommand{\printlandscape}{} \expandafter\let\expandafter\slide@str \csname slide*\endcsname \@namedef{slide*}{\pdf@revpage\slide@str} 340 Chapter 15. Presentation Material Store this in a file named sempdftx.sty, which can then be loaded with \usepackage. It is programmed to do nothing if pdfTEX is not being used. Alternatively, add a line \RequirePackage{sempdftx} to the local configuration file seminar.con to load it on every seminar run. Note: This file can be copied from the enclosed CD in the directory \books\Kopka_and_Daly\, where a version of seminar.con is also available. 15.3 Electronic documents for screen viewing Strictly speaking, this section is not about presentation material that is to be projected before an audience, but rather about documents that are deliberately intended to be read from a computer monitor. These have other requirements from printable documents: the page shape should be more like a monitor (that is, landscape instead of portrait) and navigation aids should be included especially if the viewer’s regular tool bars have been switched off. And of course, internal links should be present, as well as links to external web sites and documents. Package: The pdfscreen package by C. V. Radhakrishnan is an effort to fulfill pdfthese requirements. But it is more flexible than that, for it also allows screen the entire document to be output in traditional print format. And it even contains a slide environment for making projection material, so it does indeed belong to this chapter. The supplied manual can be found in texmf\doc\latex\pdfscreen, in print and screen versions. The source file manual.tex can serve as a good example of how to use the package. Figure 15.2 on the opposite page demonstrates what a title page can look like, complete with navigation panel which appears on every page. Parameters for pdfscreen This package should be loaded with the article class and with the hyperref package. In fact, it should be considered to be an extension to hyperref. And it should be loaded last, right after hyperref. The options that may be invoked with the \usepackage command are screen to generate the output in the screen version, for online reading; print to generate the print version of the output; panelleft to place the navigation panel at the left; panelright to place the navigation panel at the right; 15.3. Electronic documents for screen viewing 341 Figure 15.2: Title page of a pdfscreen document nopanel to suppress the navigation panel; paneltoc to include a table of contents in the navigation panel; nocfg to ignore any local configuration file; sectionbreak to insert a new page at the start of sections. In addition one can specify various color schemes for the panel and its buttons. Possible color options are bluelace, blue, gray, orange, palegreen, and chocolate. Also all the babel language options (Chapter 11) are recognized, for labeling the navigation buttons, although only 15 are actually supported; the others default to English. There are additional parameters that must be set by declarations: \emblema{image} to set the name of the graphics file used for the logo in the navigation panel; 342 Chapter 15. Presentation Material \urlid{url} to set the web address (URL) of the home page button in the navigation panel; \screensize{height}{width} to set the dimensions of the screen; since there are no defaults, this must be given; \margins{left}{right}{top}{bottom} to set the margins for the document; again there are no defaults, so this must be given. The navigation panel The navigation panel appears on each page and contains the buttons for changing pages and linking to the author’s home page. A default panel is provided, but the user may redesign it as he or she pleases, by redefining the \panel command. For example, \renewcommand{\panel}{\colorbox{panelbackground} {\begin{minipage}[t][\paperheight][b]{\panelwidth} . . . . . \Acrobatmenu{FirstPage} {\addButton{.2in}{$\blacktriangleleft$}} . . . . . \end{minipage}}} Here the \Acrobatmenu command is from the hyperref package (see page 247) while \panelwidth and \addButton are from pdfscreen. The \panelwidth length is by default 15% of the screen width, and can be redefined. The \addButton{wth}{text} creates a button of width wth containing text. In the above example, clicking the button executes the viewer command to go to the first page. There is also a command \imageButton{wth}{ht}{image} to insert the graphics file image as a button of width wth and height ht. A row of small navigation buttons can be turned on at the bottom of the page with \bottombuttons and turned off with \nobottombuttons. Background image A graphics file can be inserted as background for the whole page with \overlay{image}, or a uniform background color can be selected with \backgroundcolor{color}. The navigation panel has as background that color previously defined as panelbackground, which the user may alter. Otherwise, the graphics 15.4. Special effects with PDF 343 file image may be inserted as the panel background with the command \paneloverlay{image}. Making slides There is a slide environment that places its contents centered vertically within a box the full size of the text area. Local configuration Any settings that you want to use for all documents with pdfscreen may be written to a file named pdfscreen.cfg, which is read in on loading if present. Controlling print or screen output The entire file can be processed either as a document to be printed in the traditional way, or as an electronic document for reading on a monitor. This is switched by the options print and screen when loading the package. Text and specifications that are meant exclusively for one output version must be enclosed in print or screen environments. This is especially important for the \screensize and \margins commands, which are inappropriate in print mode. Other packages loaded The pdfscreen package makes heavy use of several other packages, which it loads automatically. These must then also be installed on the system: hyperref comment truncate 15.4 graphicx color colortbl calc amssymb amsbsy shortvrb fancybox Special effects with PDF There are many fancy features that one expects today from an electronic presentation: sounds and animation, text dancing in from the sides, fade overs, and possibly fireworks. A PDF file can include many of these. The pdfTEX program cannot (yet) generate these directly, but there is an auxiliary program called PPower4, written in Java by Klaus Guntermann and Christian Spannagel. This is a post-processor designed to take as input a PDF file specially prepared with pdfTEX with some extra packages, and to create a new PDF file with the additional tricks. 344 Chapter 15. Presentation Material For example, in order to build up a page containing an itemized list, such that each item should pop up one at a time, one adds a \pause command after each item, runs pdfTEX, and processes the output with PPower4. It splits the page up into several pages, each one containing the text up to the next \pause. By stepping through these pages, the presenter ‘constructs’ the one slide before the eyes of the audience. In fact, PPower4 can do much more, making a very sophisticated electronic slide show from pure LATEX input. The PPower4 program and the necessary LATEX support packages are on the TEXLive CD, but the latest versions can be obtained from http:// www-sp.iti.informatik.tu-darmstadt.de/software/ppower4/. At the time of writing, it is still under development, but is already very impressive. 15.4.1 The PPower4 packages The PPower4 post-processor is run with only two parameters: the names of the input and output files. There are no additional adjustments, controls, or options at processing time. Everything of that sort has already been placed in the LATEX source text itself with the help of supplied packages. These instructional commands add comments to the resulting PDF file, which may be viewed and printed as normal. It is the post-processor that reads these comments and uses them as instructions for making up the new output file. Here we describe these packages and the marker commands that they enable. The use of the hyperref package is presupposed, since many effects can be achieved directly with it. Page transitions Transitions from one page to another can be done in various ways to catch attention. The simplest is the plain replacement: the old page vanishes, the new one appears. Others involve effects that look like blinds opening, or like a box opening from or towards the center, or dissolving from one to the other. These can be set with the hyperref package with the option pdfpagetransition (page 245) or set to a different effect anywhere in the document by giving \hypersetup{pdfpagetransition={pars}} where pars are the required parameters for the desired transition. Marc van Dongen has prepared a file pagetrans.tex, available with the PPower4 collection, that defines simpler commands to execute the above. (If this were renamed pagetrans.sty, it would be a package and could be loaded with \usepackage but as is, it must be included with the \input command.) These commands are: 15.4. Special effects with PDF 345 \Replace pages are simply replaced, the default; \Dissolve one page ‘dissolves’ into the other in a mosaic fashion; \VBlinds several horizontal lines sweep vertically across the screen, like Venetian blinds; \HBlinds same as \VBlinds, but vertical lines move horizontally; \HOSplit two vertical lines sweep horizontally out from the center; \HISplit as above, but the lines move into the center; \VOSplit two horizontal lines sweep vertically out from the center; \VISplit as above, but the lines move into the center; \OBox a box opens out from the center; \IBox a box sweeps into the center; \Wipe{angle} a single line sweeps across the screen in the direction given by angle, which can be 0 (left to right), 90 (bottom to top), 180 (right to left), 270 (top to bottom); \pageTransitionGlitter{angle} like \Dissolve but in a band that moves across the screen in the direction angle, which can be 0 (left to right), 270 (bottom to top), 315 (upper left to lower right). We stress again, these declarations are simplifications of the hyperref commands, and function without PPower4 post-processing. Once given, they remain in effect for all pages until a new transition command is declared. Adding a background We have already seen in Section 15.2.6 how a background image may be added with the help of the fancybox package, and how a solid background color can be set with the color package. Package: These and other effects can also be achieved with the background backpackage supplied with PPower4. This package provides the commands ground \hpagecolor[color1]{color2} \vpagecolor[color1]{color2} and that cause the background color to blend from color1 to color2 horizontally or vertically. If the optional color1 is omitted, it is the intensity of color2 that changes across the page. Both colors must be defined by the color package command \definecolor, or be one of the predefined colors. This effect requires post-processing with PPower4! 346 Chapter 15. Presentation Material The package can also add background images, without PPower4 postprocessing, if it is loaded with the option bgadd. This then includes the commands \bgadd{image} and \bgaddcenter{image} to place image at the upper left corner or centered on the page. The image is an \includegraphics command with appropriate scaling to fit the page. These commands may be issued more than once to add further elements to the background. They may all be removed with \bgclear. Note: The addition of background elements to the pages requires that the package eso-pic also be installed. Building a page successively Package: pause The electronic equivalent to overlays is the successive building of a page of text. The PPower4 pause package introduces the \pause command that places markers in the PDF output which PPower4 then uses to break the page at that point, and to start a new page containing the previous contents plus whatever comes up to the next \pause or end of page. This works for both pdfTEX and dvipdfm. For example, we could build a numbered list with We proceed as follows: \begin{enumerate} \item We write the list source text.\pause \item We add the pause markers.\pause \item We run pdf\TeX.\pause \item We run PPower4.\pause \end{enumerate} And there we have it! The first PDF file generated will have a single page with a small colored block where each \pause command appears. (This may be suppressed if the package is loaded with the nomarkers option.) The resulting PDF file after post-processing will have 5 pages in place of this one, each one with an additional item. As the presenter steps through the pages, each new line appears to be added to a single page, until the full page is complete. Building with transitions Rather than having the new line simply popping up out of nowhere, one can select the type of page transition at any step by giving a modified \pause with the name of one of the transition declarations from page 344. For example \pauseHBlinds is the same as \pause plus \HBlinds except that the transitions between main pages are not affected. Note that 15.4. Special effects with PDF 347 \pauseReplace is the default, causing the new text simply to appear. These remain in effect for the following \pause breaks until countermanded. There is a \pauseGlitter{angle} command as the equivalent to \pageTransitionGlitter{angle}, but all others just attach the declaration name to \pause. Building with levels Even more sophistication can be added by assigning level numbers to the chunks of text between the \pause markers. In this way the page can be built up in any order, parts can be made to disappear or to be replaced, and the footline text at the bottom of the page can be visible from the beginning. The level number corresponds to the sequence number of the views of the built-up page. Thus a chunk of text (that which comes between \pause commands) with level n will first appear in view n. By default, the level number starts at 1 and increases by 1 for each \pause. To ensure that the page footline is at level 1, we can write the last line of the above example as And there we have it!\pause\pauselevel{=1} The \pauselevel command sets the level number for the chunk in which it is located. There are several possibilities for its argument. {=n} sets the level number absolutely to n; {=+n} increases it by n; bear in mind that the preceding \pause has already incremented it by 1; {=-n} decreases it by n; {=n -d} sets level number to n and makes the change in level number with \pause to be −d; this would be done with say {=10 -1} to make the chunks numbered backwards from 10, causing the page to be built from the bottom up; {:m} sets the maximum level to m; at higher levels, the text vanishes; with {=3 :4} the chunk is visible only at levels 3 and 4; the :m may also be set relatively as {:+m} or {:-m}. It is also possible to give multiple level specifications, as \pause\pauselevel{=2 :2, =5 :6}Text\pause to cause ‘Text’ to appear at level 2, to vanish for 3 and 4, and to reappear only for 5 and 6. The level number may not be less than 1. Zero and negative numbers are treated as 1. 348 Chapter 15. Presentation Material With some tricky playing around with level numbers and with the TEX overlap commands \rlap and \llap, it is possible to get text or images to be replaced. The two must be made to overlap, but at different level numbers. For example: We now \rlap{alter}change this word We now \pause\pauselevel{=1 :1}\rlap{alter}\pause change\pause\pauselevel{=1} this word The first line shows the text without the \pause markers, in which ‘alter’ overlaps to the right over ‘change’. The next lines show the same text with levels inserted: ‘alter’ belongs to level 1, and disappears after 1; ‘change’ belongs to 2 (automatic increment), and the remaining text is set back to level 1. Highlighting instead of building An alternative to building the page by pieces is to highlight the section of text being discussed. In this mode, the entire page is visible, but printed in a dull color, like gray, while the chunk of text at the current level is in a bright color. When switching to the next view (level), that text becomes dull, and the next chunk brightens. To get this to work, one must inform PPower4 what the normal and highlight colors are to be, and one must further indicate what text should actually change. Clearly certain parts of the page are to remain as they always are, at least the head and footlines, and possible titles. This is done with \pausecolors{textclr}{dullclr}{highclr} where textclr is a dummy color that is not otherwise being used. Only text indicated in this color will participate in the highlighting. For example \pausecolors{cyan}{gray}{red} ... This is the \textcolor{cyan}{text to be highlighted} by the ... The ‘text to be highlighted’ will normally appear in gray, but will turn red for that view corresponding to its level number. And only for that view! At the next view, it returns to gray. Note that the color cyan never appears; it is only a marker for PPower4. (Well, it does appear in the first PDF output, before post-processing.) The highlighting mode is activated with \pausehighlight which makes all text at all levels visible, but with this color switching feature. The build mode can be reactivated with \pausebuild. In build mode, the 15.4. Special effects with PDF 349 color switching still takes place, but the text does not appear until the right view is reached. It will be highlighted only for this first view. One can add the word highlight to the argument of \pauselevel to indicate a chunk that should always be visible even in build mode, and which participates in the color switching. In highlight mode, this has no effect. Linking to first view Package: pp4link Making an internal link with the hyperref commands \hypertarget and \hyperlink (page 247) causes the target to be on the completed built up page, on the last view. However, one probably wants to link to the first view, before the page is built up. The pp4link package can assist here. It defines the commands \toplink{name}{text} and \toptarget{name} to establish text as a link to the target name. This package tries to load hyperref on its own, without any options. If you try loading hyperref afterwards, with options, you will get a message about conflicting options and the options will be ignored. Therefore, load pp4link after hyperref. Letters 16 In addition to the three standard LATEX document classes, there is a fourth one named letter for formatting correspondence. As provided, this class is intended for private letters without any frills such as letterheads or business reference codes. However, local modifications are possible. We first present the standard LATEX letter class, and then demonstrate how a house style can be written using our own institute style as an example. As always, it is highly recommended that each of these modifications be given its own file name so that letter.cls refers only to the provided LATEX version. 16.1 The LATEX letter class The letter document class is meant for writing letters. A single input file may contain the text for more than one letter and recipient, all from the same sender. Address labels may also be printed automatically if one wishes. Most of the normal LATEX commands function as usual within the letter class. One exception, however, is the sectioning commands, which will lead to the error message ! Undefined control sequence when issued. It actually makes little sense to try to divide a letter up into chapters, sections, etc. On the other hand, there are a number of special commands that may be applied only within this style. The input text for a letter begins as for every LATEX document with \documentclass[options]{letter} in which all the options listed in Section 3.1 may be given for options except for twocolumn and titlepage which hardly make any sense within a letter. Every letter must contain the name and address of the sender, which are set for all the letters in one file by including the commands \address{sender address} \signature{sender name} or \name{sender name} 351 352 Chapter 16. Letters in the preamble. The sender address normally consists of several lines, separated by \\ commands, as in the example \address{Max-Planck-Institut f\"ur Aeronomie\\ Max-Planck-Str.\ 2\\ D--37191 Katlenburg--Lindau\\Germany} The entry in the \name command will be used in the return address in the letterhead, if such has been programmed. The entry in the \signature command will be printed at the end of the letter below the space left blank for the writer’s signature. If \signature has not been specified, the \name entry is inserted here instead. This allows a more formal \name to be used for the return address and a different form, perhaps with multiple lines, for the signature, as in \name{Prof.\ M.\ Ostmann} \signature{Martin Ostmann\\Project Leader} When the above commands are issued in the preamble, they remain valid for all the letters in the document, except for those letters that contain new versions of these commands. Thus one letter might have a different \signature from the others. The scope of these entries extends only to the end of the environment in which they were called (see Section 8.5.4). Two other sender entries are possible in standard LATEX letter class. They are intended to be employed in local modifications for a house style. The idea is that if \address is not called, the preprogrammed company letterhead which might also contain the sender’s room and/or telephone number is generated. Thus the commands \location{room number} and \telephone{tel number} are provided. In the standard letter class, the entries room number and tel number are printed at the bottom of the first page only if \address is not issued. The preamble may also contain the \pagestyle command with the usual entries plain, empty, or headings. The first is the default, putting the page number centered at the bottom of all pages after the first. The headings page style adds the recipient’s name, the date, and page number in a line at the top of all pages after the first. After the preamble commands, the actual text begins as in all LATEX files with the command \begin{document}. The text consists of one or more letters, each enclosed in a letter environment with the syntax: \begin{letter}{recipient} text of letter \end{letter} where recipient stands for the name and address of the recipient, divided into several lines separated by \\ commands. \begin{letter}{Mr Donald J. Burns\\ Ontario Institute of Physics\\ 16.1. The LATEX letter class 353 41 Adelaide St.\\ London, Ontario\\Canada N4R 3X5} The text of letter normally begins with the command \opening and ends with \closing, between which the body of the letter appears, mixed with whatever LATEX commands are desired. The syntax of these two commands is \opening{dear} \closing{regards} where dear is the salutation, such as Dear Mr Tibs, and regards stands for the terminating text, for example Yours sincerely,. The \opening command could also contain other text, for example a subject entry line, with the true salutation as part of the following body text. LATEX places the sender’s name and address in the upper right corner of the first page with the current date set right justified below it. Then the recipient’s name and address appear at the left margin, followed by the salutation and the body of the letter. The letter ends with the terminating text and the sender’s name or signature left justified from the center of the line with sufficient vertical space between them for the handwritten signature. After the \closing, a number of other commands may appear as part of the letter. One is \cc to produce a copy distribution list: \cc{name1 \\ name2 \\ ... } The text ‘cc:’ (or more correctly, the text defined in \ccname) is printed at the left margin, followed by an indented list of names of the copy recipients. The second additional command is \encl for making a list of enclosures: \encl{enclosure1 \\ enclosure2 \\ ... } The word ‘encl:’ (actually the text in \enclname) is printed at the left margin and then the list of enclosures. Finally, the command \ps may be used to add a postscript after the signature. The command itself does not generate any text, nor does it take an argument. The postscript text is everything located between the \ps and \end{letter} commands. Normally the letter is dated automatically with the current date. However, if it is desired that the letter be back-dated, or that the date be otherwise fixed in the text, it may be set with \date{date text} in which case date text appears where the current date would be placed. A letter file may contain any number of letter environments, one per letter. As stated already, when \address, \name, and \signature have 354 Chapter 16. Letters A sample letter produced with the standard letter class. Max–Planck–Institut für Aeronomie Max–Planck-Str. 2 D-37191 Katlenburg–Lindau Germany September 8, 2003 TEXproof Ltd P. O. Box 123 9876 Wordtown Textland Dear Sir; We are most pleased to be able to answer your request for information about the use of LATEX for general text processing at a scientific institute. 1. After some initial trepidation on the part of the secretarial staff, which was mainly due to the first experience with a non-WYSIWYG text system, the system is now fully accepted and appreciated. 2. Much to the surprise of many secretaries, they find that they are able to set the most complicated mathematical formulas in a reasonably short time without difficulties. The same applies to the production of detailed tables. 3. Creating cross-references and keyword indices no longer causes horror, even when the author is well known for demanding constant changes. 4. Finally, the high quality appearance of the output has assisted in winning acceptance for LATEX in our house. An additional positive note is the ability to write business letters readily, making use of the letter class provided with LATEX. In our institute, we have designed a special version to print our own letterhead, saving the need to have special letter paper printed. Yours truly, Patrick W. Daly encl: Listing of our mpletter.cls Sample output cc: H. Kopka B. Wand 16.1. The LATEX letter class 355 been specified in the preamble, they remain in force for all the letters in the file. It is possible to alter any one or more of these sender entries by reissuing the command within one of the letters, before the \opening command, but then this change is valid solely for that letter. If both \name and \signature have been declared, it is the latter that is printed below the signature space. The first page contains no page number. Subsequent pages have either a centered page number at the bottom (default) or a heading line with recipient, date, and page number at the top (page style headings). The sample letter on the facing page was generated with the following input text. \documentclass[a4paper,11pt]{letter} \name{Dr P. W. Daly} \address{Max--Planck--Institut f\"ur Aeronomie\\ Max--Planck--Str.\ 2\\ D-37191 Katlenburg--Lindau\\Germany} \signature{Patrick W. Daly} \date{September 8, 2003} \begin{document} \begin{letter}{\TeX proof Ltd\\P.\,O. Box 123\\ 9876 Wordtown\\Textland} \opening{Dear Sir;} We are most pleased to be able to answer your request for information about the use of \LaTeX{} for general text processing at a scientific institute. \begin{enumerate} \item After some initial trepidation on the part of the secretarial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in winning acceptance for \LaTeX{} in our house. \end{enumerate} An additional positive note is the ability to write business . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . special paper printed. \closing{Yours truly,} \encl{Listing of our \texttt{mpletter.cls}\\Sample output} \cc{H. Kopka\\B. Wand} \end{letter} \end{document} By adding the command \makelabels in the preamble, the user can print out address stickers after all the letters have been output. The entries for the addresses are taken from the recipients’ names and addresses in the argument to the letter environment. The standard LATEX 1 letter class is designed for a page of labels 4 4 × 2 inches, ordered in two columns. This could be altered for other formats. An address sticker 356 Chapter 16. Letters without a corresponding letter may be printed by including an empty letter environment of the form \begin{letter}{recipient}\end{letter} 16.2 A house letter style The sample letter above demonstrates the possibilities of the standard LATEX letter class. The height and width of the text may easily be altered with appropriate declarations in the preamble. The use of explicit English words and date style is no problem for other languages since they are all contained in special commands that can be redefined. The letter class has been designed so that if the \address command is omitted, a company letterhead will be printed instead. This presupposes that the file has been reprogrammed at the local installation for this purpose. Each employee using this house letter style will have certain personal entries to make, such as his or her room and/or telephone number. These commands have been provided for in the standard letter class. We have such a house letter style at our institute which we will illustrate here. However, it was found necessary to add some more personal entries, such as ‘Our Ref.’, ‘Your Ref.’, and email addresses. In addition, a command to print out ‘Subject:’ has also been added. To distinguish our local house style from that of standard LATEX, we have named it mpletter. It contains most of the features of letter, since it in fact reads in that class file and then makes its alterations and additions. The \address command is not necessary, since all letters are printed with the institute letterhead, including its address. The recipient’s name and address are taken from the argument of the letter environment and are vertically centered in the space provided in the letterhead. The writer’s name and telephone extension are entered with \name{author} and \telephone{ext number} which, if given in the preamble, apply to all the letters in the file. If different letters have other authors, these commands must be made in the appropriate letter environment before the \opening command. New entry commands specific to mpletter are \yref{your code} \ymail{your date} \myref{our code} \subject{subj text} which produce the words Your Ref.:, Your letter of :, Our Ref.:, Subject: 16.2. A house letter style 357 MAX–PLANCK–INSTITUT FÜR AERONOMIE Max–Planck–Str. 2 Katlenburg–Lindau GERMANY MPI für Aeronomie, D–37191 Katlenburg–Lindau Dr P. W. Daly Tel.: 05556–401–279 Email: daly @ linmpi.mpg.de Mr George Murphy 35 Waterville Rd. Centertown, Middlesex United Kingdom Your Ref.: GFM/sdf Subject: May 10, 2003 Your letter from: April 28, 2003 Our Ref.: PWD/sib LAT EX information Dear George, Thank you for your inquiry about the latest version of the LATEX installation and additional packages. The entire TEX installation, with binaries and of course LATEX, along with a large number of contributed packages, is distributed annually by the TEX Users Group, on their TEXlive CD. I am sending you a copy of the current version of this CD, as you requested. In a separate directory named bibtex you will find the special bibliography formatting package files mentioned in ‘A Guide to LATEX’. I hope you will find these of use. Do not hesitate to get in touch with me again if you have any further questions about the installation or running of the package. Regards, Patrick W. Daly encl: 1 CD-ROM with TEXlive contents cc: H. Kopka Telephone Telefax Telex 05556–401– 1 05556–401– 240 9 65 527 aerli Bank Kreis–Sparkasse Northeim 41 104 449 (BLZ 262 500 01) Train Station Northeim (Han.) 358 Chapter 16. Letters properly positioned under the letterhead together with the corresponding text argument. If any of these commands are missing, their text will not appear in the letter. Since ours is a German institute, there is an option german that translates all these words into their German equivalents. The entry commands have the same names, however. As in the standard letter class, the current date is printed automatically, but may be changed to any desired text with the command \date{date text} if one wishes to back-date a letter or to fix the dating within the letter file itself. This is often handy if one only keeps electronic copies of the letters for the record. Otherwise, when a hard copy is run off months later, it will appear with the new current date and not with the original one. The entry author that is given as the argument to the \name command appears in the letterhead as the name of the sender. It will also appear below the space left for the signature, unless it is overridden by the \signature command that specifies an alternative form of the name for this purpose. The sample letter on the previous page has been generated with our house style, using the following input text. \documentclass[12pt]{mpletter} \name{Dr P. W. Daly} \signature{Patrick W. Daly} \myref{PWD/sib} \date{May 10, 2003} \subject{\LaTeX{} information} \telephone{279} \internet{daly} \ymail{April 28, 2003} \yref{GFM/sdf} \begin{document} \begin{letter}{% Mr George Murphy\\35 Waterville Rd.\\ Centertown, Middlesex\\United Kingdom} \opening{Dear George,} Thank you for your inquiry about the latest version of the \LaTeX{} installation and additional packages. . . . . . . . . . . . . . . . . . . . . . . . . . . Do not hesitate to get in touch with me again if you have any further questions about the installation or running of the package. \closing{Regards,} \encl{1 CD-ROM with \TeX{}live contents} \cc{H. Kopka} \end{letter} \end{document} 16.3. A model letter customization 359 The first page of our institute letter appears as shown, without a page number. If the text must continue beyond one page, the next page will have the heading MAX–PLANCK–INSTITUT FÜR AERONOMIE To Mr George Murphy May 10, 1998 Page 2 The recipient’s name that appears in this heading is taken from the first line of the recipient argument in the \begin{letter}. This argument is split up by the LATEX processing so that the first line is contained in the command \toname, and the rest of the lines in \toaddress. The words ‘To’ and ‘Page’ are in the standard commands \headtoname and \pagename, and may be changed by an appropriate language adaptation option as shown in Section D.4.2. 16.3 A model letter customization Adapting the letter.cls class file to the requirements of a company style should present few difficulties to an experienced LATEX programmer. Even a normal user may be able to make the necessary changes with the help of the example in this section. We present here the class file mpletter.cls that was used to produce the sample letter on page 357. It makes heavy use of the LATEX programming features described in Appendix D. In order to understand it, one should be familiar with Section D.2. It will not be necessary to make any changes to the file letter.cls itself, since all modifications are in a separate class file that inputs the original. The new class file is to be called mpletter.cls. It begins by specifying the TEX format that it requires, and by identifying itself. \NeedsTeXFormat{LaTeX2e} \ProvidesClass{mpletter} It will be necessary to execute conditionals, so we will need the ifthen package described in Section 8.3.5. We will want a flag to decide if the letter is to be in German or not, determined by an option. Create the flag and define the option german to set it. \RequirePackage{ifthen} \newboolean{@german} \setboolean{@german}{false} \DeclareOption{german}{\setboolean{@german}{true}} All other options that are valid in the standard letter class will also be accepted here, so simply pass them on to that class with the default option. Then process all options before loading letter itself with the a4paper option. We only have A4 paper in our institute. 360 Chapter 16. Letters \DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}} \ProcessOptions \LoadClass[a4paper]{letter} This completes the preliminaries. So far, we have read in the standard letter class, along with the package ifthen, and defined a new option that is not present in the original class. Otherwise, all options and functions are unchanged, so far. We now define the new ‘name’ commands to contain language-sensitive text, such as ‘Subject’, which are not provided for in the basic class. The actual definitions will be executed by two commands \englishnames and \germannames. \newcommand{\englishnames}{% \newcommand{\yrefname}{\textsl{Your Ref.}} \newcommand{\ymailname}{\textsl{Your letter from}} \newcommand{\myrefname}{\textsl{Our Ref.}} \newcommand{\subjectname}{\textsl{Subject}} \newcommand{\telephonename}{Telephone} \newcommand{\stationname}{Train Station} \newcommand{\germanname}{GERMANY} \newcommand{\telcode}{[49]-5556-401} \newcommand{\postcode}{D--37191} } \newcommand{\germannames}{% . . . . . . . . . . . . . . . . . . . . . \newcommand{\telcode}{(05556) 401} \newcommand{\postcode}{37191} } \ifthenelse{\boolean{@german}} {\RequirePackage{german}\germannames}{\englishnames} The last lines test whether the flag @german has been set (by the option german), and if so, the package german is loaded, and the German names are defined, otherwise the English names. The package german already translates the standard names commands \toname, \headtoname, and \pagename, so they are not included in \germannames. Having settled the language problem, we now attack those commands for entering extra information in the header. Each of these stores its text argument in an internal command for future use. First the internal storage commands must be created. \newcommand{\@yref}{} \newcommand{\@ymail}{} \newcommand{\@myref}{} \newcommand{\@subject}{} \newcommand{\@internet}{} \newcommand{\yref}[1]{\renewcommand{\@yref}{\yrefname: #1}} 16.3. A model letter customization 361 \newcommand{\ymail}[1]{\renewcommand{\@ymail}{\ymailname: #1}} \newcommand{\myref}[1]{\renewcommand{\@myref}{\myrefname: #1}} \newcommand{\subject}[1]{\renewcommand{\@subject} {\subjectname: #1}} \newcommand{\internet}[1]{\renewcommand{\@internet}{#1}} \newcommand{\INTERNET}{@linmpi.mpg.de} Set the dimensions of the text on the page and its margins. These numbers are appropriate for A4 paper (which does make the a4paper option superfluous). \setlength{\textheight}{215mm} \setlength{\textwidth}{160mm} \setlength{\oddsidemargin}{0pt} \setlength{\evensidemargin}{0pt} \setlength{\topmargin}{-20pt} \setlength{\headheight}{12pt} \setlength{\headsep}{35pt} The next step is to define some fixed fonts that are needed for the letterhead. We refer to the fonts with their explicit NFSS attributes; in this case they are all Computer Modern sans serif fonts in various sizes. These fonts will not change if totally different families are used for the body of the letter. \DeclareFixedFont{\xviisf}{OT1}{cmss}{m}{n}{17} \DeclareFixedFont{\xsf}{OT1}{cmss}{m}{n}{10} \DeclareFixedFont{\viiisf}{OT1}{cmss}{m}{n}{8} The letterhead itself is divided into two fields, the left one containing the institute name in large letters, the right one the address in a smaller font. Below the first horizontal line, the left field displays the name and address of the recipient, positioned to fit in the window of an envelope, and the right one has the personal data of the letter writer, name, extension, computer address. The widths of these fields are established. \newlength{\leftfield} \newlength{\rightfield} \setlength{\leftfield}{117mm} \setlength{\rightfield}{43mm} The total width of these two fields equals 160 mm, which is the same as \textwidth. Next, we place the institute name and address in several saved boxes. \newsavebox{\FIRM} \newsavebox{\firm} \newsavebox{\firmaddress} \newsavebox{\firmreturn} \sbox{\FIRM} {\parbox[t]{\leftfield} {\xviisf MAX--PLANCK--INSTITUT F\"UR AERONOMIE}} \sbox{\firm} {\xsf MAX--PLANCK--INSTITUT F\"UR AERONOMIE} \sbox{\firmreturn} 362 Chapter 16. Letters {\viiisf\underline{MPI f\"ur Aeronomie, \postcode{} Katlenburg--Lindau}} \sbox{\firmaddress} {\parbox[t]{\rightfield}{\viiisf\baselineskip10pt Max--Planck--Stra{\ss}e 2\\ \postcode{} Katlenburg--Lindau\\\germanname}} Using these boxes as building blocks, we put together the actual head and foot of the letterhead page in two further save boxes. \newsavebox{\firmhead} \newsavebox{\firmfoot} \sbox{\firmhead} {\parbox{\textwidth}{\usebox{\FIRM}\raisebox{6pt} {\usebox{\firmaddress}}\\[3pt] \rule{\textwidth}{1pt}}} \sbox{\firmfoot} {\parbox{\textwidth}{\rule{\textwidth}{0.6pt}\\[5pt] \viiisf\setlength{\baselineskip}{12pt}% \begin{tabular}[t]{@{}ll} \underline{\telephonename} & \telcode-1\\ \underline{Telefax} & \telcode-240\\ \underline{Telex} & 9\,65\,527 aerli \end{tabular}\hfill \begin{tabular}[t]{l} \underline{Bank}\\ Kreis--Sparkasse Northeim\\ 41\,104\,449 (BLZ 262\,500\,01) \end{tabular}\hfill \begin{tabular}[t]{l@{}} \underline{\stationname}\\ Northeim\\ (Han.) \end{tabular} }} The box \firmhead is fairly clear: it is a \parbox of width \textwidth containing the boxes \FIRM and \firmaddress side by side, with a line below. The foot \firmfoot is also a \parbox of the same width, but containing three columns of general institute information, set in tabular environments. It now remains to have the head and foot boxes placed on the first page. In the letter class, there is a special page style named firstpage that is always invoked for the first page of a letter. This must be redefined. \renewcommand{\ps@firstpage} {\setlength{\headheight}{41pt}\setlength{\headsep}{25pt}% \renewcommand{\@oddhead}{\usebox{\firmhead}}% \renewcommand{\@oddfoot}{\raisebox{-20pt}[0pt] {\usebox{\firmfoot}}}% 16.3. A model letter customization 363 \renewcommand{\@evenhead}{}\renewcommand{\@evenfoot}{}} This page style must (re)define the commands \@oddhead and \@oddfoot, which are always inserted at the top and bottom of odd pages, to place our special \firmhead and \firmfoot. The even pages are unimportant, since the first page is always odd. It is necessary to enlarge \headheight and \headsep to allow the big boxes to fit in. Subsequent pages are set with the headings or plain page styles. We want to modify the former to include the firm address once more. \renewcommand{\ps@headings} {\setlength{\headheight}{41pt}% \renewcommand{\@oddhead} {\parbox{\textwidth}{\usebox{\firm}\\[5pt] \slshape \headtoname{} \toname\hfill\@date\hfill \pagename{} \thepage\\ \rule[3pt]{\textwidth}{1pt}}} \renewcommand{\@oddfoot}{} \renewcommand{\@evenhead}{\@oddhead} \renewcommand{\@evenfoot}{\@oddfoot}} One small problem remains: the first time one of these page style commands is executed, the head and foot commands may not yet exist, causing \renewcommand to complain. We ensure that they are there at the start by predefining them with \providecommand (Section 8.3.1). \providecommand{\@evenhead}{}\providecommand{\@oddhead}{} \providecommand{\@evenfoot}{}\providecommand{\@oddfoot}{} Now make headings the active page style. \pagestyle{headings} There is only one last thing to do, and that is to redefine the opening command that prints the recipient’s address and the salutation. We add a bit more, including the personal data of the sender, as well as the reference information. The address goes in the left field, the personal data to the right. The references go in a line below the rule, followed by the subject line. These entries are tested first, and are only included if they are not blank. Several stored entry commands used here are part of the standard letter class, such as \toname and \toaddress. The \@date entry is either \today or whatever text was stored with \date. \renewcommand{\opening}[1]{\thispagestyle{firstpage}% \parbox[t]{\leftfield} {\usebox{\firmreturn}\\ \parbox[b][3.5cm][c]{\leftfield}{\toname\\\toaddress}}% \parbox[t]{\rightfield} {\fromname \ifthenelse{\equal{\telephonenum}{}} {}{\\ Tel.: \telcode-\telephonenum} 364 Chapter 16. Letters \ifthenelse{\equal{\@internet}{}} {}{\\{\viiisf Email: \@internet\INTERNET}} \\[5mm] \@date} \par \rule{\textwidth}{0.6pt} \makebox[\leftfield][l] {\ifthenelse{\equal{\@yref}{}} {\@ymail}{\@yref\hfill\@ymail\hfill}} \@myref\par \ifthenelse{\equal{\@subject}{}} {}{\@subject\par} \vspace{2\parskip} #1 \par\nobreak} The result of this formatting can be seen on page 357. It should be possible to modify the coding as needed for other organizations without too much difficulty. The field for the recipient’s name and address has been positioned so that it will appear in the address window of an envelope when properly folded. The smaller return address will also be visible through this window. The printing of extra address stickers is thus superfluous. As an exercise, the user should design a document class pletter for writing personal letters. With the tips for formatting company letters, it should not be difficult to add a letterhead of the form Sheila Joan McDonald Tel.: 234-9871 31 Maple Drive Willowtown Hint: The name has been printed with the font cmdunh10 scaled \magstep4, declared with \newfont. Such a pletter class must remain in the personal directories of the user at a computer center. It would be rather embarrassing if everyone made use of the same personal letterhead. Appendices A The New Font Selection Scheme (NFSS) When TEX and LATEX were invented, the fonts available for them were very limited in number. For this reason, the original LATEX had an inflexible system of defining the fonts that were to be used, since it was not obvious that one might want to change them. The association between the highlevel font commands such as \large and \bf and the external font name that is ultimately selected was rigidly fixed internally. Today there are many additional fonts available, some of which should be used alongside the standard CM fonts, and others that should replace them altogether. For example, the Cyrillic fonts of Section 12.4.2 should be added parallel to the Latin fonts, but to make them operate automatically under the LATEX size commands was a complex procedure. (We know: we have done it!) Similarly, installing PostScript fonts involved calling intricate interface macros. Another problem was the behavior of the font style and size commands. As explained in Section F.2.1, each of the font declarations \rm, \bf, \sc, \sl, \it, \sf, and \tt activates a particular font in the current size, overriding the previous declaration. One can select either a bold or an italic font, but there is no way to select a bold, italic one. Furthermore, selecting a new size automatically switches to \rm, an upright, Roman, medium font. That is, the attributes cannot be selected independently of each other. In 1989 Frank Mittelbach and Rainer Schöpf proposed a New Font Selection Scheme (NFSS) for LATEX and a preliminary test package was ready in early 1990. A second release (NFSS2) was published mid-1993 with many substantial changes. With the official release of LATEX 2ε in June 1994, NFSS became firmly entrenched in the new standard. The new font declarations and commands are described in Sections 4.1.3 and 4.1.4. Here we explain the usage in more detail; in Section A.3 we describe how new sets of fonts may be installed. 367 368 Appendix A. The New Font Selection Scheme (NFSS) A.1 Font attributes under NFSS According to the NFSS scheme, every character set can be classified by five attributes called encoding, family, series, shape, and size, which may be selected with the commands \fontencoding{encode} \fontfamily{fam} \fontseries{wt wth} \fontshape{form} and \fontsize{sz}{line sp} The encode attribute was new to the second release of NFSS. It specifies the layout of the characters within the font. Possible values for it are listed in Table A.1. It is unlikely that one would want to change encoding within a document, except to activate Cyrillic fonts perhaps. This feature is more for LATEX programmers to install new fonts on the system. Table A.1: The NFSS encoding schemes Encoding OT1 OT2 T1 OML OMS OMX U Description Original text fonts from Knuth Univ. Washington Cyrillic fonts The Cork (DC/EC) fonts TEX math letter fonts TEX math symbol fonts TEX math extended fonts Unknown coding Sample Font cmr10 wncyr10 ecrm1000 cmmi10 cmsy10 cmex10 — Page 492 497 500 495 495 496 — The argument fam in \fontfamily denotes a basic set of font properties. For the Computer Modern fonts, listed in Section G.2.2, all the serif fonts belong to the family cmr. The family cmss includes all the sans serif fonts while cmtt contains the typewriter fonts. A number of special decorative fonts are the only members of their families. Table A.3 on page 370 lists the CM fonts according to the family and other attributes. Note: The font attribute family has no relationship to the primitive TEX concept of the same name. A TEX family consists of three fonts of different sizes for use in math formulas as normal characters, and firstand second-level indices. The argument wt wth in \fontseries designates the weight (=boldness) and width of the characters. These are specified by 1 to 4 letters as shown in Table A.2 on the opposite page. The argument for \fontseries{wt wth} consists of the letter or letters for the weight, followed by those for the width. Thus ebsc indicates weight extrabold and width semicondensed while bx means weight bold and width expanded. The letter m is omitted when combined with any non-normal weight or width; if both are to be normal, it is sufficient to give m alone. A.1. Font attributes under NFSS 369 Table A.2: The NFSS series attributes Weight class Ultralight Extralight Light Semilight Medium (normal) Semibold Bold Extrabold Ultrabold ul el l sl m sb b eb ub Width class Ultracondensed 50% Extracondensed 62.5% Condensed 75% Semicondensed 87.5% Medium 100% Semiexpanded 112.5% Expanded 125% Extraexpanded 150% Ultraexpanded 200% uc ec c sc m sx x ex ux In \fontshape, the argument form is one of the letter combinations n, it, sl, or sc for selecting normal (or upright), italic, slanted, or small caps. The \fontsize attribute command takes two arguments, the first sz being the point size of the font (without the dimension pt explicitly given) and the second line sp being the vertical spacing from one baseline to the next. The second argument becomes the new value of \baselineskip (Section 3.2.4). For example, \fontsize{12}{15} selects a font size of 12 pt with interline spacing of 15 pt. (The second argument may be given a dimension, such as 15pt, but pt is assumed if no dimension is stated.) Once all five attributes have been set, the font itself is selected with the command \selectfont. The new feature here is that the various attributes are independent of one another. Changing one of them does not alter the others. For example, if the selection \fontfamily{cmr} \fontseries{bx} \fontshape{n} \fontsize{12}{15} has been made for an upright, bold, expanded, Roman font of size 12 pt and interline spacing 15 pt, then when \fontfamily{cmss} is later selected for a sans serif font, the attributes weight and width bx, form n, and size 12(15pt) remain in effect when the next \selectfont is issued. Alternatively, all attributes but the size may be specified and the font activated immediately with the command \usefont{code}{family}{series}{shape} The table on the next page (by F. Mittelbach and R. Schöpf) lists the classification of the Computer Modern character sets according to the attributes \fontfamily, \fontseries, and \fontshape. That there are so many attribute combinations without a corresponding CM font may appear to be a weakness in the NFSS system, but it must be recalled that it is designed for the future. It may also be employed with the PostScript 370 Appendix A. The New Font Selection Scheme (NFSS) Table A.3: Attributes of the Computer Modern fonts Series Shape(s) Examples of external names Computer Modern Roman — (\fontfamily{cmr}) m n, it, sl, sc, u bx b n, it, sl n cmr10, cmti10, cmsl10, cmcsc10, cmu10 cmbx10, cmbxti10, cmbxsl10 cmb10 Computer Modern Sans Serif — (\fontfamily{cmss}) m bx sbc m n, sl n n cmss10, cmssi10 cmssbx10 cmssdc10 Computer Modern Typewriter — (\fontfamily{cmtt}) n, it, sl, sc cmtt10, cmitt10, cmsltt10, cmtcsc10 fonts, which are becoming ever more popular, to exploit their complete variability. Formally it is possible to set any combination of attributes; however, there may not exist any font matching all the attributes selected. If that is the case, then when \selectfont is called, LATEX issues a warning stating which font has been activated in its place. The font size attribute of the \fontsize command may normally take on values of 5, 6, 7, 8, 9, 10, 10.95, 12, 14.4, 17.28, 20.74, and 24.88, but other values may also be added. The second argument, the interline spacing, may take on any value since it is not something intrinsic to the font itself. With the \begin{document} command, LATEX sets the five attributes to certain preset default values. These are normally standard encoding OT1, family cmr, medium series m, normal shape n, and the base size selected. The user may change these initial values within the preamble, or they might be set differently by a special option, say when a PostScript font has been selected. A.2 Simplified font selection The attribute commands \fontencoding, \fontfamily, \fontseries, \fontshape, and \fontsize, together with the command \selectfont, are the basic tools in the New Font Selection Scheme. The user need not A.2. Simplified font selection 371 employ these commands directly, but rather may make use of the higherlevel declarations presented in Sections 4.1.2 and 4.1.3. In fact, a font declaration like \itshape is defined as \fontshape{it}\selectfont. The high-level commands to select font sizes are: \tiny \scriptsize \footnotesize \small (5pt) (7pt) (8pt) (9pt) \normalsize \large \Large (10pt) (12pt) (14.4pt) \LARGE \huge \Huge (17.28pt) (20.74pt) (24.88pt) The sizes listed for the commands are those when 10pt (the default) has been selected as the basic size option in the \documentclass command; for 11pt and 12pt, they will all scale accordingly. The family declarations and their standard family attribute values are: \rmfamily (cmr) \sffamily (cmss) \ttfamily (cmtt) which are the three Computer Modern families, Roman, Sans Serif, and Typewriter (Section G.2.2). The series declarations and their initial attribute values are: \mdseries (m) \bfseries (bx) meaning that only a medium and a bold extended series are provided as standard. Finally, the shape declarations and their attribute values are: \upshape \slshape (n) (sl) \itshape \scshape (it) (sc) to select upright, slanted, italic, and Small Caps. Note that there are no high-level declarations for the encoding attributes. This is because there is normally no need to change encoding within a document. An exception might be to use Cyrillic fonts (coding OT2), in which case one could define \newcommand{\cyr}{\fontencoding{OT2}\selectfont} \newcommand{\lat}{\fontencoding{OT1}\selectfont} to be able to switch back and forth more conveniently. The family, shape, and series attributes may be reset to their standard values at any time with the \normalfont command, which also activates that font in the current size. For each of the above font attribute declarations there is also a corresponding font command (Section 4.1.4) that sets its argument in that font. Thus \textit{text} is almost the same as {\itshape text}, the only difference being that the command also contains the italic correction automatically. The complete list of such commands is: 372 Appendix A. The New Font Selection Scheme (NFSS) Family: Series: Shape: Other: \textrm \textmd \textup \emph \textsf \textbf \textit \textnormal \texttt \textsl \textsc The \emph command is described in Section 4.1.1; \textnormal sets its argument in \normalfont. A.3 Installing fonts with NFSS In this section, we wish to elaborate on the internal workings of NFSS, showing how a set of attributes are associated with a particular font and how special symbols are assigned to their proper positions within various encoding schemes. A.3.1 Default attribute values We implied in Section A.2 that the font attribute declarations like \itshape are defined as \fontshape{it}\selectfont, whereas in fact they make use of certain default attributes. Thus the true definition of \itshape is \fontshape{\itdefault}\selectfont The default commands available are Family: Series: Shape: \rmdefault \mddefault \updefault \sfdefault \bfdefault \itdefault \ttdefault \sldefault \scdefault It is \itdefault that is defined to be the attribute it. It is also necessary to define the standard attributes chosen when the command \normalfont is issued. These are contained in the four defaults \encodingdefault \shapedefault \familydefault \seriesdefault All this may sound like a complicated route linking the high-level commands to a particular font. However, it does provide flexibility and modularity. The author only needs to know that three families, two series, and four shapes are available, and does not care what they really are. A programmer defines these with the defaults at a lower level. An example of how all the standard fonts may be replaced by PostScript ones, by simply redefining the three family defaults, is shown on page 379. Such redefinitions are much simpler than trying to alter the font declarations themselves, including \normalfont. Those definitions are in fact much more complex than implied here, whereas the default commands really are as simple as indicated. A.3. Installing fonts with NFSS A.3.2 ! 373 Defining font commands There are a number of commands available for defining new font declarations and commands. These are intended mainly for LATEX package programmers but may be used in a normal document as well. \DeclareFixedFont{\cmd}{code}{family}{series}{shape}{size} defines \cmd to be a declaration that selects the font of the specified attributes. It is rigidly fixed in all attributes. This is equivalent to \newfont except that the font is determined by attributes and not by name. \DeclareTextFontCommand{\cmd}{font specs} defines \cmd to be a font command that sets its argument according to font specs. This command is used internally to define all the font commands like \textbf, which is defined with font specs as \bfseries. \DeclareOldFontCommand{\cmd}{text specs}{math specs} defines \cmd to be a font declaration that may be used in math mode in the manner of LATEX 2.09: as a declaration, not a command. It is useful for defining commands to be compatible with the old version, but should be avoided. For example, \it is defined with \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} A.3.3 Mathematical alphabets The font that has been activated for text processing does not influence the characters and their fonts in math mode, since special mathematical symbol fonts are used for this purpose. If a formula is to appear in bold face, the command \boldmath (Section 5.4.9) must be issued, which remains in effect until it is countermanded by \unboldmath. Both of these declarations must be made outside of math mode. These commands may still be employed in the same way under NFSS. However, the internal math font selection command is \mathversion{vers name} in which the argument vers name currently takes on values normal and bold. The declarations \unboldmath and \boldmath are defined in terms of this command. It is planned that special package files will become available to allow additional sets of math symbols. On the other hand, mathematical alphabet commands may be issued within math mode itself, to set letters as symbols in particular fonts (Section 5.4.2): \mathrm \mathcal \mathnormal \mathbf \mathsf \mathit \mathtt These are all commands operating on arguments rather than declarations, unlike the LATEX 2.09 equivalents. New math font alphabets may be defined by the user. For example, to define a slanted math font \mathsl, give 374 Appendix A. The New Font Selection Scheme (NFSS) \DeclareMathAlphabet{\mathsl}{OT1}{cmr}{m}{sl} which means that the new math font command \mathsl selects that font in family cmr with weight m and shape sl, which, with the normal font definitions, is font cmsl in the appropriate size. However, this font will be selected in all math versions, whereas it would be more suitable if a bold font were selected when \mathversion{bold} is in effect. This is accomplished by adding to the definition of \mathsl \SetMathAlphabet{\mathsl}{bold}{OT1}{cmr}{bx}{sl} which redefines \mathsl exceptionally for math version bold to be a font with weight bx. For the normal font definitions, this is cmbxsl in the current size. New math versions can be created with \DeclareMathVersion{vers name} and the fonts belonging to it are determined by issuing \Set... commands for each math alphabet or symbol font. A.3.4 ! Mathematical symbol fonts Mathematical symbols must be defined in a totally different manner from text characters: they bear a command name (like \alpha), may come from various fonts, behave differently depending on type, and can appear in different sizes. Under LATEX 2.09, the symbol names were fixed to the Computer Modern math fonts, but NFSS offers more flexibility for additional (or replacement) symbol fonts. A symbol font name is declared with the command \DeclareSymbolFont{sym fnt name}{code}{family}{series}{shape} which associates the name sym fnt name with the given set of attributes. This name is not a command, but rather an internal designation for use in defining symbols. The selected font is valid for all versions, but if a different font is to be associated with the same name under other versions, \SetSymbolFont{sym fnt name}{version}{code}{family}{series}{shape} may be used to redefine sym fnt name for that one version. The standard LATEX setup declares \DeclareSymbolFont{operators}{OT1}{cmr}{m}{n} \DeclareSymbolFont{letters}{OML}{cmm}{m}{it} \DeclareSymbolFont{symbols}{OMS}{cmsy}{m}{n} \DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n} the sequence of which is important for reasons that are built deeply into TEX itself. Once the symbol font names have been defined, they may be used to construct math alphabets and various types of symbols. A.3. Installing fonts with NFSS 375 \DeclareSymbolFontAlphabet{\math alph}{sym fnt name} defines \math alph to be a math alphabet based on the font with the internal name sym fnt name. This command is to be preferred over \DeclareMathAlphabet if a symbol font exists with the proper attributes for the math alphabet. The primary command for defining symbols is \DeclareMathSymbol{\symbol}{type}{sym fnt name}{pos} which makes \symbol print the symbol in position pos of font sym fnt name. The pos is a number, in decimal (10), octal (’12) or hexadecimal ("0A) representation. The type specifies the functionality of the symbol and is one of \mathord \mathop \mathbin \mathrel \mathopen \mathclose \mathpunct \mathalpha an ordinary symbol P a large operator like a binary operator like × a relational operator like ≥ an opening bracket like { a closing bracket like } punctuation an alphabetic character Math alphabet commands operate only on the symbols of type \mathalpha; other types always produce the same symbol, for a given math version, within all math alphabets. Similarly, math accent commands are established with \DeclareMathAccent{\cmd}{type}{sym fnt name}{pos} where type is either \mathord or \mathalpha; in the latter case, the symbol changes with the math alphabet. Math delimiters and radicals can appear in two different sizes. They are set up with \DeclareMathDelimiter{\cmd}{type}{sym fnt1}{pos1}{sym fnt2}{pos2} \DeclareMathRadical {\cmd} {sym fnt1}{pos1}{sym fnt2}{pos2} which define \cmd to print the smaller variant from position pos1 of font sym fnt1 and the larger from position pos2 of sym fnt2. The sizes have not been specified in any of the above math declarations. This is because there are normally four different sizes available, depending on the math style, as explained in Section 5.5.2. However, these sizes must somehow be specified. This is done with \DeclareMathSizes{text}{math text}{script}{sscript} where the four arguments are numbers giving a point size. When the normal text font is size text pt, \textstyle will be in math text size, \scriptstyle in script, and \scriptscriptstyle in sscript size. For example, \DeclareMathSizes{10}{10}{7}{5} All the \Declare... and \Set... commands may only be called in the preamble. 376 Appendix A. The New Font Selection Scheme (NFSS) A.3.5 Addressing the attribute values ! In some programming situations, it is necessary to make use of the current values of the attributes without knowing what they are. These are stored in the internal commands \f@encoding \f@family \f@series \f@shape \f@size \f@baselineskip \tf@size \sf@size \ssf@size The values of these commands should never be changed directly. However, they may be used to test if they possess a certain value. Since they all contain the character @ in their names, they may only be used in class or package files, and not in the main document file. A.3.6 Defining fonts under NFSS Under NFSS, fonts are specified within a document by giving the attributes required and then calling \selectfont. How is the set of font attributes then associated with a particular external font name such as those found in Appendix G? This is done by means of font definition commands which are usually stored in files with extensions.def and.fd. First the declaration \DeclareFontEncoding{code}{text set}{math set} sets up a new encoding attribute named code; whenever a text font of this encoding is selected, text set is executed in order to redefine accent commands or other things that are coding dependent; similarly math set is called for every math alphabet of this encoding. It is possible to define default text set and math set with \DeclareFontEncodingDefaults{text set}{math set} This allows general text and math mode settings to be declared with this command, while more specialized ones, which are executed afterwards, appear in \DeclareFontEncoding. If no font can be found for the specified attributes, \DeclareFontSubstitution{code}{family}{series}{shape} declares the values of the attributes that should be substituted; substitutions are made in order of shape, series, then family; the encoding is never substituted. If even this fails to find a valid font, then \DeclareErrorFont{code}{family}{series}{shape}{size} determines which font is to be used as a last resort. A new family with a specified encoding scheme is established with \DeclareFontFamily{code}{family}{option} A.3. Installing fonts with NFSS 377 where option is a set of commands that may be executed every time a font of this family and encoding is selected. The main font-defining declaration that associates external font names with font attributes is \DeclareFontShape{code}{family}{series}{shape} {font def }{option} where option is additional commands that are executed when one of these fonts is selected. The font def contains a series of size/font associations, each consisting of a size part, a function, an optional argument, and a font argument. For example, \DeclareFontShape{OT1}{cmr}{m}{n} { <5> <6> <7> <8> <9> <10> <12> gen * cmr <10.95> cmr10 <14.4> cmr12 <17.28> <20.74> <24.88> cmr17}{} states that the medium series, normal shape members of the cmr family are to be represented by external fonts cmr5 . . . cmr12 for sizes 5–12 pt, by cmr10 scaled to 10.95 pt for sizes near 11 pt, and so on. If the specified size is not present, the nearest size within certain limits is taken instead. The size part consists of numbers in angle brackets, representing point sizes. The brackets may also contain ranges, as <-10> means all sizes up to, but excluding, 10 pt, <10-14> means 10 pt to less than 14 pt, and <24-> indicates 24 pt and higher. The possible functions are: (empty) loads the named font scaled to the requested point size; if an optional argument in square brackets precedes the font name, it acts as an additional scaling factor; <11> [.95] cmr10 would load cmr10 scaled to 95% of 11 pt; gen * generates the font name by appending the point size to the font argument; <12> gen * cmr loads cmr12; genb * generates the font name by appending the point size times 100 to the font argument (for DC and EC fonts, page 501); <14.4> genb * ecss loads ecss1440; sub * substitutes a different font whose attributes are given in the font argument as fam/ser/shp; <-> sub * cmtt/m/n this is best used when there is no font of the required attributes; a message is output to the monitor and to the transcript file; 378 Appendix A. The New Font Selection Scheme (NFSS) subf * is like the empty function, but issues a warning that an explicit substitute font has been loaded; fixed * loads the specified font at its normal size, ignoring the size part; if an optional argument is given, it is the point size to which the font is scaled, as in <10> fixed * [11] cmr12 which loads cmr12 at 11 pt when 10 pt is requested. All the above functions may be preceded by an s to suppress messages to the monitor. Thus silent sub * is ssub *, and silent empty is s *. As another example, consider the definition of bold, italic, typewriter, for which there is no font in the Computer Modern collection: \DeclareFontShape{OT1}{cmtt}{bx}{it}{ <-> ssub * cmtt/m/it }{} This substitutes (silently) for all sizes (<->) the medium italic typewriter attributes. Which fonts those are is determined by a \DeclareFontShape command with those attributes. The font definition commands may be issued in a package file, or even in the document itself. However, the normal procedure is to store each of the \DeclareFontEncoding commands in a file named codeenc.def (for example, ot1enc.def for the OT1 encoding), and to place the commands \DeclareFontFamily and \DeclareFontShape in a file whose name consists of the encoding and family designations plus the extension .fd. For example, the shape specifications for encoding OT1 and family cmr are to be found in ot1cmr.fd. When a coding and family combination that is not already defined is selected, LATEX tries to find the appropriate .fd file for input. It is therefore not necessary to input such files explicitly, for they are loaded automatically as required. Package: However, it is important that the encoding be declared beforehand. If fontenc it is not already known in the current format, \DeclareFontEncoding must be issued, either explicitly, or by loading the codeenc.def file. One way to do this is to invoke the standard package fontenc, as for example \usepackage[OT2,T1]{fontenc} where the desired codings are listed as options in square brackets, the last of which is made current. The normal user will never need to worry about such problems. However, LATEX programmers will find things considerably easier for them. For example, to install PostScript fonts under NFSS is almost trivial. The common PostScript fonts are already defined as separate families in .fd files of their own; for example, ot1ptm.fd associates PostScript Times fonts to a family named ptm. A package to activate these fonts is supplied under the name times.sty containing essentially the lines A.3. Installing fonts with NFSS 379 \renewcommand{\rmdefault}{ptm} \renewcommand{\sfdefault}{phv} \renewcommand{\ttdefault}{pcr} \renewcommand{\bfdefault}{b} This makes Times ptm the default Roman family, invoked with the command \rmfamily, Helvetica phv the default sans serif family (called by \sffamily), and Courier pcr the default typewriter family (activated by \ttfamily). The default attribute for bold face is defined to be b instead of the regular bx, since bold extended is not provided by these fonts. Another two examples of the usefulness of NFSS are the Cyrillic fonts of the University of Washington (Section 12.4.2) and the extended EC fonts with the Cork encoding (Section G.4.3). Both of these may be activated within a document simply by selecting another encoding, OT2 for Cyrillic, T1 for the EC fonts. (These encodings must first be declared, for example with the fontenc package as illustrated on the facing page.) A.3.7 ! Encoding commands In LATEX, special characters and accents are addressed by means of commands, such as \O to print the Scandinavian letter Ø. The position of this character in the font tables depends on the encoding (character 31 in OT1 and 216 in T1), so that it is necessary to redefine all such symbol commands when the encoding is altered. This is carried out with the help of certain encoding commands, which normally appear in the codeenc.def file along with the \DeclareFontEncoding command. To define a command that functions differently in the various encodings, \ProvideTextCommand{\cmd}{code}[narg][opt]{def } \DeclareTextCommand{\cmd}{code}[narg][opt]{def } are available and behave just like \providecommand and \newcommand except \cmd has the definition def only when the encoding code is active. Thus \cmd may have different definitions for each encoding. \DeclareTextSymbol{\cmd}{code}{pos} defines \cmd to print the character in the font position pos when encoding code is active. \DeclareTextAccent{\cmd}{code}{pos} defines \cmd to be an accent command, using the character in font position pos as the accent symbol, when encoding code is active. \DeclareTextComposite{\cmd}{code}{letter}{pos} \DeclareTextCompositeCommand{\cmd}{code}{letter}{def } define the action of command \cmd followed by the single letter either to print the character in font position pos or to execute the definition def. These declarations are most useful with the T1 encoding, where many accented letters are separate 380 Appendix A. The New Font Selection Scheme (NFSS) symbols on their own (Section G.4.3). Thus \’{e} in OT1 prints an acute accent (character 19) over the letter e, while in T1, it prints the single character in position 233. This behavior is achieved with \DeclareTextAccent{\’}{OT1}{19} \DeclareTextComposite{\’}{T1}{e}{233} The command must already have been defined for the encoding, either with \DeclareTextAccent or with \DeclareTextCommand; in the latter case, it must be defined to take a single argument. All of the above definition commands create new commands for a specific encoding. If the defined commands are invoked in some other encoding, an error message is issued. Default definitions may be provided for all unspecified encodings with \DeclareTextCommandDefault{\cmd}[narg][opt]{def } \ProvideTextCommandDefault{\cmd}[narg][opt]{def } \DeclareTextAccentDefault{\cmd}{code} \DeclareTextSymbolDefault{\cmd}{code} where the first two create a default definition that applies to all unspecified encodings, while the second two declare which encoding is to be taken as the default. B The LATEX Clockwork In this appendix, we describe how the TEX program and LATEX files are installed, how they are organized, what their roles are. Throughout this book we have given examples of contributed packages, but here we list those packages and other files that belong to the ‘kernel’, the essential installation. In Section B.6, we explain how LATEX ticks, what happens during a processing run, and what all the various file types mean. B.1 Installing LATEX We explain first LATEX installations in general before looking at the particular one provided on the enclosed TEXLive CD. B.1.1 TEX implementations One must have the TEX program and its auxiliaries (METAFONT, font files) before LATEX can be set up on top of it. Installing TEX is a somewhat daunting experience, but thankfully it need not be done very often and there are many ready-to-run implementations available for practically every computer operating system. These can be obtained from CTAN under the directory systems (Figure B.4 on page 390) or from the TEX Users Group (www.tug.org). The system delivered with the TEXLive CD is that developed by Karl Berry known generically as Web2c. This name derives from the fact that it converts Donald Knuth’s original TEX source files from his Web language (no relation to the World Wide Web) into the C programming language for subsequent compilation with a C compiler. The teTEX implementation, by Thomas Esser, applies Web2c to Unix machines, while Fabrice Popineau’s fpTEX is the Win32 (Windows 95, 98, NT, 2000, XP) version. Another excellent TEX implementation for Windows is MikTEX by Christian Schenk, available from CTAN under systems/win32/miktex/. 381 382 Appendix B. The LATEX Clockwork The implementation for DOS, emTEX by Eberhardt Mattes is still available from CTAN, but is no longer appropriate for modern PCs. We used to produce the first two editions of this book and found it superb for its time. Commercial packages for TEX also exist, offering graphics display of the output while you type: for Windows (Y&Y Inc., www.YandY.com/) and Textures for Macintosh (Blue Sky Research, www.bluesky.com/). A ‘whatyou-see-is-what-you-get’ TEX system is Scientific Workplace, which can be purchased from MacKichan Software Research (www.tcisoft.com/). It should be stressed that the TEX and pdfTEX programs in all the above implementations are identical (for the same version number). They provide ready-to-run executable programs from the same source code, which are necessarily different for different computer types. There are also minor variations as to how the programs are run. The LATEX files are all ascii so they are fully compatible with all systems. One uses the already installed TEX or pdfTEX program to generate the LATEX formats (Section B.1.3). Even this task is normally done for you by the above implementations. A graphics interface to TEX and LATEX is not absolutely essential, but today it is almost unthinkable to do without one. This is an editor program for writing and managing the LATEX source files, and calling the various programs (LATEX, BIBTEX, MakeIndex) and invoking viewers by clicking icons. For Unix, the emacs is normally used for this; for Windows, the two editor programs mentioned in Section 1.6.2, Winshell and WinEdt can be highly recommended. B.1.2 The TEXLive CD The TEX Users Group, TUG issues a set of CDs each year to its members containing the latest TEX and LATEX installations, with executable files for Win32, Linux, Macintosh, and all known flavors of Unix. As of the 7th issue in 2002, it was necessary to split the contents over 2 CDs, separating the Unix versions from the others. Each CD is otherwise complete, missing only the executables of the other one. The TEXLive CDs are maintained by Sebastian Rahtz who has kindly agreed to allow the CD for Windows, Linux, Mackintosh to be included with this book, as it stands in June 2003. It thus corresponds to something between the 7th and 8th regular issues. The startup window in Figure B.1 appears when the CD is inserted into your computer. If the autorun function does not work, you can run the autorun.exe program directly from the CD. You then proceed with the installation by clicking Install on the upper bar. You then follow the instructions on the various pages that then appear, making selections as you go. One choice is whether to install to run from the CD, or to install to the hard disk. In the former case, B.1. Installing LATEX 383 Figure B.1: The TEXLive welcome you have the entire installation available with little lost of storage, but will need to have the CD mounted in the player whenever you run LATEX. Processing time will also be slower. If you elect to install only part of the system to hard disk, you may still add further packages and support programs later by clicking maintenance. Or you may run texsetup --maintenance which does the same thing bypassing the Welcome window. Running texsetup --help produces a list of all the options. You may also click Documentation→View TexLive doc to open the instruction manual for TEXLive, with details for all systems. (Or you can go directly to \texmf\doc\tldoc\english\ and select live.pdf or live.html.) Documentation for most of the packages and collections are available on the CD under \texmf\doc\..., if the author has provided a description. We often refer to such manuals throughout this book, indicating more precisely where they are to be found. By clicking Documentation→Run TeXDocTK, you may open a documentation browser (Figure B.2) to assist finding descriptions for any module. The TEXLive installation program will do all the housekeeping for you, 384 Appendix B. The LATEX Clockwork Figure B.2: The TEXLive documentation browser placing files in the right directories, setting up font mapping files, and generating the formats. However, there might still be times when you want or have to do some of this yourself. This we explain in the next sections. B.1.3 Making the LATEX format Adding or updating LATEX on to an existing TEX installation by hand is relatively straight forward. One must obtain the source files, which on TEXLive are located at \texmf\source\latex\base\ or on CTAN at tex-archive/macros/latex/base/. At CTAN, instruction files with extension .txt are available for the various implementations, such as miktex.txt and web2ctex.txt, as well as the general instruction file install.txt. These source files are a set of packed files consisting of a large number of .dtx files, the integrated source and documentation files. These are unpacked by running initex on the batch job file unpack.ins. This generates the necessary.cls,.sty,.clo, and other files. It also constructs the fundamental file latex.ltx which is needed to produce the format file. On CTAN, the unpacked files are already provided in a parallel directory unpacked. The next step should be to run initex on the latex.ltx file to produce the LATEX format latex. However, before doing that, there are a number of configuration aspects to be considered. At several points during the processing, certain files are read in, but if a file of the same name but extension .cfg exists, it is loaded instead. It is this device that permits one to configure the final format for local conditions or desires. The possible configuration files are: texsys.cfg offers the possibility of adding some very machine-specific adjustments for older versions of TEX or for some peculiarities of the TEX installation; information is to be found in the specific .txt file, or in ltdirchk.dtx; B.1. Installing LATEX 385 fonttext.cfg is loaded in place of fonttext.ltx if it is present; this defines the fonts that are to be available for processing text; details can be found in fontdef.dtx; fontmath.cfg is loaded in place of fontmath.ltx if it is present; this is the equivalent of fonttext.cfg for math fonts; preload.cfg is loaded in place of preload.ltx if it is present; this determines which fonts are preloaded into the format; a number of other preload files may be extracted from preload.dtx, any one of which may be renamed to.cfg to be implemented; hyphen.cfg is loaded in place of hyphen.ltx if it is present; this specifies the hyphenation patterns and their assignments; by default, the patterns in hyphen.tex are loaded into language 0; the babel system provides such a configuration file (Section 11.1) which must be used if babel is to be incorporated into the format, in which case, language.dat must be tailored to local requirements. The only configuration file that you are likely to want to change is hyphen.cfg, especially if you are going to be using LATEX for languages other than American English. Once any configuration files have been set up and located where TEX can read them, initex may be run on latex.ltx with initex latex.ltx tex -ini latex.ltx or The resulting latex.fmt must be placed where format files are read. For fpTEX as installed by TEXLive, this is in texmf-var\web2c\. Other unpacked files must be moved to texmf\tex\latex\base\; these are latexbug.tex, testpage.tex, lablst.tex, idx.tex, nfssfont.tex, small2e.tex, sample2e.tex, and docstrip.tex, and all files with extensions.cls,.clo,.sty,.fd,.def, and.cfg. Files with extension.ist are moved to texmf\makeindex\base\. To make up the LATEX format with pdfTEX, run instead pdfinitex -fmt=pdflatex latex.ltx pdftex -ini -fmt=pdflatex latex.ltx or This processes latex.ltx base file once more, but names the resulting format file pdflatex.fmt rather than latex.fmt. This is necessary because the format files may only be used with the program that generated them, so the two must be distinguished even though they both are essentially the same thing. Move this format too to the format file directory. The actual commands to invoke TEX or pdfTEX with LATEX (what we normally call ‘running LATEX or pdfLATEX’) are 386 Appendix B. The LATEX Clockwork tex &latex pdftex &pdflatex meaning ‘run the TEX or pdfTEX program with the specified format file’. The system should have shortcuts named latex and pdflatex that translate to the above. The web2c system, for which fpTEX is the Win32 implementation, has a different method. It stores all the necessary configuration information in a file named texmf.cnf located in the texmf\web2c directory. This sets up environments according to the name of the program being run, and in particular, adds the format name automatically for a TEX-like program. Thus a TEX program named latex will use the latex.fmt format file if none is specified. However, there is no real program named latex, so on Unix systems, an alias with this name is established to point to the tex executable program. On Win32, the actual TEX executable code is in a dynamic link library tex.dll and very small files named tex.exe, latex.exe exist to use this one library. These .exe files are in fact identical, and are really only there to ensure that different formats are invoked automatically when they are called. Similarly, there are pdftex.dll, pdftex.exe, and pdflatex.exe. If any additional formats are ever needed for these programs, one only needs to copy one of these .exe files to the new name. B.1.4 Updating the database TEX works with a very large number of files, for classes, packages, fonts, formats, and so on. A set of environments are used to indicate where the program should search for these files. With web2c, these are all defined in the texmf.cnf configuration file mentioned above. The user normally does not have to worry about this. However, to speed up the search, a database is prepared giving the exact location of all the files in the search paths. This database will be created and updated automatically if installation programs are used, such as that for TEXLive. If the user should add a new package or fonts collection by hand, without going through an installation program, it will be necessary to update this database. Under web2c (and fpTEX), this is carried out with the command mktexlsr Under MikTEX, one must run configure --update-fndb or click ‘refresh now’ in the MikTEX options program. It is not necessary to update the database if existing files are being replaced. It is only the names and locations of the files that go into the database, not their actual versions or sizes. B.3. TEX directory structure B.2 387 Obtaining the Adobe euro fonts As pointed out in Section 2.5.8, the type 1 euro currency symbol fonts from Adobe Systems Inc. that are used with the europs and eurosans packages cannot be distributed on CDs like TEXLive, nor on CTAN, since Adobe reserves the exclusive right to distribution, even though free of charge. TEXLive and CTAN do provide all other files needed, like the font metric.tfm and font definition.fd files. You can obtain the Adobe euro.pfb files from www.adobe.com/type/ eurofont.html, downloading the appropriate file for your computer type. They must be unpacked (on Windows, for example, you just execute the downloaded eurofont.exe) and then rename them as follows: Windows _1______.PFB _1I_____.PFB _1B_____.PFB _1BI____.PFB PostScript EuroSans-Regular EuroSans-Italic EuroSans-Bold EuroSans-BoldItalic TEX zpeurs.pfb zpeuris.pfb zpeubs.pfb zpeubis.pfb _3______.PFB _3I_____.PFB _3B_____.PFB _3BI____.PFB EuroSerif-Regular EuroSerif-Italic EuroSerif-Bold EuroSerif-BoldItalic zpeur.pfb zpeuri.pfb zpeub.pfb zpeubi.pfb _2______.PFB _2I_____.PFB _2B_____.PFB _2BI____.PFB EuroMono-Regular EuroMono-Italic EuroMono-Bold EuroMono-BoldItalic zpeurt.pfb zpeurit.pfb zpeubt.pfb zpeubit.pfb The first column is the name as unpacked on Windows, the second the internal PostScript name, and the third, the name used by TEX. The .pfb files must be renamed to those in the third column, and placed in texmf\fonts\type1\adobe\euro (or better in texmf-local). The font map file zpeu.map must also be added to the lists of font maps for dvips, dvipdfm, and pdfTEX (Section 10.1.3). The TEXLive installation does all this for you; you only need to get and store the.pfb files. B.3 TEX directory structure The TEX system, of which LATEX is only one part, albeit a large one, requires a very large number of files, for fonts, formats, classes, packages, bibliographies, and much more. Section B.6 lists the types of files and their extensions, at least for what concerns LATEX. Other flavors of TEX have their own types in addition. 388 Appendix B. The LATEX Clockwork texmf bibtex dvipdfm doc pk fonts dvips source tfm type1 generic makeindex hyperref source pdftex tex vf latex babel config dvips hyphen base metafont plain amsfonts base natbib psnfss config tools Figure B.3: The TDS directory tree In the early days, anyone setting up a TEX installation would try to create order of some sort by distributing the files into different directories (also called folders) according to their functions. However, everyone had their own ideas how to do this. Thus changing from one installation to another required a totally new road map. The TEX Users Group, TUG, commissioned a working group to prepare a recommended standard, which published its results in 1994. The latest version of this paper is on TEXLive at \texmf\doc\tds\ in various formats. The TEX Directory Structure (TDS) described there can only be a recommendation, but it is fairly universally followed today. The TEXLive CD certainly conforms to it. Figure B.3 offers an overview of TDS. The top directory is named texmf, to demonstrate that it holds the entire TEX and METAFONT systems. This may not be the absolute top directory on any installation. For example, if you install to a Windows hard disk, you might find it in \program files\texlive\texmf. Furthermore, there might be parallel directories named texmf-var (where the system writes files it creates, like font .pk files) and texmf-local for any private packages you install yourself. The idea is to keep the main texmf tree intact, to let the TEXLive installation program manage it. These parallel trees should have the same structure, but may be incomplete. The subdirectories under texmf are the main classification of the subsequent files, sorted mainly by program, such as BIBTEX (Section 14.1), B.4. The CTAN server 389 dvipdfm (Section 10.2.2), dvips (Section 10.1.1), MakeIndex (Section 9.4.3), METAFONT (Section G.3), and pdfTEX (Section 10.2.3). Others are doc containing documentation of all sorts; its subdirectories are similarly structured to those under tex; most of the documentation files that we have referred to in this book are to be found here; fonts is subdivided according to the types of files explained in Section G.1: pk for the pixel files (these usually go into texmf-var), tfm for the font metric files, vf for virtual font files, source for the METAFONT .mf sources, type1 for the.pfb or.pfa PostScript outline font files; the contents of each of these directories are further sorted by supplier (adobe, public, . . . ), and then by font family (times, cm, . . . ); source contains the delivery files for packages and collections; for LATEX, these are the.dtx and.ins files, found under latex\base; similarly for packages, such as latex\geometry containing geometry.dtx and geometry.ins; these are not needed any more once installed; the subdirectories under source mirror those under tex; tex is the main directory for files directly related to TEX; some of its subdirectories are generic for files that apply to all TEX applications, like hyphenation patterns; latex for all the LATEX related files; this is further subdivided into directories for individual packages; only a handful are shown in the figure; base contains the fundamental LATEX files, the kernel; plain for Plain TEX, which is often just called TEX (Section 1.3.2). This directory structure allows a user to locate documentation, source, running files for a package, collection, program, on all installations. The documentation and source files can readily be removed, or not copied at all from the CD, since they play no role during the processing. This structure makes it easy to remove such unnecessary branches of the tree. B.4 The CTAN server The easiest way to obtain the LATEX software not available on the TEXLive CD is via one of the network servers supported by various educational institutions. They also provide the most up-to-date standard LATEX installation, TEX extensions, programs for running TEX, collections of drivers for different printers, hyphenation patterns for other languages, etc. Such a server is a treasure trove for the dedicated TEX and LATEX user. 390 Appendix B. The LATEX Clockwork tex-archive fonts support systems macros msdos win32 language hyphenations latex2html tex4ht amsfonts cm ec latex doc psfonts required latex latex209 base unpacked contrib supported other amslatex babel cyrillic graphics psnfss tools Figure B.4: Partial directory tree of CTAN servers There are three main network servers for TEX and LATEX located in the United States, Great Britain, and Germany, forming the Comprehensive TEX Archive Network, CTAN. They are not only kept up to date but also regularly exchange contributions among themselves. They are all reachable on the Internet. Country Internet address USA UK Germany ftp://ctan.tug.org/tex-archive/ ftp://ftp.tex.ac.uk/tex-archive/ ftp://ftp.dante.de/tex-archive/ In addition, there are many full and partial mirrors of these sites. See the TUG home page, http://www.tug.org, for details. The directory structure is the same for all three servers. A sketch of the main parts of the directory tree is presented in Figure B.4. The latest version of the LATEX source files may be found under the subdirectories base or unpacked, where in the latter the files are already unpacked and latex.ltx is ready. The LATEX extensions and general style files that have been contributed by other users are located in the subdirectory contrib/supported, with each contribution in a subdirectory of its own. Extensions offered by the LATEX3 Team are found in the required subdirectory, which include babel, graphics, tools, and so on. B.5. Additional standard files B.5 391 Additional standard files Throughout this book we have pointed out and explained many contributed packages that expand LATEX functionality. However, there are a number of service documents, additional classes, and packages that are delivered with the basic LATEX installation, found in texmf\tex\latex\ base\. We list them all here, although some have been mentioned in other sections. B.5.1 Special documents The standard installation includes a number of special ‘documents’, files with the.tex extension. These are: small2e.tex a short sample document; sample2e.tex a longer sample document; lablst.tex (Section 9.2.1) for printing out all the cross-reference labels, with translations and page numbers; it asks interactively the name of the document that is to be so listed; idx.tex (Section 9.4) lists all the \index entries for a document, ordered in two columns, by page; it asks interactively the name of the document that is to be so listed; testpage.tex to test the positioning of the text on a page; this is more a test of the printer driver, to make sure that the margins are correct and that the scaling comes out properly; nfssfont.tex is a document to print out a font table, sample text, and various other tests; it asks for the name of the font interactively; the command \help prints out a list of commands that can be given; docstrip.tex (Section D.7.1) this is more a program than a document; it is the basic tool for unpacking operating files from their documented source files; it not only removes comments, but also includes alternative coding depending on various options. B.5.2 Extra classes In addition to the standard classes that have already been discussed (book, report, article, letter) the standard installation also contains proc for producing camera-ready copy of conference proceedings; it is a variant of the two-column article class; it contains one extra command: \copyrightspace, which leaves blank space at the bottom of the first column for typing in a copyright notice; 392 Appendix B. The LATEX Clockwork minimal a bare-bones class for testing and debugging; slides (Section 15.1) the former SLITEX, for producing presentation material; ltxdoc (Section D.7.2) to produce class and package documentation. B.5.3 Standard packages The standard packages, some of which are described elsewhere, are: alltt (Section 4.9.1) enables the alltt environment which is much like verbatim except that \ { } behave as normal; this means that commands included in the text are executed and not printed literally; doc (Section D.7.2) provides many special features for documenting LATEX packages; exscale allows the mathematical symbols that appear in different sizes to scale with the font size option given in the \documentclass command; normally the size of these symbols is fixed, independent of the basic size of the text; flafter (Section 7.2, page 171) ensures that floating objects (figures and tables) do not appear before their position in the text; fontenc (Section A.3.6, page 378) declares font encodings by loading their.def files; the names of the encodings are listed as options; graphpap (Section 13.1.5) provides the command \graphpaper which produces coordinate grids in the picture environment; ifthen (Section 8.3.5) allows text or command definitions depending on the state of various conditionals; one may test the state of a boolean switch, the value of a counter or length, or the text definition of a command; inputenc (Section D.5) allows a LATEX document file to be prepared with a system-dependent input encoding scheme for special characters; latexsym loads the 11 special LATEX symbols in the lasy fonts (Section G.2.2), which were part of LATEX 2.09; this file is automatically read in in compatibility mode; makeidx (Section 9.4.3) provides the commands that may be used with the MakeIndex program to generate a keyword index; showidx (Section 9.4) makes the \index entries visible by printing them as marginal notes; B.5. Additional standard files 393 shortvrb (Section 4.9.1) provides the commands \MakeShortVerb and \DeleteShortVerb, to designate (and remove) a certain character as the equivalent of \verb for printing literal text. The character, preceded by a backslash, is given as an argument to these commands. After \MakeShortVerb{\|} has been issued, |\cmd{x}| is equivalent to \verb|\cmd{x}|, producing \cmd{x}; syntonly provides the command \syntaxonly which, when given in the preamble, suppresses all output to the .dvi file, but continues to issue errors and warnings; the job runs about four times faster than normal; this is used to check the processing when output is not immediately needed; t1enc makes the T1 font encoding (Section G.4.3) the standard, for use with DC or EC fonts; textcomp makes the special symbols in the text companion fonts available in text mode (Section G.4.4); tracefnt is a diagnostic tool for checking NFSS font selections; the options given with \usepackage control its action: errorshow suppresses all warnings and information messages to the monitor, which are still sent to the transcript file; only error messages are printed to the monitor; warningshow prints warnings and error messages on the monitor; this behavior is much the same as when the package is not used at all; infoshow (default option) sends font selection information to the monitor, which is normally only written to the transcript file; debugshow writes considerably more information to the transcript file about every change of font; can produce a very large transcript; pausing turns all warnings into error messages so that processing temporarily stops, awaiting user response; loading shows the loading of external fonts. B.5.4 The tools packages The members of the LATEX3 Team, as individuals, have written a number of packages that they collectively make available; these are to be found in the texmf\tex\latex\tools\ directory. Although contributions, they are considered to be part of the standard installation. Many of these have been described elsewhere in this book, but we list them all here. 394 Appendix B. The LATEX Clockwork afterpage (Section 7.1 on page 171) permits commands to be saved and executed at the end of the current page. This is useful for forcing stubborn floats to be output right away, with \afterpage{\clearpage}. If \clearpage were issued directly, a new page would be inserted at that point. With \afterpage, the command is reserved until the end of the page. array (Section 4.8.4 on page 106) is a re-implementation of the tabular and array environments with several additional features. bm permits individual math symbols to be printed in bold face with command \bm{\sym}. Thus $\alpha + \bm{\beta}$ produces α + β without recourse to the \boldmath command which would set the whole formula in bold face. There is also a command \DeclareBoldMathCommand{\name}{\sym} that defines \name to be \bm{\sym}. calc re-implements the counter and length commands to allow ‘normal’ arithmetic with them, such as \setlength{\mylen}{3cm + \textwidth} \setcounter{page}{\value{section} * 3} \parbox{\linewidth / \real{1.6}}{...} Note that the arithmetical expressions can be used not only to set values but also as arguments to commands and environments. dcolumn (Section 4.8.4) requires the array package; it allows decimal point alignment in the tabular tables. delarray (Section 4.8.4) requires the array package; it permits large bracketing symbols to be put around array environments, for making matrices of various sorts. enumerate (Section 4.3.5, page 74) re-implements the enumerate environment so that an optional argument determines the numeration style. fileerr.dtx when unpacked, produces a set of small files that may be used to reply to TEX when a file is not found; this makes the responses similar to those for error messages; the files are named h.tex, e.tex, s.tex, and x.tex; thus, replying xhreturni loads the last one, which terminates the input. fontsmpl is a package to output a sample text, accents, and special characters for a given font; with the accompanying file fontsmpl.tex, a family such as cmr can be printed with all attributes and encodings. ftnright puts footnotes in the right-hand column in two-column mode. B.5. Additional standard files 395 hhline requires the array package; allows more flexibility in putting horizontal rules in tables. indentfirst (Section 3.2.4 on page 46) indents the first paragraph of sections, which normally are not indented. layout (Section 3.2.5 on page 47) defines the command \layout which draws a diagram of the current page format, with the values of the parameters printed. longtable (Section 4.8.4 on page 108) makes tables that extend over several pages, with breaks occurring automatically. multicol (Section 3.2.8) introduces the environment multicols which switches to multi-column output without a page break either before or after. It is called with \begin{multicols}{num cols}[header text][pre space] Text set in num cols columns \end{multicols} The optional header text is printed in a single column across the top of the multi-column part. A \newpage is issued only if the remaining space on the current page is less than a certain value, stored in the length \premulticols; the optional length argument pre space overrides this value if given. Similarly the length \postmulticols determines whether a new page is inserted at the end of the multicolumn text. Column separation and possible rule are set by the standard LATEX lengths \columnsep and \columnseprule as for the \twocolumn command. The text in the multi-column format is balanced; that is, the columns are all equally long. showkeys prints out all the cross-reference keys defined by \label and \bibitem and used by \ref, \pageref, and \cite; these are marginal and interlinear notes for a draft only, to check the crossreferencing. somedefs allows only selected commands to be defined in a package, depending on options in \usepackage. tabularx (Section 4.8.4) defines a tabularx environment which is like tabular*, a table of desired width, except that it is the column widths that expand and not the intercolumn spacing. theorem provides extensions to the \newtheorem command for more flexible ‘theorem-like’ environments; it is very similar to the AMS amsthm package (Section 12.3.1). 396 Appendix B. The LATEX Clockwork varioref (Section 9.2.4) defines \vref and \vpageref commands, analogous to \ref and \pageref, which check if the referenced object is only one page away, and if so, print text like ‘on the previous page’; the actual text printed can alternate between two variants. verbatim (Section 4.9.1) is a re-implementation of the verbatim environment that prevents memory overflow for long texts; it also defines a command \verbatiminput to input a file and to print its contents literally, as well as a comment environment for a block comment in the input text. xr (Section 9.2.3) is a package to allow \ref to cross-reference \label commands from other documents. xspace (Section 8.3.1 on page 186) contains a device to fix the problem of command names swallowing up the blank that follows them; thus the command \PS defined as \newcommand{\PS}{PostScript\xspace} may be used as \PS file without having to terminate the \PS command with \ or {}. B.6 The various LATEX files A number of different files are used during the LATEX processing: some are read in while others are created to store information for the next run. They all consist of two parts: root name.extension For every LATEX document, there is a main file, whose root name is used when the program LATEX is called. It normally possesses the extension .tex, as do any other files that it might read in with \input or \include commands. (If they have a different extension, it must be given explicitly.) The other files that are created during a LATEX processing run normally have the same root name as the main file but a variety of different extensions, depending on their functions. If the main file contains \include commands, there will be additional files created having the same root names as the included.tex files but with the extension.aux. Some of these files are created with every LATEX run, whereas others appear only when certain LATEX commands have been issued, such as \tableofcontents or \makeindex. The .aux files as well as those produced by special LATEX commands may be suppressed by including the command \nofiles in the preamble. This command is useful if a document is being constantly corrected and reprocessed, so that the information in the special files is not yet finalized and may therefore be B.6. The various LATEX files 397 dispensed with. Files created at the TEX level of processing will always be generated. Other extensions describe files that contain formatting information, or additional instructions (coding), or databases. The root part of these file names is not associated with any document file. An example of this type is the article.cls file that defines the article class. The rest of this section contains a list of the LATEX file extensions with a short description of the role they play in the LATEX processing. .aux This is the auxiliary file written by LATEX, containing information for cross-references as well as some commands necessary for the table of contents and other lists. There will be one .aux file created (or re-created) for the main file, in addition to one for every file read in by an \include command. The auxiliary .aux files may be suppressed by issuing \nofiles in the preamble. .bbl This file is not created by LATEX, but by the program BIBTEX. It has the same root name as the main file. BIBTEX actually only reads the .aux file for its information. The.bbl file is read into the next LATEX processing run by the command \bibliography and produces the list of literature references. .bib Bibliographic databases have the extension.bib. BIBTEX reads them to extract the information it needs to generate the .bbl file. The root name describes the database and not (necessarily) any text file. The database name is included in the text by means of the \bibliography command. .blg This is the transcript file from a BIBTEX run. The root name is the same as that of the input file. .bst This is a bibliography style file that is used as input to BIBTEX to determine the format of the bibliography. The name of the .bst file is included in the text by means of the \bibliographystyle command. .cfg Some classes permit local configurations for paper size or other requirements by putting specifications into a .cfg file of the same root name as the class. The ltxdoc class (Section D.7.2) is one of these. .clo This is a class option file, containing the coding for certain options that might apply to more than one class. There is no special command to input them. .cls This is a class file, defining the overall format of the document. It is read in by the \documentclass command. A .cls file may also be input from another one with the \LoadClass command. 398 Appendix B. The LATEX Clockwork .def Additional definition files of various types carry the .def extension. Examples are t1enc.def (to define the T1 encoding) and latex209.def (for compatibility mode between LATEX 2ε and 2.09). .dtx These are documented source files for the LATEX installation. If a.dtx file is processed directly, the documentation is printed. This is an explanatory manual and/or a detailed description of the coding. The class, package,.ltx,.fd or other file(s) are extracted by processing the .dtx file with DocStrip (Section D.7.1), usually by running LATEX or TEX on a supplied.ins file. .dvi This is the TEX output file, containing the processed text in a format that is independent of the output printer, hence a ‘deviceindependent’ file. It too is generated by every TEX process run and cannot be suppressed by \nofiles. The.dvi file must be further processed by a printer driver program that converts it into the special commands for the desired output device (printer). .fd Files containing the NFSS commands associating external font names with font attributes (Section A.3.6) are font description files. The root names consist of the encoding and family designations, such as ot1cmr.fd. When a font of a given family is requested for the first time, the corresponding .fd file is automatically read in, if it exists. .fdd Documented sources for .fd files have the extension .fdd, and are nothing more than a special type of.dtx file. They may be processed for the documentation, or have the.fd files extracted by DocStrip. .fmt This extension belongs to a TEX format file that has been created with the special program initex (Section B.1.3). Format files contain all the basic instructions in a compact coding for quick loading. LATEX is nothing less than TEX run with the format latex.fmt. (Plain TEX uses the format file plain.fmt.) .glo This file is only generated when the command \makeglossary exists in the preamble. It has the same root name as the main file and contains only \glossaryentry commands that have been produced by \glossary commands in the input text. This file will be suppressed in spite of the presence of \makeglossary if the command \nofiles is issued in the preamble. .gls This file is the glossary equivalent of the.ind file. It too is generated by the MakeIndex program, but with the .glo file as input. The input and output extensions must be explicitly given. There are no standard LATEX commands to read in the.gls file. The doc package uses it to record a change history. B.6. The various LATEX files 399 .idx This file is only generated when the command \makeindex exists in the preamble. It has the same root name as the main file and contains only \indexentry commands that have been produced by \index commands in the input text. This file will be suppressed in spite of the presence of \makeindex if the command \nofiles is issued in the preamble. .ilg This is the transcript file from a MakeIndex run. The root name is the same as that of the input file. .ind This file is generated by the MakeIndex program, with the.idx file as input. It is read in by the \printindex command which is defined by the makeidx package. It contains a theindex environment, built up from the entries in the input file. .ins To facilitate the DocStrip run on a.dtx file, the necessary commands (and options) are put into an installation file. The extraction is then accomplished simply by processing (with TEX or LATEX) the appropriate.ins file. .ist This is an index style file, containing style settings for MakeIndex. The root name reflects the style and has no relationship to any text file. For the doc package, the files gind.ist and gglo.ist are provided for specialized index formatting. .lof This file contains the information for the list of figures. It behaves exactly like the .toc file except that it is opened by the command \listoffigures instead of by \tableofcontents. .log This is the transcript file, containing the protocol of the TEX processing run, that is, all the messages that were sent to the monitor during the run as well as additional information that can be of use to TEX experts when errors occur. This file is always generated, even when \nofiles has been issued. .lot This file contains the information for the list of tables. It behaves exactly like the .toc file except that it is opened by the command \listoftables instead of by \tableofcontents. .ltx For LATEX installation, certain files that are inputs to the initex program bear the extension .ltx. They form the basis for generating the format latex.fmt. The main such file is named latex.ltx. .mf METAFONT source files (Sections G.1 and G.3) contain drawing instructions for the characters in a font. The METAFONT program converts these to bitmap.pk files in a given size and resolution for DVI driver programs. 400 Appendix B. The LATEX Clockwork .pk Packed pixel, or bitmap, files (Section G.1) contain images of the characters in a font. These are read in by the DVI drivers to print the characters either on paper or on the computer monitor. .sty This is a package file, to be loaded with \usepackage. A package contains additional LATEX commands to define new features or alter existing ones. It should not produce any printable text. It may be input by another package with the command \RequirePackage. .tex The file containing the user’s input text should have the extension .tex. For every LATEX document there is at least one.tex file. If there is only one.tex file, it is also the main file that determines the root name of all the others. If there are \input or \include commands within the input text, there are other files belonging to the document with different root names but all with the extension.tex. The main file is the one whose name appears when the program LATEX is called. It contains the highest level \input commands and is the only file that may have \include commands. .tfm TEX font metric files (Section G.1) contain all the font information that TEX needs to process a document: height, width, depth of each letter, ligature information, italic correction, and so on. The only thing that is missing is what the character looks like. This is provided by.pk files. .toc This file contains the information for the table of contents. The command \tableofcontents reads in the.toc file, if it exists, and then outputs the table of contents. At the same time, a new .toc file is opened where all the contents information for the current processing run is written. This .toc file is closed by the \end{document} command, so that if the LATEX run is interrupted before completion, the.toc file is lost. A.toc file is only generated if the document contains the command \tableofcontents and if the \nofiles command has not been issued. It has the same root name as the main file. .vf Virtual font files (Section G.1) are read in in place of.pk files for fonts that do not really exist independently. For each character, there are instructions for the driver program, usually to take character nn from real font xx. Error Messages C Errors are bound to be made at times during the preparation of a long LATEX document. The mistakes can be of various kinds, from simple typing errors for command names to forgetting that some commands must be paired or giving an incorrect syntax for a complicated command. Errors during the LATEX processing produce a list of messages on the monitor, which appear totally incomprehensible to the beginner. Even the advanced user can have difficulty figuring out a particular error message. However, these messages contain information about fundamental structures that can aid an experienced TEX programmer to see much deeper into the heart of the problem. In addition, the error messages contain useful information even for the beginner. It is the purpose of this chapter to explain some of these messages that can be of assistance to non-programmers. Error messages are written both to the computer monitor and to the processing transcript file, with extension .log. Examine this file if the messages on the monitor went by too fast. C.1 Basic structure of error messages Error messages have two sources: those from LATEX and those from the underlying TEX program. The LATEX messages are often followed by TEX messages since LATEX operates at a higher level. C.1.1 TEX error messages We start with a simple error as an example. \documentclass{article} \begin{document} The last words appear in \txetbf{bold face}. \end{document} 401 402 Appendix C. Error Messages Here the command \textbf has been mistakenly typed as \txetbf. During the processing, LATEX assumes that the user wants to invoke a TEX command \txetbf. Since LATEX does not know the TEX commands, it passes this text on to TEX, which then decides that there is no such command in its repertoire. The following error message is written to the monitor: ! Undefined control sequence. l.3 The last words appear in \txetbf {bold face}. ? The program stops at this point and waits for a response from the user. This message can be understood even by beginners. It consists of an error indicator that starts with an exclamation point !. Here the indicator is: ! Undefined control sequence, meaning that an unknown command name (control sequence) was the cause of the error. Next comes a pair of text lines, the first of which is prefixed with l.3, meaning that the error occurred in ‘line 3’ of the input text. The error itself was encountered at the last symbol printed in this upper line. The lower line shows the continuation of the input line being processed when the error was found, here the words {bold face}. Before continuing, TEX waits for a reaction from the user, as indicated by the question mark in the last line of the message. Entering another ? and hreturni as response produces the following information: Type to proceed, S to scroll future error messages, R to run without stopping, Q to run quietly, I to insert something, E to edit your file, 1 or ... or 9 to ignore next 1 to 9 tokens of input, H for help, X to quit ? This is a list of the possible user responses: 1. hreturni: simply typing the return key tells TEX to continue processing after making an attempt to handle the error according to some preprogrammed rules. In the case of an unknown command name, the error treatment is to ignore it. 2. S scroll mode: TEX continues the processing, writing further error messages to the monitor as they are encountered, but without stopping for a user response. This is as though hreturni were pressed after all subsequent errors. 3. R run mode: TEX continues processing as with S, but does not even stop as it would in scroll mode if the file named in an \input or \include command is missing. C.1. Basic structure of error messages 403 4. Q quiet mode: the same as with R except that no further error messages are printed to the monitor. They are, however, written to the.log file. 5. I insert: the mistake can be corrected by inserting the proper text. TEX puts the line of text entered from the keyboard into the processing in place of the error and then continues. Such a correction applies only to the processing: the original text in the .tex file is unchanged and must be altered with an editor. Typing in I\stop brings the program to a halt with the current page in the.dvi file. 6. 1 ...: entering a number less than 100 will delete that many characters and commands from the subsequent text. The program then stops to await further response from the user. 7. H help: an extended account of the problem is printed to the monitor, which is more informative than the brief error indicator and which may contain tips for relieving the error. 8. X exit: The TEX processing is halted at this point. The current page does not appear in the.dvi file. 9. E edit: The process is halted as with X and a message is printed saying on which line of which file the error occurred. For some implementations, the editor may actually be called automatically, going directly to the faulty line. The above response letters may be typed in either in capitals or in lower case. The response does not take effect until after hreturni is pressed. Typing H or h for help on the previous sample error message produces the text: The control sequence at the end of the top line of your error message was never \def’ed. If you have misspelled it (e.g., ‘\hobx’), type ‘I’ and the correct spelling (e.g., ‘I\hbox’). Otherwise just continue and I’ll forget about whatever was undefined. ? The error is described in more detail: the command name at the end of the upper line is unknown; if this is simply a typing error, enter the proper text with the I response, in this case I\textbf. Otherwise, press hreturni and the faulty command will be ignored. The line of text will be processed as though it had been The last word appears in bold face. Of course, no bold face can actually appear. The basic structure of a TEX error message is summarized as: Every error message begins with an error indicator, marked by a ! at the beginning of the first line. The indicator text is a brief description of the 404 Appendix C. Error Messages problem. Following are one or more lines of input text. The last symbol of the first of these lines is the one that has caused TEX to stop and print the error message. The last line contains the text or commands that are the next to be processed. TEX waits for a response from the user. If that response is the typing of an H for help, a more detailed description, with possible tips, is printed to the monitor, and TEX waits for a further response. C.1.2 LATEX error messages As an example of a text with a LATEX error, we take \documentclass{article} \begin{document} \begin{qoute}\slshape Text indented at both ends \end{quote} \end{document} Here the call \begin{quote} was incorrectly typed as qoute. The LATEX processing writes the error message: ! LaTeX Error: Environment qoute undefined. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.3 \begin{qoute} \slshape ? The first line of this message states that LATEX itself discovered this error, with a brief error indicator, in this case Environment qoute undefined. All LATEX error messages begin with a line like this, followed by a reference to the LATEX manuals for detailed explanation (which is also to be found in Section C.3 of this book). The third line of text is a reminder that the response H hreturni will also type additional clarification. ! The line of three dots ... indicates that there are more lines of internal coding that have been suppressed. Sometimes it is desirable to look deeper behind the error message, especially for practiced TEXperts who know how to interpret them. In this case, LATEX can be made to output the missing lines of coding by setting \setcounter{errorcontextlines}{num} where num is the number of levels a macro will be decoded on an error. By default, num = −1. The knowledgeable user can set it to 99 to get more lines than he or she will ever likely to want. C.1. Basic structure of error messages 405 The next pair of lines shows just where the processing was halted when the error was detected. As for TEX messages, the current input line of text is broken at the error, with the processed part on the first line, here \begin{qoute}, and the remainder on the next line. Here this remainder is \slshape. The line indicator l.3 (small letter L, not number one) shows on which line (3) of the input file the error was found. LATEX now awaits a response from the user. Typing H hreturni yields the additional information: Your command was ignored. Type I to replace it with another command, or to continue without it. ? This means the last command in the upper line of the pair beginning with l.3 has not been read into the processing. The mistake may thus be corrected for the current process run only with I\begin{quote} hreturni. The misspelling will still be in the text file, though, and needs to be removed by an editor run later. However, if the processing is continued by simply pressing hreturni, then \begin{qoute} is ignored, as though this text were not in the source file. This leads directly to another error when the command \end{quote} is encountered, since now the matching \begin{quote} command is missing. The actual text of this second error message is: ! LaTeX Error: \begin{document} ended by \end{quote}. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.5 \end{quote} ? The message again contains the standard LATEX announcement, with error indicator, in the first line, followed by a reference to the manuals, and an invitation to type H for help. The error indicator in this case is \begin{document} ended by \end{qoute}. This arises because when LATEX encountered \end{quote}, it checked the name of the current environment. Since \begin{quote} was missing, the matching \begin command is the \begin{document} statement, producing a mismatched \begin...\end pair. The last pair of lines again shows just how far the processing had occurred before the error was detected. In this case, the whole of the current line has already been taken in, so the remainder line is blank. 406 Appendix C. Error Messages The response H hreturni at this point leads to the same message as for the first error. A correction with an I entry will not do any good since the missing \begin{quote} can no longer be inserted ahead of the environment text. Entering I\begin{quote} will replace the \end{quote} with \begin{quote}, but that does not solve the real problem. The best response now is to type hreturni so that the command \end{quote} is ignored and the processing continues. Now both the faulty \begin{qoute} and correct \end{quote} commands are removed and the processing takes place as if the quote environment had never been in the input text at this point. If the typing error qoute had been made in the \end instead of in the \begin command, the error message would have been: ! LaTeX Error: \begin{quote} on input line 3 ended by \end{qoute} See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.5 \end{qoute} ? The previous explanations should be enough for the user to understand what is now being said. The error indicator here is \begin{quote} on input line 3 ended by \end{qoute} and the last pair of lines indicate that the problem is in line 5 and that the troublesome command is \end{qoute}. The obvious thing to do now, and the H message encourages this conclusion, is to make a correction with I\end{quote}. However, now a new message appears on the monitor: ! Extra \endgroup. \endgroup l.5 \end{qoute} ? With the exception of the last pair beginning with l.5, this makes no sense at all. The error indicator ! Extra \endgroup is seemingly meaningless. That this is a TEX error message and not a LATEX one is hardly any compensation. The frustrated user is not really to blame. The response was perfectly reasonable even if it was wrong. Only experience could say that the best action at that point was to have just pressed hreturni. The quote environment is closed off anyway, although any special actions associated with \end{quote} would be left off. The help message at this point is C.1. Basic structure of error messages 407 Things are pretty mixed up, but I think the worst is over. This is at least encouraging, and the user should not lose heart. The best thing is to just keep on pressing hreturni to get through the run. We give here two recommendations for choosing a response, one specific and one general. The specific one is: If a false environment name appears in a \begin command, the proper correction of the error is I\begin{right name} If the misspelling has occurred in the \end command, the best way to handle this mistake is just to press hreturni. The environment will be closed and any local declarations or definitions will be terminated. However, if there are any commands to be executed or text to be printed by the \end command, these will be missing. The general recommendation is If the user knows how to correct the error with the help of the error message, this should be done with I correction Otherwise, one may give hreturni and wait and see what happens. Even if more peculiar (TEX) error messages appear, one can keep on pressing hreturni until the processing is finally at an end. The following printout should indicate where the mistake was. Instead of continually pressing hreturni, one may also enter S, R, or Q and hreturni to speed up the error treatment (Section C.1.1). Here, as with the simple hreturni entry, the faulty commands are not just ignored. TEX attempts to treat them by making assumptions about what the user wanted to do at this spot. Only when this is no longer possible will TEX ignore the command completely. For example, if the indicator reads \begin{environment} ended by \end{environment} there was at least a \begin command with a valid environment name earlier. It could be assumed that the name of the environment in the \end command is wrong. LATEX thus tries to execute this command using the name of the current environment. C.1.3 Error messages from TEX macros The majority of TEX commands and practically all the LATEX commands are so-called TEX macros. These are combinations of primitive commands grouped together under a new command name, by which they may be 408 Appendix C. Error Messages called as a unit. TEX macros are structures similar to those that may be defined by the LATEX command \newcommand. Up to nine arguments may be passed to them, just as for LATEX commands. However, the corresponding TEX commands for generating macros are more general than \newcommand. In fact, of the approximately 900 Plain TEX commands available, only 300 are primitives, or fundamental commands. The remaining 600 are macros. If an error occurs within a macro, the other commands within it may also be affected. Here is an example for clarification. The command \centerline is a macro defined as \def\centerline#1{\@@line{\hss#1\hss}} in which \@@line is itself a macro while \hss is a TEX primitive, a rubber length that can be infinitely stretched or shrunk. To avoid leading the user into the murky depths of TEX commands, we will simply point out that the above macro definition is more or less equivalent to the LATEX command sequence \newcommand{\centerline}[1]{\makebox[\textwidth][c]{#1}} Now take the following sample input text \documentclass{article} \begin{document} \centerline{This is an \invalid command} \end{document} in which a \ has been placed before the word invalid, making a false command named \invalid. During the LATEX processing, the following TEX error message appears: ! Undefined control sequence. This is an \invalid command l.3 \centerline{This is an \invalid command} ? This TEX message is now a bit more understandable. The error indicator is the same as for the example in Section C.1.1: ! Undefined control sequence. The following pair of lines claim that the error was recognized after the ‘command’ \invalid was processed, and that the next piece of text to be read in is the word command. At the same time, the at the beginning of the upper line says that this text is the argument of some other command. The next pair of lines are familiar: the error occurred in line 3 of the input text, after the entire line, command and argument, had been read in for processing. C.2. Some sample errors C.2 Some sample errors C.2.1 Error propagation 409 The example with the incorrect \begin{qoute} environment showed that a simple response with the hreturni key led to a second error message in spite of the fact that the \end{quote} command that produced it was correct. That one wrongly corrected error leads to further errors is more often the rule than the exception. Let us look at the input text \documentclass{article} \begin{document} \begin{itemie} \item This is the first point in the list \item And here comes the second \end{itemize} \end{document} The only mistake in this text is the misspelled environment name itemie in place of itemize. The LATEX processing first produces the same error message as for the incorrect quote environment earlier: ! LaTeX Error: Environment itemie undefined. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.3 \begin{itemie} ? At this point, entering hreturni leads to a new error messages: ! LaTeX Error: Lonely \item--perhaps a missing list environment. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.4 \item T his is the first point in the list ? What has happened here is that without the \begin command, the \item has been issued outside of a list environment, where it is rather meaningless. (Actually it is defined to print the above error message!) It is now too late to try to insert the missing start of the itemize environment. Typing H hreturni for help yields 410 Appendix C. Error Messages Try typing to proceed. If that doesn’t work, type X ? to quit. Following this advice and pressing hreturni, one obtains the same error message once again, but this time on line 5, for the second \item command. Persevering further and pressing hreturni once again, one is presented with ! LaTeX Error: \begin{document} ended by \end{itemize}. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.6 \end{itemize} ? The itemize environment has now come to its end, but since it was never properly started, LATEX complains about a mismatch of \begin and \end commands. Now at last, typing another hreturni leads to a proper continuation of the processing. Of course the itemized text will be incorrectly formatted, but the rest of the document will not be affected. In this example, a single mistake in the input text generated three further error messages. This is by no means unusual. Some LATEX errors can produce hundreds of such successive errors. It is even possible that the chain of errors never ceases and that the processing never advances. In this case, there is nothing else to do but to terminate the program. This should be done with the entry I\stop after the next error message. It may be necessary to give it several times before it takes effect. If this does not work, that is, if the same message appears every time, then the response X hreturni will halt the program immediately. It is better to stop the program with I\stop than with X, since then the output will include the last page being processed. This can be of assistance in trying to deduce what the source of the error was. The final lesson of this section is simply: even when faced with a host of error messages, don’t panic! Continue to press the hreturni key to advance the processing. Pressing S hreturni instead will produce the same set of error messages on the monitor but without waiting for a user response in between (Section C.1.1). C.2.2 Typical fatal errors Occasionally it may happen that a user forgets to include one of the commands \documentclass or \begin{document}, or the entire preamble. C.2. Some sample errors 411 The last can easily occur when a LATEX file is to be read in with \input or \include, but is mistakenly entered directly with the LATEX program call. If a file with the text This file has no preamble. is put directly into the LATEX processing, the following message appears on the monitor: ! LaTeX Error: Missing \begin{document}. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.1 T his file has no preamble. ? with the accompanying help message after typing H hreturni: You’re in trouble here. Try typing to proceed. If that doesn’t work, type X to quit. ? One sees from the error message that LATEX has discovered a mistake on reading the very first letter of the text. The help message is also not very encouraging. There is no point trying to continue the processing with hreturni. Rather one should stop it with X or E right away, since nothing useful can be achieved here. Even when the above example file contains the environment \begin{document} This file has no preamble. \end{document} it is not possible to carry out a proper processing. The TEX error message now printed is ! LaTeX Error: The font size command \normalsize is not defined: there is probably something wrong with the class file. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.1 \begin{document} ? 412 Appendix C. Error Messages The error indicator is rather peculiar since the command \normalsize never appears in the input. Only the last two lines of this message are easily understood. They state that the error was recognized on line 1 after \begin{document} was read in. The fact that this is the text of the first line is enough to show that no meaningful processing can take place, since the mandatory \documentclass command that must precede it is missing. Here again there is no choice but to halt the program with X or E, since a continuation of the processing would be meaningless. (The reason for the strange error indicator is that many formatting parameters are initiated by the \begin{document} statement, including the standard font. It is here that \normalfont is called internally, and that command must be defined in the class file, which is missing. Other initiating commands are defined in the LATEX format itself, and so they do not cause this error.) If the name of the document class is wrongly typed, say as \documentclass{fred} the following message appears: ! LaTeX Error: File ‘fred.cls’ not found. Type X to quit or to proceed, or enter new name. (Default extension: cls) Enter file name: This message should be fairly clear: the program is looking for a file with the name fred.cls but cannot find it, so would the user be so kind as to enter an alternative name. If the new name has the same extension as that requested (.cls), it need not be explicitly given. In this case, the name of any standard LATEX class, such as article, report, book, or letter, may be typed in, as well as that of any additional classes that you might have access to. Of course, it should be the class for which the document was written. This same error message is printed whenever a file is to be read in that cannot be found on the system. The issuing command may be \input, \include, or \usepackage. If the file sought really does exist, perhaps it is not located where TEX is looking for files. Usually there is a system parameter set by the installation to point TEX to its files. If your file is somewhere else, you can trying entering its full name, with directory or path designations. If LATEX is asking for a file that you know does not exist, or which is totally unknown to you, you will want to halt the processing right away or tell LATEX to skip the silly file. At this point, you have a problem. LATEX insists on a valid file name. Typing X hreturni only produces the C.2. Some sample errors 413 message once again, this time stating that it cannot find the file x.ext. Some installations provide a dummy file named null.tex, while one of the extension packages available (Section B.5.4) offers a set of files named after the standard response letters x.tex, e.tex, r.tex, h.tex, s.tex to emulate the responses to normal error messages. Emergency stop: sometimes one reaches a situation where the program cannot be halted after an error, even with I\stop or X. In such a case, one has to apply the operating system’s program interrupt, usually CTRL Z. C.2.3 Mathematical errors Surprisingly few errors occur as a result of incorrect application of mathematical formula commands themselves, even for a user with only a little experience. More often, the errors in mathematical formulas are fiddly ones such as forgetting a closing brace } or neglecting to switch back to text mode. Another type of common error is to use a symbol in text mode that may only appear in math mode. We will point out a few typical examples here. One wants to produce the text: ‘The price is $3.50 and the order number is type sample’, and types the input text: The price is $3.50 and the order number is type_sample. This text contains two errors, such that the first cancels the second one: the $ sign is the math mode switch for generating formulas within text (Section 5.1). The proper way to write a true dollar sign in text is as \$. Instead, in the sample text, the $ alone switches to math mode, setting everything that follows as a formula. However, the closing switch-back $ is missing, something that TEX will first notice at the end of the current paragraph. ! Missing $ inserted. $ l.4 ? If hreturni is simply pressed as a response, TEX inserts a $ at this point. For our sample text, this would be at the end of the text before the blank line. This means that the text from the first $ to the end of the paragraph will be set as a text formula: The price is 3.50andtheor der number istypes ample. This output should show the user right away what went wrong. Near the end of the line, there is a letter s printed as an index. This is the second error in the example. The underbar character _ is only permitted 414 Appendix C. Error Messages in math mode and should have been typed here as \_. However, after the first $ had switched (incorrectly) into math mode, the _ sign became allowed, with the result that the following letter s was lowered. If we now correct the text by replacing the $ sign with \$, then the _ symbol is no longer in math mode, producing the error message: ! Missing $ inserted. $ l.5 ...ice is \$3.50 and the order number is type_ sample. ? Pressing hreturni here tells TEX to recover from the error by inserting the apparently missing $ sign at this point before the math command _. The processing continues, and at some place before the end of the current paragraph, TEX will notice again that the closing $ is not present. The same error message is printed as in the first case. The processing goes on with another hreturni response, with the result: The price is $3.50 and the order number is types ample. In all three cases, asking for more help with H would type to the monitor: I’ve inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed. The last sentence above is just what we recommend for mathematical error messages: keep on pressing hreturni or S to get through to the end of the processing, and then look at the printed output to find the mistake. C.2.4 Errors from multi-file texts If the document text is split over many files that are to be read in with \input or \include commands, the line number in the error message refers to the file currently being read. A response with E hreturni will call the editor program and open that file, going to the indicated line where the error was recognized. With the other responses, the editor has to be called separately, with the faulty file explicitly named. It is possible to determine which file was being processed at the time of the error by examining the processing messages or the.log file. As the files are opened for reading, TEX writes an opening parenthesis ( and the name of the file to the monitor and to the transcript .log file. When the file is closed, a closing parenthesis ) is printed. Output page numbers are similarly written to both the monitor and transcript file in square brackets. For example, if the monitor shows the processing messages C.3. List of LATEX error messages 415 ..(myfile.tex [1] [2] [3] (part1.tex [4] [5]) (part2.tex [6] [7] ! Undefined control sequence l.999 \finish ? this can be interpreted as follows: a file myfile.tex was being read, and after pages 1, 2, and 3 had been output, the file part1.tex was read in with an \input or \include command inside the file myfile.tex. Pages 4 and 5 were output and part1.tex was closed, after which another file part2.tex was opened for input. An error was discovered in line 999 of this file. If this error is corrected from the keyboard, or if the processing is otherwise continued, the monitor messages proceed as [8] [9]) [10] ! Too many }’s l.217 \em sample} The closing parenthesis after page 9 indicates that the file part2.tex has been closed. The next error is on page 10 in the main file myfile.tex, since there is no closing ) for it. The error was discovered on line 217 of this file. C.3 List of LATEX error messages The LATEX error messages are listed here, divided into general, package, or font error messages. Within each group, they are ordered alphabetically according to the error indicators. A description of the possible causes and solutions is also given. C.3.1 General LATEX error messages The following error messages are those not involving font selection or definition, nor any of the special features for LATEX programming class and package files (Appendix D). ! LaTeX Error: ... undefined. The argument of a \renewcommand or \renewenvironment has not been previously defined. The corresponding \new... command should be used instead. ! LaTeX Error: \< in mid line. The command \< in a tabbing environment occurred in the middle of a line. This command may only appear at the beginning of a line (Section 4.6.3). 416 Appendix C. Error Messages ! LaTeX Error: Bad \line or \vector argument. The first argument of a \line or \vector command specifies the angle of the line or arrow. This message states that the selected angle entries are invalid. See pages 293–294. ! LaTeX Error: Bad math environment delimiter. LATEX has encountered a math switch command in the wrong mode: either a \[ or \( command in math mode or the corresponding \] or \) in normal text mode. Either the math switches have been improperly paired or some braces {...} are incorrect. ! LaTeX Error: \begin{...} on input line ... ended by \end{...}. LATEX has encountered an \end command without a corresponding \begin of the same name. This may be due to a typing mistake in the name of the environment, or to the omission of a previous \end command. A good way to avoid this error is always to enter the \end command immediately after the \begin, inserting the actual environment text with the editor in between the two. This is especially useful for long, nested environments. It also reduces the risk of typing the environment name incorrectly in the \end command. ! LaTeX Error: Can be used only in preamble. Many commands may only be called within the preamble. These include \documentclass, \usepackage, \nofiles, \includeonly, \makeindex, \makeglossary, and several others. Certain commands that only have meaning within class or package files, such as \ProvidesClass and \ProvidesPackage (Section D.2.1), as well as many \Declare.. and \Set.. commands are also only allowed in the preamble. If one of these commands is issued after \begin{document}, this message is printed. ! LaTeX Error: Command ... invalid in math mode. A command has been issued in math mode that only makes sense in text mode, such as \item or \circle. The font declarations \itshape, \bfseries, and so on, also produce this error in math mode, since the math alphabet commands \mathit, \mathbf should be used instead. ! LaTeX Error: Command ... already defined. The user has tried to redefine an existing structure with one of \newenvironment, \newcommand, \newtheorem, \newsavebox, \newfont, \newlength, \newcounter, or \DeclareMathAlphabet. Either a different name must be selected or, in the case of commands and environments, the \renew... version must be employed. (Note that when an environment named sample is defined, the commands \sample and \endsample are also created.) C.3. List of LATEX error messages 417 ! LaTeX Error: Command ... undefined in encoding .... The specified command has been defined with \DeclareTextCommand for a certain NFSS encoding (say OT1) but was executed while another encoding (for example T1) for which there is no definition was active. ! LaTeX Error: Counter too large. A counter that is to be printed as a letter contains a value greater than 26. ! LaTeX Error: Environment ... undefined. LATEX has encountered a \begin command with an unknown environment name. This is probably due to a typing mistake. It may be corrected during the processing with the response I followed by the correct name. (This does not alter the source file, where the error remains.) ! LaTeX Error: File ‘...’ not found Type X to quit or to proceed, or enter new name. (Default extension: ...) Enter file name:. A file is to be loaded with one of the inputting commands, but it cannot be found. You may type a new file name, or quit, or proceed without it. If the file name has been given correctly, and it does exist, maybe it is not located where LATEX looks for files. Make sure that it is in one of the right directories. The user is offered a chance to type in an alternative, or correctly typed, name via the keyboard. Type in the file name, with optional extension, and press hreturni. LATEX proposes a default extension that is the same as that requested. There is no default for the main part of the file name. ! LaTeX Error: Float(s) lost. A figure or table environment or a \marginpar command was given within a vertical box (\parbox or minipage environment), or these structures were issued within a LATEX command that uses vertical boxes internally, such as a footnote. This error is first recognized by LATEX when a page is output so that the actual cause could be many lines earlier in the text. A number of tables, figures, or marginal notes may have been lost as a result, but certainly not the one that triggered the problem. ! LaTeX Error: Illegal character in array arg. A tabular or array environment contains an unknown column formatting character (see Section 4.8.1) or the formatting entry in the second argument of a \multicolumn command is wrong. ! LaTeX Error: \include cannot be nested. An attempt has been made to call \include from a file that has already 418 Appendix C. Error Messages been read in by an \include command. All \include commands must be issued in the main file (Section 9.1.2). ! LaTeX Error: LaTeX2e command ... in LaTeX 2.09 document. This error occurs if a LATEX 2ε command is used in compatibility mode (Appendix F), that is, if the document uses \documentstyle instead of \documentclass. These can be \LaTeXe, \usepackage, \ensuremath, the lrbox environment, as well as the new syntax for adding an optional argument with \newcommand and \newenvironment. ! LaTeX Error: Lonely \item--perhaps a missing list environment. An \item command has been given outside of a list environment (Section 4.3). Either the environment name has been misspelled in the \begin command and not corrected by keyboard entry, or the \begin command has been forgotten. ! LaTeX Error: Missing @-exp in array arg. The column formatting argument of a tabular or array environment contains an @ symbol without the necessary following text in curly braces { } that must go with it (Section 4.8.1 for @-expressions), or the same thing occurs in the second argument of a \multicolumn command. ! LaTeX Error: Missing begin{document}. Either the \begin{document} command has been forgotten or there is printable text inside the preamble of the document. In the latter case, there could be a declaration with incorrect syntax, such as a command argument without curly braces { } or a command name without the backslash \ character. ! LaTeX Error: Missing p-arg in array arg. The column formatting argument of a tabular or array environment contains a p symbol without the necessary width specification that must go with it (Section 4.8.1), or the same thing occurs in the second argument of a \multicolumn command. ! LaTeX Error: No counter ‘...’ defined. A \setcounter or \addtocounter command was called that referred to a counter name that does not exist. Most likely the name was typed incorrectly. If this error occurs while an .aux file is being read and if the name of the counter is indeed correct, the defining \newcounter command was probably given outside of the preamble. Therefore it is highly recommended always to give the \newcounter commands inside the preamble. (If the other LATEX counter commands are used with an undefined counter name, a long list of funny TEX error messages appears.) C.3. List of LATEX error messages 419 ! LaTeX Error: No \title given. The \maketitle command has been given before \title has been declared. ! LaTeX Error: Not in outer par mode. A figure or table environment or a \marginpar command was given within math mode or inside a vertical box (\parbox or minipage environment). In the first case, the math switch-back command was probably forgotten. ! LaTeX Error: Page height already too large. The command \enlargethispage is trying to extend the vertical size of the page, which LATEX already considers too large. ! LaTeX Error: \pushtabs and \poptabs don’t match. The number of \poptabs commands in a tabbing environment does not agree with the number of previous \pushtabs given (Section 4.6.4). ! LaTeX Error: Something’s wrong--perhaps a missing \item. The most likely cause of this error is that the text in a list environment (list, itemize, enumerate, or description) does not begin with an \item command. It will also occur if thebibliography environment is given without the argument {sample label} (Section 9.3). ! LaTeX Error: Suggested extra height (...) dangerously large. The command \enlargethispage is trying to extend the vertical size of the page more than LATEX considers reasonable. ! LaTeX Error: Tab overflow. The last \= command in a tabbing environment exceeded the maximum number of tab stops allowed by LATEX. ! LaTeX Error: There’s no line here to end. The command \newline or \\ has been issued after a \par or blank line where it makes no sense. If additional vertical space is to be inserted here, this should be done with a \vspace command. ! LaTeX Error: This may be a LaTeX bug. This message states that LATEX is fully confused. This could be the result of a previous error after which the user response was to press hreturni. In this case, the processing should be brought to a halt with I\stop or X or E and the earlier error corrected. It is also possible, although unlikely, that there is a bug in the LATEX program itself. If this is the first error message 420 Appendix C. Error Messages in the processing, and the text seems otherwise to be satisfactory, the file should be saved and submitted to the computing center for further investigation. ! LaTeX Error: Too deeply nested. Too many list environments (description, itemize, enumerate, or list) have been nested inside one another. The maximum depth of such nesting is dependent on the installation but should always be at least four. ! LaTeX Error: Too many columns in eqnarray environment. The eqnarray environment may only have three columns per line. You may have forgotten to start a new row with \\, or have placed an extra & in the line. ! LaTeX Error: Too many unprocessed floats. This error may occur if there are too many \marginpar commands on one page. However, it is more likely that LATEX is retaining more figure and table floats than it can hold. This happens if too many such float objects have been given before they can be output (Chapter 7). In this case, the last figure or table should be added later in the text. Another cause could be that the figure or table cannot be located on a normal text page, but rather on a special float page at the end of the text or after a \clearpage or \cleardoublepage command. Since the output sequence of figures and tables will be the same as that with which they were input, one such float can block the entire queue. A \clearpage or \cleardoublepage command can free the blockage. ! LaTeX Error: Undefined tab position. A \>, \+, \-, or \< command in a tabbing environment has tried to move to a tabulator stop that does not exist (Section 4.6). ! LaTeX Error: \verb ended by end of line. The text of an in-line verbatim command \verb+...+ extends over more than one line of text. This is forbidden in order to catch a common error: the missing terminating character. Make sure that the entire text between the initial and terminating characters is all on one input line. ! LaTeX Error: \verb illegal in command argument. The \verb command may not be used in the argument of any other command, except \index and \glossary. It may not be used within section titles or footnotes, for example. C.3. List of LATEX error messages C.3.2 421 LATEX package errors The special programming commands for handling class and package files (Appendix D) have their own set of error messages. If one of these features issues a serious error, there is often little the user can do about it other than report the problem to the author of the file. On the other hand, some errors are due to the improper use of the file or of the options that it provides. Often classes and packages contain their own error or warning messages with text and meanings that are peculiar to them. These are indicated as such, along with the name of the class or package that issued them. For example, the package mypack could print the error Package mypack Error: cannot mix options ‘good’ (mypack) and ‘bad’. A help message should also be available when H is typed. Obviously, such error (and warning) messages cannot be explained here, since they depend entirely on the package in question. ! LaTeX Error: \LoadClass in package file. A package file has called \LoadClass, which it is not allowed to do. A class file can only be loaded from another class file. ! LaTeX Error: Option clash for package .... The specified package has been requested a second time with a different set of options. A package file will only be loaded once and a second attempt will be ignored. Thus, if two \usepackage or \RequirePackage commands load the same package with different options, there is a conflict. Try to arrange for a consistent set. Typing H for help after this message will print out the two sets of options. ! LaTeX Error: \RequirePackage or \LoadClass in Options Section. These two commands may not appear in the definition of a class or package option made with the \DeclareOption command. Instead, the option should set some flag or other indicator that is later tested before calling the command in question. ! LaTeX Error: This file needs format ‘...’ but this is ‘...’. The \NeedsTeXFormat command specifies a different format from the one being used. The format is the prestored set of instructions that determine what type of TEX is being run. For LATEX 2ε , the format name specified must be LaTeX2e. This file cannot be processed at all with the current format in use. 422 Appendix C. Error Messages ! LaTeX Error: Two \documentclass or \documentstyle commands. A document may contain only one \documentclass or \documentstyle command. If you can only see one in the main document file, check that other files being loaded do not contain an offending second one. ! LaTeX Error: Two \LoadClass commands. The class file contains more than one \LoadClass command, something that is not allowed. The class file has been improperly written. ! LaTeX Error: Unknown option ‘...’ for package ‘...’. An option has been specified with \usepackage but it is not defined for that package. Check the instructions for the package or look for a misprint. ! LaTeX Error: \usepackage before \documentclass. The \usepackage command may not appear before \documentclass. A class file must be loaded before any packages. C.3.3 LATEX font errors The following error messages occur when defining or selecting fonts with the New Font Selection Scheme (Appendix A). Some of these messages indicate that the fonts have not been properly set up, in which case the font description files may be corrupted or contain mistakes. In either case, the system manager must see that a proper set of files are installed. ! LaTeX Error: ... allowed only in math mode. A math alphabet command such as \mathbf has been used in text mode. Perhaps a $ has been forgotten. ! LaTeX Error: Command ‘...’ not defined as a math alphabet. The name of a non-existent math alphabet has been specified in one of the \Set.. or \Declare.. commands that take a math alphabet name as argument. The math alphabet name must be declared with the command \DeclareMathVersion before it may be used. ! LaTeX Error: Command ... not provided in base LaTeX2e. A number of symbols that were part of the basic LATEX 2.09, but not in TEX, are no longer automatically included in LATEX 2ε . Add one of the packages latexsym or amsfonts to include them. ! LaTeX Error: \DeclareTextComposite used on inappropriate command .... \DeclareTextComposite (Section A.3.7) is used to redefine an existing C.3. List of LATEX error messages 423 accenting command to print a single character for a certain encoding. If the accenting command does not already exist, this message is issued. ! LaTeX Error: Encoding scheme ‘...’ unknown. A font declaration or selection command that refers to a non-existent encoding scheme has been issued. There is probably a typing error involved here. ! LaTeX Error: Font family ‘...+...’ unknown. A \DeclareFontShape command has been issued for a font encoding and family combination that has not been previously declared by means of a \DeclareFontFamily command (Section A.3.6). ! LaTeX Error: Font ... not found. The font with the specified attributes could not be found, nor could an adequate substitution be made. The font defined by \DeclareErrorFont is used instead. ! LaTeX Error: Math alphabet identifier ... is undefined in math version ‘...’. A math alphabet (Section A.3.3) that has not been defined for the current math version has been invoked. This means that the alphabet has been created by \DeclareMathAlphabet with an empty shape attribute, but no \SetMathAlphabet declaration has been given to define it for the selected math version. ! LaTeX Error: Math version ‘...’ is not defined. The name of a non-existent math version has been specified in one of the \Set... or \Declare... commands that take a math version name as argument. The version name must be declared with \DeclareMathVersion before it may be used. ! LaTeX Error: Not a command name: ‘...’. The first argument of \DeclareMathAccent must be a command name, like \acute. Most likely the backslash \ character has been forgotten. ! LaTeX Error: Symbol font ‘...’ not defined. The name of a non-existent symbol font has been specified in one of the \Set.. or \Declare.. commands that take a symbol font name as argument. The font name must be declared with \DeclareSymbolFont before it may be used as a symbol font. 424 Appendix C. Error Messages ! LaTeX Error: The font size command \normalsize is not defined: there is probably something wrong with class file. It is necessary for class files to define \normalsize, the basic size of standard text in the document. If the class file does not do this, if it only defines \@normalsize, then it must be repaired. This message also appears if \documentclass is missing, for an empty class file is clearly a faulty one. ! LaTeX Error: This NFSS system isn’t set up properly. Something is wrong with the font descriptions in the.fd files, or there is no valid font declared by \DeclareErrorFont. This is a serious problem, to be reported to the system manager. ! LaTeX Error: Too many math alphabets used in version .... There is a limit of 16 math alphabets possible, a number set by TEX itself. Any additional math alphabet definitions are ignored. ! LaTeX Error: Unknown symbol font ‘...’. The name of a non-existent symbol font has been used as argument to the command \DeclareSymbolFontAlphabet. The font name must first be declared with \DeclareSymbolFont before it may be used. C.4 TEX error messages This section contains a list of some of the most common TEX error messages, ordered alphabetically according to the error indicator, together with a brief description of the possible cause. Each one begins with an exclamation point only. ! Counter too large. As a TEX error, this message refers to a footnote marked either with letters or symbols in which the counter has exceeded a value of 26 or 9. It may also occur if there are too many \thanks commands on a title page. ! Double subscript. A mathematical formula contains two subscripts for the same variable, for example, x_2_3 or x_{2}_{3}. The proper way to produce x23 is with x_{2_3} or x_{2_{3}} (Section 5.2.2). ! Double superscript. A mathematical formula contains two superscripts for the same variable, 3 for example, xˆ2ˆ3 or xˆ{2}ˆ{3}. The proper way to produce x 2 is with xˆ{2ˆ3} or xˆ{2ˆ{3}} (Section 5.2.2). C.4. TEX error messages 425 ! Extra alignment tab has been changed to \cr. A line in a tabular or array environment contains more & commands than there are columns defined. The error is probably due to a forgotten \\ at the end of the previous line. ! Extra }, or forgotten $. In math mode, either an opening brace { has been left off or an extra closing brace } has been included by mistake. Another possibility is that a math mode switch command such as $, \[, or \( has been forgotten. ! Font ... not loaded: Not enough room left. The text processing requires more character fonts to be loaded than TEX can handle owing to memory limitations. If certain parts of the document need different fonts, you can try to split it up and to process the parts separately. ! Illegal parameter number in definition of .... This error message is probably due to a \newcommand, \newenvironment, \renewcommand, or \renewenvironment command in which the substitution character # has been applied incorrectly. This character may appear within the defining text only in the form #n, where n is a number between 1 and the number of arguments specified in the command. Otherwise the character # may only appear in the definition as \#. This error may also arise if the substitution character is applied within the last argument {end def } (Section 8.4). ! Illegal unit of measure (pt inserted). If this error message comes right after another error with the message ! Missing number, treated as zero. the problem lies with this previous error (see below). Otherwise, the mistake is that TEX expects a length specification at this point but has only been given a number without a length unit. This occurs most often when a length is to be set to zero and 0 has been typed in instead of 0mm or 0pt. If this is the case, then responding with hreturni produces the right result since for a zero value any unit specification is all right. This error may also occur if a length specification has been completely forgotten. ! Misplaced alignment tab character &. The single character command & has been given in normal text outside of the tabular and array environments. Possibly the intention was to print &, in which case \& should be typed. This may still be achieved during the processing by responding with I\& to the error message. 426 Appendix C. Error Messages ! Missing control sequence inserted. This error is most likely caused by a \newcommand, \renewcommand, \newlength, or \newsavebox command in which the backslash \ is missing from the first argument. Pressing hreturni as response will complete the processing correctly since TEX assumes a backslash is missing and inserts it. ! Missing number, treated as zero. This error is most likely due to a LATEX command that expects a number or length as argument, which is missing. It may also occur when a command that takes an optional argument is followed by text beginning with [. Finally another cause can be a \protect command preceding a length or \value command. ! Missing { inserted. ! Missing } inserted. TEX is totally confused when either of these error indicators is written. The line number printed will probably not be where the source of the error is to be found, which is a missing opening or closing brace. If the error is not obvious, continue the processing by pressing hreturni and try to deduce where it might be from the printed output. ! Missing $ inserted. Most likely a symbol or command that may only appear in math mode was used in normal text. Recall that all those commands described in Chapter 5 are only allowed in math mode unless otherwise stated. If an \mbox command is inserted within a math formula, its argument has temporarily exited from math to normal text mode. The message may also occur if a blank line appears within a math formula, signalling a new paragraph and the end of the formula without the necessary $ sign. ! Not a letter. The word list in a \hyphenation command contains a character that is not recognized as a letter, such as an accent command like \’{e}. Such words can only be hyphenated by explicitly inserting the hyphenation possibilities (Sections 2.8.1 and 2.8.2). ! Paragraph ended before ... was complete. The argument of a command contains a blank line or a \par command, something that is not allowed. Probably a closing brace } has been omitted. ! TeX capacity exceeded, sorry [...]. TEX sets up various storage buffers in the computer memory to carry out C.4. TEX error messages 427 the text processing. This message appears when one of these buffers is full and can no longer be used. The name of the buffer and its maximum size are printed in the square brackets of the error indicator. With this message, the TEX processing is terminated. The source of this problem is hardly ever due to insufficient memory, no matter how much complicated text is being processed, but rather to an error in the text itself. The methods described in Section C.6 may be applied to try to detect the true error. The following descriptions of the various buffers should help to decide whether the storage capacity allotted to TEX really is too small and to explain what one might do to correct this. buffer size The problem here can be that the text in the argument of a sectioning, \caption, \addcontentsline, or \addtocontents command is too long. The message then normally appears when the \end{document} command is processed, but may also arise at one of \tableofcontents, \listoffigures, or \listoftables. The way to avoid this is to use the optional argument for the short form of the heading text (Sections 3.3.3 and 7.4). Indeed, such a long entry in the table of contents is a nuisance anyway and should be shortened. After the correction has been made in the input text, the previous LATEX.aux file must be deleted before reprocessing. This problem can occur on a PC if a word processing program has been used to generate the input text instead of a text editor. Some of these programs put an entire paragraph into a single line even though the text on the monitor is broken up into lines. exception dictionary The list of hyphenation exceptions that have been entered with the \hyphenation commands has become too large. Words used less frequently should be removed and their possible word divisions indicated explicitly with the \- command. hash size The source file contains too many command definitions or uses too many cross-reference markers. This does not mean that the input text really needs all these commands, for it may be that the user has developed a large collection of private commands that are stored in a single file and read into every document, whether they are all applicable or not. input stack size An overflow of this buffer is probably due to a mistake in a command definition. For example, the command defined with \newcommand{\com}{One more \com} produces One more {One more {...One more \com}...}} going on for ever, since it continually calls itself. Actually, it does not go on for ever, but only until this buffer is full. main memory size This buffer contains the text for the page currently being processed. It also overflows if a recursively defined command has been called. However, the more usual reasons are: (1) a large number of very complicated commands have been defined on one page; (2) there are too 428 Appendix C. Error Messages many \index or \glossary commands on one page; (3) the page itself is too complex to fit within the allotted buffer space. The solution to the first two situations is clear: reduce the number of command definitions and/or \index and \glossary commands on that page. In the third case, the cause might be a long tabbing, tabular, array, or picture environment, or a stuck float (figure or table) waiting for an output command. To find out whether the memory overflow is really due to an overly complex page, add the command \clearpage just before the spot where the overflow occurs. If the error message no longer appears on the next processing run, then this page was indeed too complicated for TEX. However, if the overflow still persists, the error is probably a mistake in the input text. If necessary, it may have to be located with the method explained in Section C.6. If the page really is too complex for the TEX processing, it must be simplified. However, first recall that the entire last paragraph is processed before that page is output, even if the page break occurs near the beginning of the paragraph. Introducing a \newpage may solve the problem and should be tried out before attempting a tedious restructuring of the text. If the error is due to a stuck figure or table, it might be alleviated by moving the float object to later in the text, or by changing the positioning argument (Section 7.1). If the whole text is not yet complete, one can try giving \clearpage for now in order to clear the blocked floats and then decide on a better ordering when the text is finalized. pool size Most likely there are too many command definitions and/or labels, or their names are too long. Try shortening the names. This error may also occur if a closing right brace } has been forgotten in the argument of a counter command such as \setcounter or in a \newenvironment or \newtheorem command. save size This buffer overflows when commands, environments, and the scope of declarations are nested too deeply. For example, if the argument of a \multiput command contains a picture environment, which in turn possesses a \footnotesize declaration with another \multiput command, and so on. Such a nesting must be simplified, unless the real problem is a forgotten closing brace } that merely makes the structure appear so complex. ! Text line contains an invalid character. The input text contains a strange symbol that TEX does not recognize. This could be a problem with the editor itself, that it is inserting extra characters. If an examination of the source file does not reveal the strange symbol, consult the computing center for help. ! Undefined control sequence. Every TEX user encounters this error message at some point. It is usually C.5. Warnings 429 the result of an incorrectly typed command name. It may be amended during the processing by responding with I and the proper name of the command, plus hreturni. This does not alter the source file, which must be corrected separately after the LATEX run. If the command name has been entered correctly in a LATEX command, it may be that it was issued in an improper environment where it is not allowed (that is, not defined there). ! Use of ... doesn’t match its definition. If ‘...’ is the name of a LATEX command, it is likely that one of the picture commands from Sections 13.1.3 and 13.1.4 has been called with the wrong syntax for its arguments. If the name is \@array, there is a faulty @-expression (Section 4.8.1) in a tabular or array environment. Possibly a fragile command was given in the @-expression without the \protect command preceding it. ! You can’t use ‘macro parameter #’ in ... mode. The special symbol # has been used in normal text. Probably there should have been a \# in order to print # itself. This can be corrected during the processing with the response I\# and hreturni. C.5 Warnings TEX and LATEX errors both bring the processing run to a temporary stop and wait for a reaction from the user, or they may halt the program completely. Warnings, on the other hand, merely inform the user that the processed output may contain some faults that he or she might want to correct. Warnings appear on the monitor along with the page number where they occur, without the program coming to a stop. They are also written to the .log file where they may be examined after the LATEX processing and possible printing. Warnings may be issued either by LATEX or by TEX itself. C.5.1 General LATEX warnings LATEX warnings are indicated by the words ‘LaTeX Warning:’ at their start, followed by the warning message itself. LaTeX Warning: Citation ‘...’ on page ... undefined on input line .... The key in a \cite or other citation command has not yet been defined with a corresponding \bibitem command (Section 9.3). If this message does not disappear on the next run, then the bibliography is missing 430 Appendix C. Error Messages that defining \bibitem entry, either because BIBTEX has not been run, or because that reference is not in any of the specified databases. LaTeX Warning: Command ... has changed. Check if current package is valid. The \CheckCommand statement is used to test if a given command has a certain definition. This warning is issued if the test fails. This is used to be sure that a given package is doing what the programmer thinks it is doing. LaTeX Warning: Float too large for page by ..pt on input line... A float (figure or table environment) is too big to fit on the page. It will be printed anyway, but will extend beyond the normal page margins. LaTeX Warning: ‘h’ float specifier changed to ‘ht’. The float placement specifier ‘h’ for ‘here’ (Section 7.1) does not really mean exactly at the location of the float environment. It will be placed ‘here’ only if there is enough room remaining on the page for it, otherwise it appears at the top of the next available page. This message is a reminder of this fact. LaTeX Warning: inputting ‘...’ instead of obsolete ‘...’. Some packages written for LATEX 2.09 explicitly input certain files, such as article.sty, that have a new equivalent with a different name (in this case article.cls). Dummy files with the old names that issue this message and input the right file are provided. LaTeX Warning: Label ‘...’ multiply defined. Two \label or \bibitem commands have defined keys with the same name (Sections 9.2.1 and 9.3). Even after the correction has been made, this message will be printed once more to the monitor since the information that led to it is to be found in the .aux file from the last processing run. On the run after that, it should be gone. LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. The printed outputs from the \ref, \pageref, and \cite commands may be incorrect since their values have been altered during the processing. LATEX must be run once more so that the right values are used. LaTeX Warning: Marginpar on page ... moved. A marginal note on the given page has been shifted downwards to prevent it from being too close to another one. This means that it will not be beside the line of text where the \marginpar command was actually given. C.5. Warnings 431 LaTeX Warning: No \author given. The \maketitle command has been issued without a previous \author command. Unlike a missing \title command, this is not an error, but merely peculiar. The warning is printed just in case you did mean to specify an author. LaTeX Warning: Optional argument of \twocolumn too tall on page. The \twocolumn command (Section 3.2.7) starts a new page and switches to two-column formatting. The text in the optional argument is printed in one wide column above the double column text. If that text is too large to fit onto one page, this warning is printed. LaTeX Warning: \oval, \circle, or \line size unavailable on input line .... The size specified for an \oval, \circle, or slanted \line command in a picture environment is too small for LATEX to print. LaTeX Warning: Reference ‘...’ on page ... undefined on input line .... The marker name in a \ref or \pageref command has not been defined by a \label command in the previous processing run (Section 9.2.1). If this message does not disappear on the next run, the corresponding \label command is missing. LaTeX Warning: Text page ... contains only floats. This message points out that the float style parameters (Section 7.3) have excluded any regular text from appearing on the specified page. This is not necessarily bad, but you might want to check that page visually. LaTeX Warning: There were multiply-defined labels. This message is printed at the end of the LATEX run if there were any \label or \bibitem commands that used the same marker name more than once. A warning is also printed near the beginning of the run for each repeated marker name. LaTeX Warning: There were undefined references. This message is printed at the end of the LATEX run if there were any \ref or \pageref commands whose markers had not been defined during a previous run. A warning is also printed earlier for each undefined marker used. If it does not disappear on the next run, then the corresponding \label is missing, maybe due to a typing error in the marker text. 432 Appendix C. Error Messages C.5.2 LATEX package warnings The class and package warnings are those that check the names and versions of the loaded files against those requested, or the use of options, or whether the filecontents environment has written some text to a file. The commands involved are described in Section D.2.9. Classes and packages can also issue their own warnings which are peculiar to them. These cannot be listed here, since they depend entirely on the class or package itself. LaTeX Warning: File ‘...’ already exists on the system. Not generating it from this source. The filecontents environment is not extracting text from the main file because it has discovered a file of the same name already on the system. LaTeX Warning: Unused global option(s):. Options specified in the \documentclass statement are global, meaning they can apply to the class and/or to any following packages. However, if no class or package recognizes any of these options, this warning is printed, followed by a list of the unused options. LaTeX Warning: Writing file ‘...’. The filecontents environment (Section D.2.9) is extracting text out of the main file and writing it to a file of the given name. LaTeX Warning: You have requested class/package ‘...’, but the class/package provides ‘...’. The name of the class or package as given by its internal identifying command \ProvidesClass or \ProvidesPackage does not agree with the file that was read in with \usepackage or \RequirePackage. LaTeX Warning: You have requested, on input line ..., version ‘...’ of class/package ..., but only version ‘...’ is available. The date of a class or package file, as given by its internal identifying command \ProvidesClass or \ProvidesPackage, is earlier than that asked for by the \usepackage or \RequirePackage command. The class or package may not have all the features that the inputting file expects. LaTeX Warning: You have requested release ‘...’ of LaTeX, but only release ‘...’ is available. The date of your LATEX version is earlier than that specified for some input file in a \NeedsTeXFormat command (Section D.2.1). Your LATEX may not provide all the features needed by that file. C.5. Warnings C.5.3 433 LATEX font warnings Font warnings are those involving the NFSS commands (Appendix A). They are indicated by the text: LaTeX Font Warning: plus the warning text. LaTeX Font Warning: Command ... invalid in math mode. A command that should only appear in text mode has been given in math mode. The command is simply ignored. The commands \mathversion, \boldmath, \unboldmath, and \em lead to this message. There are other commands that produce an error message with the same text. LaTeX Font Warning: Command \tracingfonts not provided. (Font) Use the ‘tracefnt’ package. (Font) Command found: on input line .... The font tracing diagnostic tool \tracingfonts may only be used if the tracefnt package (page 393) has been loaded. Otherwise, this command is ignored. LaTeX Font Warning: Encoding ‘...’ has changed to ‘...’ for (Font) symbol font ‘...’ in the math version ‘...’. To make use of the specified symbol font in the given math version, it was necessary to change the font encoding temporarily. LaTeX Font Warning: Font shape ‘...’in size <...> not available (Font) size <...> substituted. No font has been defined for the size and shape requested, so a substitute size is used instead. LaTeX Font Warning: Font shape ‘...’ undefined (Font) using ‘...’ instead. The shape attribute that has been requested is unknown, or has not been defined, so a substitute shape will be used instead. C.5.4 TEX warnings A TEX warning is recognized by the fact that it is not an error message (not prefixed with !) and that the processing is not halted. The most common TEX warnings are: Overfull \hbox .... TEX could not break this line in a reasonable way so part of it will extend into the right margin. The rest of the information in the message can be of assistance. 434 ! Appendix C. Error Messages For example, with the complete warning message Overfull \hbox (17.2122pt too wide) in paragraph at lines 4--6 []\OT1/cmr/m/n/10 If T[]X can-not find an ap-pro-pri-ate spot to di-vide a word at the end of the line, as right here aaaaaaaaaaaaaaaaaaaaaaaaaa one knows that the line is about 17.2 pt (6 mm) too long and extends this amount into the right-hand margin. The line is part of the paragraph in lines 4 to 6. The font used is designated by its attributes \OT1\cmr/m/n/10. The text of the problem line is If ... ... right here aaaaaaaaaaaaaaaaaaaaaaaaaa. Possible word divisions are shown with hyphens, such as di-vide. The last word cannot be divided, which is the cause of the problem. A way around this is to include some suggested hyphenations with the \command, such as aaaaaaaaa\-aaaaaaaaaaaaaa. Similarly, a \linebreak command before the problem word, or setting the whole paragraph in a sloppypar environment, will get rid of this warning message. If a badly broken line extends only a tiny bit into the right margin, say 1 pt or less, in most cases this will hardly be noticed and may be left as it is. A sample output should be printed just to verify the appearance. Overfull \vbox .... This warning occurs very rarely. TEX could not break the page properly so that the text extends beyond the bottom of the page. More often TEX sets less text on a page than too much. Thus this warning arises only when the page contains a very large vertical box, higher than the value of \textheight, such as a long table. Underfull \hbox .... This is the opposite of the Overfull \hbox warning. It appears when TEX has filled a line right and left justified, but with so much interword spacing that it considers the appearance to be undesirable. This is often the result of a sloppypar environment, a \sloppy declaration, or a \linebreak command. It may also come about after an inappropriate application of a \\ or \newline command, such as two \\ commands one after the other. The additional information in the warning message contains the text of the badly formatted line plus an evaluation of the ‘badness’ of the word spacing. ! If in the example of the Overfull \hbox a \linebreak is included in the text at the spot ..., as right\linebreak here, then the warning becomes Underfull \hbox (badness 5504) in paragraph at lines 4--6 []\OT1/cmr/m/n/10 If T[]X can-not find an ap-pro-pri-ate spot to di-vide a word at the end of the line, as right which states that the paragraph in lines 4 to 6 contains an output line in which the interword spacing may be unacceptably wide. The text of this line reads If ... ..., as right and is set in the font \OT1/cmr/m/n/10. The evaluation C.6. Search for subtle errors 435 badness 5504 is TEX’s estimate of how unacceptable the spacing is: the smaller this number the better. Underfull \vbox .... The page has been broken with head and foot justified, but TEX judges the amount of inter-paragraph spacing to be possibly unacceptable. The badness number here corresponds to the quantity with the same name from the Underfull \hbox warning. C.6 Search for subtle errors At some point or another you will encounter an error message for which you cannot identify any cause, try as you may. For such devious errors, we recommend the following search strategy: 1. Copy the file twice into a previous and a working copy (in addition to the original, which remains untouched during this search). 2. In the working copy, find the outermost environment where the error occurred and remove one or more inner environments. If there are no inner environments, shorten the remaining text. Process the file with LATEX once more. 3. If the error still occurs, copy the shortened working copy to the previous copy and repeat step 2. If the outer environment in step 2 is \begin{document} ... \end{document}, the shortening may be carried out by simply inserting \end{document} at some earlier point. 4. If the error is no longer in the shortened working copy, copy the previous copy back to the working copy. The error is still present in this version. Remove less of the text than last time and repeat steps 2 to 4. 5. If the error is found to be in the next innermost environment, repeat the procedure for this environment with steps 2 to 4. With this strategy, the error may be localized to one command or to the innermost environment with only a small remaining structure. If the error still cannot be identified in spite of its being precisely localized, seek help from a more experienced colleague or from the computing center. However, it is normally possible to recognize the mistake once the position of the error has been found. It does happen that even though the error has been corrected, the same error message appears on the next LATEX process run. This is because of the internal transfer in information through the LATEX auxiliary files, which 436 Appendix C. Error Messages are always one run behind on the current situation. For example, if there is a mistake in one of the sectioning commands, then after it has been eliminated, the faulty entry still exists in the .toc file. If the document contains the \tableofcontents command, LATEX will read in that .toc file on the next run, and issue the error message once more, since a new .toc file is only created after a successful processing. In this case, the .toc file should also be edited and the error removed. If that is not possible, the file should be erased and the corrected source file processed twice with LATEX. If the error was in \caption, \addcontentsline, or \addtocontents, the same applies to the corresponding.lof or.lot file. Occasionally the .aux file itself must be erased to prevent an error in it from being repeated even after the .tex file has been repaired. Here one must be careful that the command \nofiles has not been given in the preamble, for then a corrected .aux file will not be generated after a further LATEX process run. D LATEX Programming In this appendix, we present the special commands that were designed for class and package files, with several examples of useful packages. We also explain the system for integrating documentation with coding in a single file, the system used for the core LATEX files and standard packages. D.1 Class and package files D.1.1 The LATEX concept, an open system The wealth of contributed LATEX programming was probably never anticipated by Leslie Lamport when he released LATEX. It is now a fact of life, and indeed one of the great strengths of the system. The LATEX Team not only accommodates such ‘foreign’ extensions, it actually supports and encourages them, as witnessed by the copious presentations of such packages in The LATEX Companion (Goossens et al., 1994) as well as in this book. And this is the way it should be. The extensions have been written by people who needed them, who realized that LATEX was missing something vital for them. On the other hand, to add all of them to the basic LATEX installation would overload it with features that 90% of the users would never require. The philosophy now is that LATEX provides a fundamental core, or kernel, which is extended first by the standard class files, and then by the myriad of contributed packages and other classes. It is the role of the LATEX Team to establish guidelines for programming, to ensure that packages do not clash needlessly with the kernel, or with each other, and to provide a basis of stability so that useful packages continue to operate through further updates to the kernel and the standard classes. These LATEX features for class and package control, together with a set of programming tools, offers an enhanced degree of reliability and durability, both among packages and against future updates of the kernel. 437 438 Appendix D. LATEX Programming D.1.2 Levels of commands There are a number of levels of commands with varying degrees of security for the future: user commands (highest level) described in this and the other manuals, consisting of lower case letters, such as \texttt, are part of the LATEX external definition to be supported forever; class and package commands with longish names of mixed upper and lower cases (like \NeedsTeXFormat) are intended mainly for programmers, and are also guaranteed; most are preamble-only commands, but there is otherwise no real restriction to class and package files; internal LATEX commands containing the character @ in their names can only be used in class and package files; they are not guaranteed forever, although many of them are indispensable for special effects; a programmer makes use of them at the risk that some day his or her package may become obsolete; low-level TEX commands also have names with lower case letters, and no @; they should be safe against future evolution of LATEX, but even this is not absolutely certain; they should be avoided where possible, as explained below; internal private commands are those used within a contributed class or package file; it is recommended that they all be prefixed with some upper case letters representing the package name and @ in order to avoid clashes with other packages; for example, \SK@cite, from the showkeys package. A question that confronts LATEX programmers is to what extent the internal LATEX commands may be used in class and package files. There is always a danger that such commands may vanish in later versions, since they have never been documented in the official books (Lamport, 1985, 1994; Goossens et al., 1994). Like the TEX commands discussed in the next section, their use cannot be forbidden, but one must be aware that a certain degree of risk will accompany them. The guidelines issued by the LATEX Team strongly recommend employing the high-level LATEX commands whenever possible. • Use \newcommand and \renewcommand instead of \def; if one of the TEX defining commands must be used, because a template is required, or because it must be \gdef or \xdef, issue a dummy \newcommand beforehand to test for a name clash. If it is unimportant whether the command name already exists, issue a dummy D.1. Class and package files 439 \providecommand followed by \renewcommand. The ability to define commands with one optional argument at the high level removes one reason for wanting to reach down to the lower ones. • Use \newenvironment and \renewenvironment instead of defining \myenv and \endmyenv. • Assign values to lengths and glues (rubber lengths) with the \setlength command, rather than by simply equating. • Avoid the TEX box commands \setbox, \hbox, and \vbox; use instead \sbox, \mbox, \parbox and the like. With the extra LATEX optional arguments, the need for the TEX equivalents is greatly diminished, and the LATEX versions are far more transparent. Moreover, the LATEX boxes will function properly with the color package, while the others are unpredictable. • Issue error and warning messages with \PackageError and \PackageWarning rather than with \@latexerr or \@warning; the former also inform the user of the source of the message, instead of labeling them all as LATEX messages. • There is no suggestion that one should exclusively use the \ifthenelse command from the ifthen package (Section 8.3.5) in place of the TEX conditionals. It seems that this package is offered to simplify employing conditionals, in a manner more consistent with LATEX syntax. Although most of the examples in this book use it rather than the TEX versions, we never employ it ourselves in our own programming. Adhering to these and similar rules will help ensure that a package will remain fit through future extensions of the LATEX kernel. D.1.3 TEX commands Why should primitive TEX commands be shunned? To define commands with \def rather than \newcommand must be just as good, and is often unavoidable. Is there really a chance that it might be removed from a future LATEX version? The primitives are the building blocks on which all flavors of LATEX are constructed. Surely they must remain! This is not really the point. The primitive TEX commands form the bedrock of any format, and anything defined with them will always do exactly what the programmer expected. However, the equivalent LATEX tools could actually do more as time goes on. The \newcommand checks for name clashes with existing commands, for example. It might even be possible that a debugging device that keeps track of all redefinitions could be added later; any commands defined with \def would be excluded from 440 Appendix D. LATEX Programming such a scheme. Even now there is something like this to keep track of all files input with middle and high-level commands. Another example of how low-level programming can go astray is the case of robust commands. Many commands are intrinsically fragile, meaning that they are prematurely interpreted when used as arguments of other commands, but they may be made robust by prefixing them with \protect. In LATEX 2.09, several fragile commands were defined to be robust by including the \protect in the definition, as for the LATEX logo command: \def\LaTeX{\protect\p@LaTeX} \def\p@LaTeX{...} The true definition is in the internal \p@LaTeX, not the external \LaTeX. Since the original definition for the logo actually possessed some flaws, several packages included an improved version. Those that simply redefined \LaTeX itself made the command fragile; those that were cleverer only redefined \p@LaTeX, with the result that they are totally left behind in LATEX 2ε , where commands are made robust in a completely different (and much better) manner. (Incidentally, the internal definition of the LATEX logo today has been greatly improved.) In spite of the desirability of employing only official LATEX commands, there are many occasions when either the internal LATEX commands or the TEX primitives just must be used. The risk of future incompatibility must be taken in order to have a workable package now. However, one should not take this risk lightly, where a high-level equivalent is available. D.2 LATEX programming commands All the commands described in this section are new to LATEX 2ε . They are not essential to class and package files, but they do extend their usefulness and guarantee that they are employed properly. D.2.1 File identification Three commands test that the external environment in which the class or package has been inserted is correct. The first of these is \NeedsTeXFormat{format}[version] The first statement in a class or package should be the declaration of the TEX format needed. Although there are existing formats with other names, only the one named LaTeX2e actually recognizes this statement. All others will immediately issue the error message ! Undefined control sequence. D.2. LATEX programming commands 441 l.1 \NeedsTeXFormat {LaTeX2e} which all by itself is fairly informative. What is perhaps of more use is the optional version argument, which must contain the date of issue in the form yyyy/mm/dd. If a package makes use of features that were introduced in a certain version, its date should be given, so that if it is used with an earlier version of LATEX 2ε , a warning is printed. For example, the command \DeclareRobustCommand did not exist in the preliminary test release of LATEX 2ε , but was first introduced with the official release of June 1, 1994. Thus any package containing this command should begin with \NeedsTeXFormat{LaTeX2e}[1994/06/01] The form of the date is important, including the zeros and slashes. This declaration is not limited to class and package files: it may also be issued at the start of the document itself to ensure that it is processed with the right LATEX. It must, however, be given in the preamble. The next two commands identify the class or package file itself: \ProvidesClass{class}[version] \ProvidesPackage{package}[version] In both cases, the version consists of three parts: date, version number, and additional information. The date is in the same format as above, while the version number can be any designation without blanks, and the additional information is text with or without blanks. An example is \ProvidesPackage{shortpag}[1995/03/24 v1.4 (F. Barnes)] Only the date part is actually checked by LATEX against the date specified in the calling \usepackage command. The version number and additional information are printed out if \listfiles has been requested. However, the above format is necessary for the \GetFileInfo command in the doc package (Section D.7.2). Both the \documentclass and \usepackage commands (as well as \LoadClass and \RequirePackage) may take an optional argument to specify the earliest acceptable release date for the class/package. For example, with \documentclass[12pt]{article}[1995/01/01] if the article class file loaded contains \ProvidesClass{article}[1994/07/13 v1.2u Standard LaTeX document class] a warning message is printed. The same procedure applies to the commands \usepackage and \ProvidesPackage. 442 Appendix D. LATEX Programming This system of version checking allows a document to insist that suitable versions of the class and package files are loaded. It assumes, however, that all later versions are fully compatible with earlier ones. There is a further identifying command for general files, those to be loaded with \input. \ProvidesFile{file name}[version] There is no checking of the name or version in this case, but both pieces of information will be printed by \listfiles. D.2.2 Loading further classes and packages In the main document file, classes are read in by means of the initializing \documentclass command, and packages with \usepackage. Within class and package files, the commands \LoadClass[options]{class}[version] \RequirePackage[options]{package}[version] \LoadClassWithOptions{class}[version] \RequirePackageWithOptions{package}[version] must be used instead. The first allows one class file to load another, with selected options, if desired; the second permits class and package files to load other packages. Only one \LoadClass command may appear within any class file; it may not be called from a package file. Neither command may be invoked in the document file. The packages argument may be a list of several package names, separated by commas. The ...WithOptions variants load the class or package with all those options that were specified for the current one, something that is often required. How the optional version arguments interact with the corresponding \Provides.. command has been explained in the previous section; how the options argument is treated is described below. D.2.3 Processing options Both classes and packages may take options which are defined with \DeclareOption{option}{code} where option is the name of the option and code is the set of instructions that it is to execute. Internally, a command named \ds@option is created. Often the code does nothing more than set flags, or input an option file. (\RequirePackage may not be used within the option code!) Two examples from article.cls are \DeclareOption{fleqn}{\input{fleqn.clo}} \DeclareOption{twocolumn}{\setboolean{\@twocolumn}{true}} D.2. LATEX programming commands 443 A default option is defined with \DeclareOption*, which takes no option name, specifying the code to be executed for all requested options that are undefined. There are two special commands that may be used only within the code of the default option definition: \CurrentOption contains the name of the option being processed; \OptionNotUsed declares \CurrentOption to be unprocessed. For example, to have a class file emulate LATEX 2.09 behavior where all undefined options load a.sty file of the same name, define \DeclareOption*{\InputIfFileExists{\CurrentOption.sty}% {}{\OptionNotUsed}} which first checks if there is a.sty file of the requested name, and if not declares the option to be unused. Requested options that have not been used (processed) are listed in a warning message. The options are then processed with the commands \ExecuteOptions{option list} \ProcessOptions \ProcessOptions* where \ExecuteOptions calls those commands defined for the options in option list. This is normally done to establish certain options as being present by default. \ProcessOptions executes all the requested options in the order in which they were defined and then removes them from the list. Options are therefore executed only once by this command. The *-version is similar, except that the options are executed in the order requested. It is also possible to transfer options to a class or package file with \PassOptionsToClass{options}{class name} \PassOptionsToPackage{options}{package name} where options is a list of valid options recognized by the specified class or package file. These commands may be used within the definition of other options. The class or package named must later be loaded with \LoadClass or \RequirePackage. If the default options for class and package files have not been altered by \DeclareOption*, the standard procedure for handling options that have been requested but are undefined is • all options requested in the \documentclass statement are designated global; they are considered to apply to all subsequent packages, but not to classes loaded with \LoadClass; if they are not defined in the class, no error or warning is issued; 444 Appendix D. LATEX Programming • all options requested with other commands, including \LoadClass and the \PassOptionsTo.., are local; if they are not defined in that class or package, an error is issued; • if there global options that are defined in neither the class nor any of the packages, a warning is issued; • options, global and local, are executed in the order in which they are defined in the class and packages, unless \ProcessOptions* has been called in which case they are executed in the order in which they are listed. D.2.4 Deferred processing Sometimes, to achieve certain special effects or to avoid possible conflicts with other packages, it is desirable to have some commands executed at the end of the package or class, or at the beginning or end of the document. This can be accomplished with \AtEndOfClass{cmds} \AtEndOfPackage{cmds} \AtBeginDocument{cmds} \AtEndDocument{cmds} The first two store away cmds to be carried out at the end of the class or package file. They can be used by local configuration files that are read in at the beginning, but contain modifications that should be made at the end so that they are not overwritten by the defaults. The last two declarations store away the cmds to be executed with \begin{document} and \end{document} respectively. All of these may be issued more than once, in which case the cmds are processed in the order in which they were issued. The cmds stored with \AtBeginDocument are inserted into the processing stream effectively within the preamble, but after the command \begin{document} has done almost everything else that it does. Thus the cmds may be considered to be part of the main body but preamble-only commands are also allowed. D.2.5 Robust commands Commands may actually be fragile, meaning that if they are used in the arguments of other commands, they could be prematurely interpreted, causing unexpected problems. This happens with moving arguments, those that appear somewhere else other than where they were given: in the table of contents and in running headlines. Complex commands with conditionals or redefinitions are likely to be fragile. D.2. LATEX programming commands 445 Many intrinsic commands in LATEX 2.09 were fragile, and it was necessary to precede them with \protect when they appeared in the argument of a \section command, for example. In this case, the command name is transferred rather than its translation. Some commands could be made robust using the trick shown on page 440 for the \LaTeX command itself. In today’s LATEX, almost all regular commands are robust. However, the commands a user may define with \newcommand, \renewcommand, and \providecommand (Section 8.3) may very well be fragile. Alternatively, one can define the commands with \DeclareRobustCommand{\com name}[narg][opt]{def } which has the same syntax as the other defining commands. If the command to be defined already exists, a message is written to the transcript file, and the old definition is overwritten. Another command with the same syntax simply checks the current definition of \com name: \CheckCommand{\com name}[narg][opt]{def } and issues a warning message if the actual definition is not the same as def, with the same number of arguments, and so on. This is used to ensure that the state of the system is as one expects, and that no previously loaded packages have altered some important definition. Both \DeclareRobustCommand and \CheckCommand may be called at any point in the document. D.2.6 Commands with ‘short’ arguments Normally, the arguments to user-defined commands are allowed to contain new paragraphs, with the \par command or with a blank line. In TEX jargon, these commands are said to be ‘long’. This is not the standard behavior for commands created with the TEX \def command, where the arguments must be short in order to act as a test for forgotten closing braces. With the version from December 1, 1994, LATEX provides *-forms of all the defining commands: \newcommand* \newenvironment* \providecommand* \DeclareRobustCommand* \renewcommand* \renewenvironment* \CheckCommand* which create user-defined commands with ‘short’ arguments in the same way as does \def. It is recommended that one should almost always take the *-version of these defining commands, unless there is some very good reason to expect that the possible arguments may be ‘long’, that is, contain new paragraphs. Long arguments should be the exception, not the rule. 446 Appendix D. LATEX Programming D.2.7 Issuing errors and warnings Classes and packages may be programmed to issue their own error messages and warnings. This is useful to indicate which file is responsible for the message. Error messages are generated with \ClassError{class name}{error text}{help} \PackageError{package name}{error text}{help} where error text is the message printed to the monitor and to the transcript file, and help is additional text printed after the user responds with H. If the texts contain command names that are to be printed literally, they must be preceded by \protect; spaces are generated with \space, and new lines with \MessageBreak. For example, \PackageError{ghost}{% The \protect\textwidth\space is too large\MessageBreak for the paper you have selected} {Use a smaller width.} produces the error message ! Package ghost Error: The \textwidth is too large (ghost) for the paper you have selected. See the ghost package documentation for explanation. Type H for immediate help. Typing H hreturni produces Use a smaller width. after which LATEX halts again to wait for a response as described in Section C.1. Warnings may also be issued from classes and packages in a similar way. The difference is that there is no help text, and the processing does not stop for a response. The line number of the input file where the warning occurred may be optionally suppressed. \ClassWarning{class name}{warning text} \ClassWarningNoLine{class name}{warning text} \PackageWarning{package name}{warning text} \PackageWarningNoLine{package name}{warning text} For example, with the warning \PackageWarning{ghost} {This text is haunted} one obtains the message Package ghost Warning: This text is haunted on input line 20. D.2. LATEX programming commands 447 and the processing continues. Warnings may be split into several lines with the \MessageBreak command, just like error texts. Two last commands of this type are \ClassInfo{class name}{info text} \PackageInfo{package name}{info text} which write their texts only to the transcript file, and not to the monitor. They are otherwise just like the corresponding NoLine warnings. D.2.8 Inputting files Files other than classes and packages may also be input, in which case it is often desirable to make sure that they exist beforehand. Or, alternative actions might be taken depending on the existence of a certain file. These goals are met with \IfFileExists{file name}{true}{false} \InputIfFileExists{file name}{true}{false} Both these commands test for the presence of the specified file name in the area that LATEX is looking for files, and execute true if it is found, otherwise false. In addition, \InputIfFileExists reads in that file after executing true. These commands are not restricted to the preamble, nor to class or package files. In fact, the regular \input command is defined in terms of them. Many special classes make use of these commands to read in a local configuration file. For example, the class ltxdoc contains \InputIfFileExists{ltxdoc.cfg} {\typeout{Local config file ltxdoc.cfg used}} {} just before \ProcessOptions is called. This allows one to have a local configuration that might specify \PassOptionsToClass{a4paper}{article} for a European installation, without altering the files that are processed with the ltxdoc class. D.2.9 Checking files Although not really part of programming, two LATEX features to keep track of input files are described here. The first of these, already mentioned in Section 9.1.1, is the command \listfiles 448 Appendix D. LATEX Programming which may be given in the preamble, even before \documentclass. It causes a list of all input files to be printed at the end of the processing, along with their version and release data. In this way, one has a record of just which files were included, something that may be of use when deciding to send a document file to another installation for processing there. Since any non-standard files may also have to be included, these may be more readily identified from such a listing. For example, the simple document file \documentclass{article} \usepackage{ifthen} \listfiles \begin{document} \input{mymacros} This is \te. \end{document} produces the listing *File List* article.cls size10.clo ifthen.sty mymacros.tex *********** 2001/04/21 v1.4e Standard LaTeX document class 2001/04/21 v1.4e Standard LaTeX file (size option) 2001/05/26 v1.1c Standard LaTeX ifthen package In this case, the local file mymacros.tex contains no version information because it is missing a \ProvidesFile command. What should one do if a local file, such as mymacros.tex above, is needed for the processing of a document file that is to be sent elsewhere? One could send it along with the main file, but that requires giving the recipient more instructions on what to do. Or, its contents could simply be included in the main file, for shipping purposes. For a package file, this is not so easy, since internal commands containing the @ sign would cause trouble, and the options would not be handled properly. For this purpose, we have the environment \begin{filecontents}{file name} file contents \end{filecontents} which may only appear at the very beginning of the document, before the \documentclass command. It tests to see if there is a file on the system with the name file name, and if not, it writes its contents literally to a file of that name. This may be a package file that is subsequently input with \usepackage. In this way, the missing non-standard files can be ported together with the main document file. If we extend the above simple example by including at the very start D.2. LATEX programming commands 449 \begin{filecontents}{mymacros} \newcommand{\te}{the end} \end{filecontents} the newly written file mymacros.tex contains %% LaTeX2e file ‘mymacros’ %% generated by the ‘filecontents’ environment %% from source ‘mydoc’ on 2003/01/31. %% \newcommand{\te}{the end} Note that the filecontents environment adds some comment lines to explain where the new file came from. If this is undesirable, the filecontents* environment may be used instead. D.2.10 Useful internal commands ! Notwithstanding the guidelines in Section D.1.2 that recommend avoiding internal LATEX commands, there are a number that are fairly fundamental, and indeed form many of the building blocks of the LATEX kernel and many standard packages. Since they are still internal commands, they are not guaranteed for all future updates. However, if they were to vanish, many of the interesting extension packages provided by the LATEX Team itself would have to be drastically overhauled. We merely present them briefly here for the sake of the bolder user. \@namedef{cmd}{def } \@nameuse{cmd} define and execute a command named \cmd, where the backslash is not included in the command name. This name may contain any characters, even those normally forbidden in command names. \@ifundefined{cmd}{true}{false} executes true if the command \cmd does not exist, else false. Again, the backslash is not included in cmd, and any characters may appear in the command name. This test is often used to define commands conditionally, a task that has been taken over by \providecommand. It may also be employed to determine whether the main class is article-like or not: \@ifundefined{chapter}{..}{..} tests for the existence of the \chapter command. \@ifnextcharchar{true}{false} tests if the next character is char, and if so, executes true, else false. This command is traditionally used to define commands with optional arguments, where char is [. The extended syntax of \newcommand offers a high-level means of achieving this. \@ifstar{true}{false} 450 Appendix D. LATEX Programming tests if the next character is a star *, and if so, executes true, else false. It is used to define *-forms of commands and environments, something that still cannot be done at the high level. \@for \obj := \list \do {cmds} where \list is a command that is defined to be a list of elements separated by commas, and \obj is successively set equal to each of these elements while the code cmds is executed once for each element. For example, \newcommand{\set}{start,middle,end} \@for \xx:=\set \do {This is the \xx. } prints ‘This is the start. This is the middle. This is the end.’ D.2.11 Useful TEX commands ! Many of the most sophisticated features of LATEX and its packages can only be programmed with the help of Plain TEX commands. These are described not only in The TEXbook (Knuth, 1986a), but also in the excellent reference manual by Eijkhout (1992), TEX by Topic, a TEXnician’s Reference. We do not intend this book to a manual for TEX; nevertheless, there are a few common TEX commands that appear in many packages, and even in the examples to follow. A brief description of what they do will aid the understanding of these codings. A true TEXpert or TEXnician can skip this section altogether. \def\cmd#1#2..{definition} is the standard defining command in TEX. It is the equivalent of \newcommand* except that there is no check for name clashes, and the arguments are specified differently. For example, a command \Exp to write scientific notation can be defined as \def\Exp#1#2{\ensuremath{#1\times10ˆ{#2}}} or as \newcommand*{\Exp}[2]{\ensuremath{#1\times10ˆ{#2}}} In both cases, \Exp{1.1}{4} produces 1.1 × 104 . However, \def can go further: it can put the arguments in a template, such as \def\Exp#1(#2){\ensuremath{#1\times10ˆ{#2}}} to allow the more convenient notation \Exp1.1(4), something that cannot be produced with \newcommand. The \def command is often used when a command is to be defined without knowing (or caring) whether its name already exists, or when a template is needed. \gdef \edef \xdef are variations on \def: the first makes a global definition, valid even outside the current environment or {..} bracketing; the second is an expanded definition, such that any commands in it have their meanings and not the command itself inserted in the definition; the last is a combination of the other two, expanded and global. D.3. Sample packages \noexpand 451 \expandafter control the expansion of commands in definitions and execution. Any commands in the definition part of \edef are expanded (their meanings inserted) unless they have \noexpand before them. The opposite is achieved with \expandafter, which jumps over the following command, expands the next one, and then executes the one skipped. This is very deep TEXnology, and is best illustrated by an example with the \Exp command defined above. \newcommand*{\mynums}{1.1(4)} \expandafter\Exp\mynums is identical to \Exp1.1(4), whereas \Exp\mynums is not; \mynums is expanded to 1.1(4) before \Exp is executed. \let\cmd a = \cmd b or \let\cmd a\cmd b makes \cmd a take on the current meaning of \cmd b. This is often employed to save the current meaning of a command before redefining it, possibly using the older meaning too. \relax does absolutely nothing, but it is often inserted in places where something should be but nothing is wanted. \ifcond true code \else false code \fi is the form of a TEX conditional. There are too many variations on the condition cond to explain here, but one common application is the equivalent of the LATEX boolean switch commands: \newif\ifflag \flagtrue \flagfalse \ifflag ..\else..\fi = = = = \newboolean{flag} \setboolean{flag}{true} \setboolean{flag}{false} \ifthenelse{\boolean{flag}}{..}{..} For those who are used to it, the TEX form is more compact, but does not conform to the general LATEX style of doing things. \ifcase num text 0 \or text 1 \or . . . \fi executes one of the text num according to the value of num. \endinput terminates the current file being input. This is not really necessary, but it is considered good programming to end all files this way. The main document file does not need it since \end{document} has the same effect. D.3 Sample packages We present here some demonstration packages to illustrate the programming commands of the previous section. These packages are not trivial and are all useful in their own right, even though their functionality is covered by others described in this book. 452 Appendix D. LATEX Programming D.3.1 Modifying the text page size The standard LATEX classes set the text size parameters \textwidth and \textheight according to the size option specified in \documentclass, such as a4paper or legalpaper. They also adjust the margins so that the text is centered both horizontally and vertically. The value of \textwidth is restricted, however, so that there are at most 60–70 characters per line, this being considered optimal by the rules of typography. Often one wants to ignore this limitation and use the paper to its maximum extent. The geometry package from Section 3.2.6 does this and much more. Here we present a simpler package for this single function. The fullpage package presented here uses the values of \paperwidth and \paperheight, which have been set according to the paper size option, to produce a margin of one inch on all sides. It even considers what the page style is so that room for head and footlines may be taken into account. Optionally, it may set an even narrower margin of 1.5 cm. Before proceeding, it might be useful to review the page format parameters shown in the figures on pages 48 and 602. The package file begins by stating that it needs LATEX 2ε and by identifying itself. The package information contains the date in prescribed form, the version number, and additionally the initials of the author. The ifthen package is then loaded since conditionals will be required. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{fullpage}[2002/02/15 1.1 (PWD)] \RequirePackage{ifthen} Next the options are prepared. These are to be in and cm for margins of 1 in and 1.5 cm respectively (1 cm is really too narrow). A special length is used to store the margin value. This is a private, internal command, conforming to the convention mentioned on page 438. \newlength{\FP@margin} \DeclareOption{in}{\setlength{\FP@margin}{1in}} \DeclareOption{cm}{\setlength{\FP@margin}{1.5cm}} Furthermore, the four standard page styles are also to be option names. They will set two internal boolean switches and the page style. \newboolean{FP@plain} \newboolean{FP@empty} \DeclareOption{plain}{\setboolean{FP@plain}{true} \setboolean{FP@empty}{false} \pagestyle{plain}} \DeclareOption{empty}{\setboolean{FP@plain}{true} \setboolean{FP@empty}{true} \pagestyle{empty}} \DeclareOption{headings}{\setboolean{FP@plain}{false} D.3. Sample packages 453 \setboolean{FP@empty}{false} \pagestyle{headings}} \DeclareOption{myheadings}{\setboolean{FP@plain}{false} \setboolean{FP@empty}{false} \pagestyle{myheadings}} Finally, the default set of options is executed, and then the selected options are processed, in this case, in the order specified. The reason for this is that if more than one page style has been given, the last one should dominate. \ExecuteOptions{in,plain} \ProcessOptions* Now the calculation can begin. First, for plain and empty, there are no headlines, so set the relevant parameters to zero. This is when FP@plain is htruei. Then set the space reserved for the footline to zero for the empty page style (FP@empty is htruei). For headings and myheadings, this space is maintained since these styles normally have a plain page (with footline) on the first page. \ifthenelse{\boolean{FP@plain}} {\setlength{\headheight}{0pt} \setlength{\headsep}{0pt}}{} \ifthenelse{\boolean{FP@empty}} {\setlength{\footskip}{0pt}}{} With all the margins and headline and footline spacings set, the actual calculation can be made. Recall that the driver program leaves a 1 inch margin at the left and above, which must be subtracted from \topmargin and \oddsidemargin. \setlength{\textwidth}{\paperwidth} \addtolength{\textwidth}{-2\FP@margin} \setlength{\oddsidemargin}{\FP@margin} \addtolength{\oddsidemargin}{-1in} \setlength{\evensidemargin}{\oddsidemargin} \setlength{\textheight}{\paperheight} \addtolength{\textheight}{-\headheight} \addtolength{\textheight}{-\headsep} \addtolength{\textheight}{-\footskip} \addtolength{\textheight}{-2\FP@margin} \setlength{\topmargin}{\FP@margin} \addtolength{\topmargin}{-1in} Remember that \paperheight and \paperwidth are set to the full dimensions of the paper by the paper size option. If this is wrongly specified, of course, the final result will be incorrect. This completes the coding for the package file fullpage.sty. An example of how it might be invoked is 454 Appendix D. LATEX Programming \documentclass[a4paper,12pt]{article} \usepackage[headings]{fullpage} . . . . . . D.3.2 Redesigning the head and footlines Something that is often demanded by LATEX users is the possibility of altering the head and footlines that appear on each page. Standard LATEX does provide a limited number of page styles (Section 3.2) but these are not always sufficient. The most flexible of them is the myheadings page style which allows the author to determine the text of the running heads with \markright and \markboth. However, the general format, including font style and placement of the page number, is still fixed by LATEX. The fancyhdr package by Piet van Oostrum (Section 3.2.2) solves all this very nicely for most cases. Nevertheless we present this example to show how it is done internally, and to illustrate how some other special effects can be achieved. We wish to modify the headline for documentation of large projects requiring particular information in the running head. Apart from a short version of the title and the section and page numbers, they might demand the document serial number, date, and version number. It would be useful to have a generalized documentation page style that allows these entries to be specified outside of the page style definition itself. Since this coding is only feasible for the article class, we will create a new class, called dochead, that inputs article.cls and then defines a new page style. Actually this class could contain many other special features of which our new page style is only one. Again we start by declaring the TEX version that we need (release 4 from December 1, 1995), and by identifying the class file. \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{dochead}[2002/04/27 1.5 (PWD)] This class has no options of its own, passing all specified ones on to the underlying article class by means of the \LoadClassWithOptions command, which only became available with release 4. \LoadClassWithOptions{article} Now come the commands that are used to enter the four pieces of information for the headline: short title, date, serial number, and version. Each of these commands stores its argument in an internal \DH@ command, each of which is initially set to be empty. Finally, the entering commands are declared to be allowed only in the preamble, since it would be disastrous if they were called after the main text had started. \newcommand*{\DocTitle}[1] \newcommand*{\DocDate}[1] {\renewcommand*{\DH@title}{#1}} {\renewcommand*{\DH@date}{#1}} D.3. Sample packages 455 \newcommand*{\DocNumber}[1] {\renewcommand*{\DH@number}{\MakeUppercase{#1}}} \newcommand*{\DocVersion}[1]{\renewcommand*{\DH@version}{#1}} \newcommand*{\DH@title}{} \newcommand*{\DH@date}{} \newcommand*{\DH@number}{} \newcommand*{\DH@version}{} \@onlypreamble{\DocTitle} \@onlypreamble{\DocDate} \@onlypreamble{\DocNumber} \@onlypreamble{\DocVersion} The \@onlypreamble command is an internal LATEX one. Note: The commands \MakeUppercase and \MakeLowercase (not used here) set the case of their arguments. The former is used here to ensure that the document number always appears in upper case letters. We now define the new page style, dochead, which means we must create a command \ps@dochead, to be executed by \pagestyle{dochead}. What this command must do is redefine the four internals \@oddhead, \@evenhead, \@oddfoot, and \@evenfoot. We make the footlines empty, and the even and odd headlines identical. That headline is to be a minipage, the full width of the page, containing a table with the relevant document information. \newcommand*{\ps@dochead}{% \renewcommand*{\@oddhead}{% \begin{minipage}{\textwidth}\normalfont \begin{tabular*}{\textwidth}{@{}l@{\extracolsep{\fill}}% l@{\extracolsep{0pt}:˜}l@{}}% \DH@number & Version & \DH@version \\ \DH@title & Section & \thesection \\ Date:˜\DH@date & Page & \thepage \end{tabular*}\vspace{0.5ex} \rule{\textwidth}{0.6pt}% \end{minipage}} \renewcommand*{\@evenhead}{\@oddhead} \renewcommand*{\@oddfoot}{} \renewcommand*{\@evenfoot}{} } \pagestyle{dochead} The last line activates the new page style. It is also necessary to increase the size of \headheight and \headsep because our headline is much higher than normal. We pick a height of 3.5 times a regular line. \setlength{\headheight}{3.5\baselineskip} \setlength{\headsep}{3em} We now add a further refinement. Such documentation normally wants the pages to be numbered within the sections. Therefore, we want to redefine the command \thepage which prints the page number from the page counter (Section 8.1.4), and we need to modify the \section command to start a new page and to reset the page counter. This is done by storing the current definition of \section and then redefining it. 456 Appendix D. LATEX Programming \let\DH@section=\section \renewcommand*{\thepage}{\thesection-\arabic{page}} \renewcommand*{\section}{\newpage\setcounter{page}{1}\DH@section} Notice that the new \section command calls the old one now stored in our own internal command \DH@section. If the above is written to a file named dochead.cls, the following source text could be used to invoke it: \documentclass[12pt,a4paper]{dochead} \DocTitle{Spacecraft Cleanliness} \DocNumber{Esa--xy--123} \DocDate{2003 Feb 26} \DocVersion{4.2} \begin{document} . . . . . . . . . . . . . . . . The headline on the fourth page of Section 3 would then appear as below. ESA–XY–123 Spacecraft Cleanliness Date: 2003 Feb 26 Version: 4.2 Section: 3 Page : 3-4 With this example as a model, it should not be difficult to create similar headlines for other applications with different entries. D.3.3 Reprogramming the sectioning commands Another aspect of LATEX formatting that one might want to alter is the appearance of the sectioning titles. The fonts used, as well as their sizes and the spacing around them, are all rigidly set in the class files. We know users who feel so frustrated by the predefined sectioning that they type in their own by hand, including the numbers, something that completely violates the LATEX concept of logical markup. In fact, all the sectioning commands from \section to \subparagraph are defined by means of a generalized internal section command with the following syntax: \@startsection{sec-name}{level}{indent}{pre-skip} {post-skip} {style}*[short title]{title} where both the * and [short title] are optional. A command like \section is defined to be \@startsection with all the arguments up to and including style; the remaining optional *, short title, and title are given as arguments to \section itself (Section 3.3.3). The meanings of these arguments are: D.3. Sample packages 457 sec-name: the name of the section level, for example subsubsection; this name is used to select the appropriate counter and to enter the title correctly in the table of contents and page headlines; level: is the number in the sectioning hierarchy as described on page 56, 1 for \section, 2 for \subsection . . . ; indent: is the amount of indentation from the left margin; pre-skip: is a rubber length, the absolute value of which is the space inserted above the title; if this is negative, the first paragraph following the section title is not indented; post-skip: is a rubber length; if positive, it is the space inserted below the title; if negative, its absolute value is the space between the title and the subsequent run-in text; style: font declarations issued when printing the section title, such as \bfseries and \Large; *: optional; if present, the section counter is not incremented, the section is not numbered, no entry is made in the table of contents; short title: optional alternative text for the table of contents and page headline; may only be given if the * is absent; title: the text printed as the section title; if short title is missing, this text is also entered in the table of contents and page headline. The font style of the title is determined by the declarations in style; these must be declarations, like \bfseries, and not commands with arguments like \textbf. However, with the release from June 1, 1996, the last item in the style list may indeed be a command with an argument. This permits something like \bfseries\MakeUppercase to force the title to be bold face capital letters. Rubber lengths with generous stretch and shrink should be given for pre-skip and post-skip to allow LATEX more freedom in avoiding bad page breaks. The section number is written with the command \@seccntformat that takes one argument, the name of the sectioning counter (sec-name above) that is to be printed. This may be redefined for special effects, as illustrated in the example below. Since both \@startsection and \@seccntformat contain @, they are internal commands that can only be used in a class or package file. We give here a brief package, mysects.sty, which redefines all the sectioning commands. The values of pre-skip and post-skip are those in the standard article.cls. 458 Appendix D. LATEX Programming \NeedsTeXFormat{LaTeX2e}[1996/06/01] \ProvidesPackage{mysects}[2003/03/21 v2.1 (PWD)] The date of the fifth LATEX release is specified because we want to use a command in the font styles. We start with the \section command which is to be centered, \Large and upper case. \renewcommand{\section}{\@startsection {section}{1}{0pt}% {-3.5ex plus -1ex minus -.2ex}% {2.3ex plus.2ex}% {\centering\normalfont\Large\MakeUppercase}} The subsections and subsubsection titles are in small caps and bold slanted fonts respectively. \renewcommand{\subsection}{\@startsection{subsection}{2}{20pt}% {-3.25ex plus -1ex minus -.2ex}% {1.5ex plus .2ex}% {\normalfont\large\scshape}} \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}% {10pt}% {-3.25ex plus -1ex minus -.2ex}% {1.5ex plus .2ex}% {\normalfont\normalsize\bfseries\slshape}} The paragraph and subparagraph titles are to be run-in types (negative post-skip). \renewcommand{\paragraph}{\@startsection{paragraph}{4}{0pt}% {3.25ex plus 1ex minus.2ex}% {-1em}% {\normalfont\normalsize\underline}} \renewcommand{\subparagraph}{\@startsection{subparagraph}{5}% {\parindent}% {3.25ex plus 1ex minus .2ex}% {-1em}% {\normalfont\normalsize\itshape}} Finally, redefine the section numbers to have a period after them. \renewcommand{\@seccntformat}[1]{\@nameuse{the#1}.\quad} As an example of output with mysects, consider the short document: \documentclass{article} \usepackage{mysects} \setcounter{secnumdepth}{3} \begin{document} \section{Historical Outline} \subsection{Medieval Life} \subsubsection{The Role of the Priest} \paragraph{In the Church} D.4. Changing preprogrammed text 459 The priest fulfills several functions. \subparagraph{At the Altar} Here the priest was master of ceremonies. \end{document} which produces output: 1. HISTORICAL OUTLINE 1.1. 1.1.1. Medieval Life The Role of the Priest In the Church At the Altar The priest fulfills several functions. Here the priest was master of ceremonies. Because the counter secnumdepth was set to 3, numbering only goes to the third level. D.4 Changing preprogrammed text D.4.1 Changing explicit names There are a number of titles that appear automatically in LATEX, such as ‘Contents’, ‘Bibliography’, ‘Chapter’. For works in languages other than English, it is necessary that they be replaced by their translations. And even in English, an author might prefer say ‘Summary’ in place of ‘Abstract’. All such explicit words are to be found in certain name commands that may be redefined as one pleases. These name commands are not defined in the basic LATEX format itself, but rather in the various class files, as they are needed. Thus \chaptername exists only in classes book and report, but not in article. This means, if a package were to redefine the word ‘Chapter’ for all classes, it must do so with something like \providecommand*{\chaptername}{} \renewcommand*{\chaptername}{Chapitre} The standard set of name commands and their initial values are: (defined in book, report, and article classes) \contentsname \listfigurename \listtablename \indexname \figurename \tablename {Contents} {List of Figures} {List of Tables} {Index} {Figure} {Table} 460 Appendix D. LATEX Programming \partname \appendixname {Part} {Appendix} (defined in book and report classes) \chaptername \bibname {Chapter} {Bibliography} (defined in article class) \abstractname \refname {Abstract} {References} (defined in letter class) \ccname \enclname \pagename \headtoname {cc} {encl} {Page} {To} (defined in makeidx package) \seename \alsoname {see} {see also} (defined only in certain packages) \prefacename \glossaryname \proofname {Preface} {Glossary} {Proof} The redefinition of these name commands is a fundamental part of the multilingual babel system (Chapter 11). The commands are not redefined directly but rather by means of certain \captionslanguage such as \captionsgerman and \captionsenglish that allow for convenient switching back and forth between different languages. For example, \newcommand*{\captionsgerman}{% \renewcommand*{\contentsname}{Inhaltsverzeichnis} ... \renewcommand*{alsoname}{siehe auch}} D.4.2 The date The \today command for the current date is another one that outputs explicit English words. Its standard definition conforms to the American style of giving dates, that is ‘January 15, 2004’. If one wants to redefine this, either for the British style (15th January 2004), or for another language altogether, the best method is to follow the example of the other names commands: do not redefine \today directly, but create commands that allow one to switch back and forth. For example, we can define \dateUSenglish and \dateenglish making use of the internal TEX counters \year, \month, \day and the TEX D.5. Direct typing of special letters 461 \ifcase command (page 451). \newcommand*{\dateUSenglish}{\renewcommand*{\today}{% \ifcase\month \or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year}} \newcommand*{\dateenglish}{\renewcommand*{\today}{% \number\day \ifcase\day \or st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or st\fi\space \ifcase\month \or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\year}} Definitions for other languages can be modeled after these examples. D.5 Direct typing of special letters Package: inputenc In Section 2.5.9, we explained the inputenc package that permits direct typing of accented and special letters, provided one has an appropriate keyboard and display font. For example, on a German keyboard set up for Windows, typing the key marked ‘ß’ inserts character 223, which is displayed on the author’s monitor as the ‘eszet’ letter for which the regular LATEX input is \ss. The source file however, receives only the code number 223, which LATEX would normally reject as unknown. The inputenc package with the ansinew option tells it that character 223 is to be treated as \ss. This will have the same result even if the file is displayed on a monitor set up for a different coding. Table D.1 lists the current set of encoding options for the package. Others may be added in the future. For each of these options, there is corresponding .def file defining the extended characters with the commands \DeclareInputText{pos}{text} \DeclareInputMath{pos}{math} or which assign text or math coding to the character pos. For example, latin1.def contains \DeclareInputText{223}{\ss} to translate the input character code 223 to the LATEX command \ss. Some TEX installations automatically contain such conversions for their own local input coding scheme; files written under such a system without 462 Appendix D. LATEX Programming Table D.1: Input coding schemes for inputenc package ascii latin1 latin2 latin3 latin4 latin5 latin9 decmulti cp850 cp852 cp437 cp437de cp865 applemac next ansinew cp1252 cp1250 7-bit ascii encoding, characters 32–127 only ISO Latin-1 encoding (Western Europe) ISO Latin-2 encoding (Eastern Europe) ISO Latin-3 encoding (Catalan, Esperanto, Galacian, Maltese) ISO Latin-4 encoding (Scandinavian, Greenland Inuit, Lappish) ISO Latin-5 encoding (Turkish) ISO Latin-9 encoding (with euro symbol) DEC Multinational encoding IBM 850 code page (Western Europe) IBM 852 code page (Eastern Europe) IBM 437 code page (North America) Variant on 437, with German ß replacing Greek β in position 225 IBM 865 code page (Scandinavia) Macintosh encoding NeXt encoding Windows ANSI encoding Windows 1252 code page (same as ansinew) Windows 1250 code page, for Central and Eastern Europe the inputenc package will be processed correctly on their own system, but will generate garbage on another one. Thus this package should always be added when special symbols are directly typed in, especially if there is any possibility that the file may be processed on another computer system. D.6 Alternatives for special symbols A number of symbols in the text fonts cannot be addressed explicitly, but only as ligatures, for example ¿ as ?‘. Other symbols that one might want in text are only available in math mode. LATEX provides some \text.. commands, listed in Table D.2 on the opposite page, to print these and other characters directly. D.7 Managing code and documentation This section describes two additional advanced features for maintaining LATEX code and its documentation. There is no need to employ these at all, for any home-written packages and classes will function just as well without them. They do add a degree of sophistication and security, by tracing the history of the code’s development, and by including the current documentation within the code itself. Here ‘documentation’ means both the user’s manual and the programmer’s description of what each step of D.7. Managing code and documentation 463 Table D.2: Alternative commands for special symbols in text mode Command Symbol Ligatures \textemdash — \textendash – \textexclamdown ¡ \textquestiondown ¿ \textquotedblleft “ \textquotedblright ” \textquoteleft ‘ \textquoteright ’ Math symbols \textbullet • \textperiodcentered · \textbackslash \ \textbar | \textless < \textgreater > Miscellaneous \textvisiblespace \textasciicircum ˆ \textasciitilde ˜ 123 \textsuperscript{123} Special symbols \textcompwordmark \textregistered ® \texttrademark ™ x \textcircled{x} ○ Replaces ---!‘ ?‘ ‘‘ ’’ ‘ ’ $\bullet$ $\cdot$ $\setminus$ $|$ $<$ $>$ \verb*+ + \verb+ˆ+ \verb+˜+ $ˆ{123}$ (ligature break) the code is doing. The LATEX installation files are written in this way. There are about 40 such files that are processed with the DocStrip utility (next Section) to extract the code from these files and merge it into one file latex.ltx. The documentation for each contributory file can be viewed alone, or a giant document can be created for the entire set. On the other hand, the standard class files, with much common coding, along with their option files, are all extracted from the one file classes.dtx, with a single documentation. More practically, many packages are provided as .dtx files containing the package code plus user manual and programmer’s documentation. A DocStrip batch job with extension.ins is also given, which when processed by LATEX (or Plain TEX for that matter) extracts the actual .sty file, along with a drive.drv file. LATEXing the driver file generates the documentation. This is usually superfluous since the.dtx file itself is so constructed that 464 Appendix D. LATEX Programming it behaves like a driver file. However, the .drv file can be edited by the user to select, say, just the user manual and to suppress the programmer notes. The next sections describe first the extraction program DocStrip, which can be used for many other applications as well (e.g. custom-bib, Section 14.3), and then the integrated documentation scheme in the following section. D.7.1 The DocStrip utility Since the TEX program is a programming as well as a text formatting language, it can be exploited to provide a number of utility ‘programs’ to manipulate files. Such programs are immediately portable: if you have TEX, you can run them. One example of such a program is the DocStrip utility for extracting functioning code out of one or more source files containing documentation, as comments. The program was originally written by Frank Mittelbach and further developed by Johannes Braams, Denys Duchier, Marcin Woliński, and Mark Wooding. The basic idea was to copy one file to another leaving off all the comment lines. From this simple concept came two additional features that extended the application of DocStrip: alternative lines of coding could be selectively suppressed or included depending on options chosen at processing time; and multiple files, or modules, could be input to form a single output file. This means that one source file can be the home of several different LATEX packages, and that a single package file can be constructed out of many different components, as for the main LATEX file latex.ltx mentioned above. Running interactively The simplest way of running DocStrip on a file is to invoke it with TEX (or LATEX, but TEX is faster), as tex docstrip which produces the response ********************************************************** * This program converts documented macro-files into fast * * loadable files by stripping off (nearly) all comments! * ********************************************************** **************************************************** * First type the extension of your input file(s): * \infileext= **************************************************** D.7. Managing code and documentation 465 One replies by entering the input extension (usually .dtx); then one is asked in turn for the output extension, the options wanted, and finally, for the root name of the file(s) to be processed. Execution follows. There are some limitations to this method, since the input and output files have the same root name, differing only in the extension, and initial and final comments added to the output are fixed. The more flexible means of running the utility is with a batch job. Running as a batch job A DocStrip batch job is a file containing instructions for the utility. For example, suppose the fullpage package illustrated in Section D.3.1 is put into a documented source file called fullpage.dtx, and the actual package file fullpage.sty is to be extracted with the option package, while a documentation driver file fullpage.drv is obtained with option driver; the batch file, named fullpage.ins, could look like \input docstrip \preamble This is a stripped version of the original file. \endpreamble \postamble This is the end of the stripped file. \endpostamble \declarepreamble\predriver This is a documentation driver file. \endpreamble \declarepostamble\postdriver End of documentation driver file. \endpostamble \keepsilent \askforoverwritefalse \generate{\file{fullpage.sty}{\from{fullpage.dtx}{package}} \file{fullpage.drv}{\usepreamble\predriver \usepostamble\postdriver \from{fullpage.dtx}{driver}} } \endbatchfile The first and last lines are vital: first the file docstrip.tex is loaded, defining all the special DocStrip commands; then after the instructions have been executed, \endbatchfile ensures an orderly termination. 466 Appendix D. LATEX Programming The commands \preamble and \postamble allow one to insert explanatory comments at the beginning and end of the extracted file. The preamble is often a copyright notice and/or a caveat that the extracted file should never be distributed without the source. Additional labeled pre- and postambles may be declared with \declarepreamble and \declarepostamble, and activated with declarations \usepreamble and \usepostamble. The instructions \keepsilent and \askforoverwritefalse are optional. The former suppresses processing information during the run while the latter turns off the warning that an existing file may be overwritten. The main command is \generate which specifies the files to be created with a series of \file commands, each taking two arguments: the name of the new file and a list of instructions for its production. These instructions can be declarations like \keepsilent or \usepreamble, but the main one is the command \from. This again takes two arguments: the name of the input file and a list of the options to be applied. In the above example, each generated file has only a single input source, but multiple input files are possible with a series of \from commands. The created fullpage.sty file now contains %% %% This is file ‘fullpage.sty’, %% generated with the docstrip utility. %% %% The original source files were: %% %% fullpage.dtx (with options: ‘package’) %% This is a stripped version of the original file. %% Copyright (C) 1994 Patrick W. Daly \NeedsTeXFormat{LaTeX2e} . . . . . . . . . . . . . . . . . . . . . . \addtolength{\topmargin}{-1in} %% This is the end of the stripped file. %% %% End of file ‘fullpage.sty’. It is possible to have a master batch job to process individual ones, in which case the master must input them with \batchinput, and not with \input. Rules for removing lines The \generate and \file commands cause the input file(s) to be transferred to the output file, line by line, according to the following rules: 1. any lines beginning with a single % sign are removed; D.7. Managing code and documentation 467 2. any lines beginning with double %% signs are retained; 3. any line beginning with % (or %<+opt>) will have the rest of its text transferred if opt is one of the selected options; otherwise it is removed; 4. any line beginning with % (or %<-opt>) will have the rest of its text transferred if opt is not one of the selected options; otherwise it is removed; 5. all lines between %<*opt> and % are retained or removed depending on whether opt is a selected option or not. Options can be combined logically, negated, and grouped: a&b a|b !a (a|b)&c (a and b); (a or b); (not a); (c and one of a or b) For more information on DocStrip, see the documentation which can be obtained by processing docstrip.dtx with LATEX. D.7.2 Documenting LATEX coding The documenting of software products is extremely important: it provides on the one hand a manual for the user, and on the other details about the coding for the programmer. The original LATEX styles, as well as the basic latex.tex file, were heavily commented by Leslie Lamport, but only with straightforward normal text. It was Frank Mittelbach’s doc package that first allowed sophisticated, integrated documentation of the source codes. By integrated documentation, we mean that the descriptions and the coding are to be found merged together in a single source file. Thus two processes are necessary, one to extract the actual coding on its own (the DocStrip utility of Section D.7.1) and another to print the documentation (the doc package). The basic idea behind this package is that the comments are in fact regular LATEX text, with some extra features to allow automatic indexing and to record the program’s development. The coding itself appears in a special type of verbatim environment. The documentation is produced by running a special driver file through LATEX. Such a driver for a source file named fullpage.dtx would be, in its simplest form, \documentclass{article} \usepackage{doc} \begin{document} \DocInput{fullpage.dtx} \end{document} 468 Appendix D. LATEX Programming The \DocInput command reads in the specified file, but it first alters the function of the % character from ‘comment’ to ‘do nothing’. This means all comment lines in fullpage.dtx become real text to be processed! We describe some of the extra features that the doc package makes available for the ‘comments’ in the .dtx files, illustrated by an example, the source file fullpage.dtx for the fullpage package presented in Section D.3.1. As usual, a more complete manual can be acquired by processing doc.dtx. The description part The documentation consists of two parts: the description, which is a manual for the end user, and the coding, a detailed explanation of how the software works, including the lines of code themselves. It is possible to suppress the coding part and to print only the description by issuing \OnlyDescription in the preamble. Special commands for the description part are: \DescribeMacro{\macro name} \DescribeEnvironment{env name} which are placed at the start of the text that illustrates a new high-level command (macro) or environment. These commands do two things: they place the macro or environment name in a marginal note at that location (for easy reference when reading) and they insert an entry in the index. Because documentation needs to use the \verb command frequently for printing input text, some abbreviations are provided with \MakeShortVerb{\c} and \DeleteShortVerb{\c} which first turn the character c into shorthand for \verbc, and then restore its normal use. For example, after \MakeShortVerb{\|}, |\mycom| prints \mycom. (These commands can be made available for any document by loading the package shortvrb, which is actually extracted from the doc package.) If the comment character % has been deactivated, how can one put comments into the documentation text? One way is to make use of the TEX conditional \iffalse to form a block, or meta comment, as % \iffalse % These lines are ignored even when the % percent character is inactive % \fi The other method is to use ˆˆA in place of %, a special doc feature. The description part is terminated with D.7. Managing code and documentation 469 \StopEventually{final text} where final text is to appear at the very end of the article; if only the description part is printed, final text is printed immediately and the documentation is ended. The coding part The coding part should normally contain the more specialized material that is of no interest to the everyday user. The special commands that may be used here are \begin{macro}{\macro name} text and code \end{macro} \begin{environment}{env name} text and code \end{environment} both of which again insert a marginal note and make an entry in the index. They also organize any \changes commands, as explained below. The most important environment in the coding part is macrocode, which prints its contents as in verbatim, optionally with a code line number. The form of this environment is somewhat special: \begin{macrocode} lines of code \end{macrocode} The four spaces before the \end{macrocode} are obligatory; those before the \begin are not necessary, but it is good practice to insert them for symmetry. This environment also counts all the backslashes within it for a checksum test, and makes an index entry for every command name that it finds. So it is something more than a mere verbatim environment! The coding part is brought to an end with \Finale which carries out the checksum test and prints the stored final text from \StopEventually. There may actually be more text following it, which is only printed when both description and coding parts are output. Index of macros and record of changes The doc package makes automatic entries into an index by means of the two \Describexxx commands and the two environments presented above. As well, all commands that appear in the coding are indexed. However, the indexing is turned on only if one of \CodelineIndex or \PageIndex is given in the preamble. The first references the indexed commands to the number of the code line where they appear, the second to the page 470 Appendix D. LATEX Programming number. In the second case, the code lines are not numbered, unless the declaration \CodelineNumbered is also issued. Since not all commands in the coding really need to be indexed, especially those that are part of standard LATEX and TEX, the command \DoNotIndex{list of command names} is given, often repeatedly, near the beginning, to exempt the listed commands from being indexed. The automatic indexing of all the commands in the code slows down the processing considerably. Once the index.idx file has been produced, future runs do not need to repeat this effort (unless there have been changes to the code). The command \DisableCrossrefs will suppress this indexing, but it may be countermanded by an earlier \EnableCrossrefs which neutralizes the disabling command. The text of the index is generated from the .idx data file by the MakeIndex program (Section 9.4.3), which must be run with the special indexing style gind.ist as makeindex -s gind.ist filename The indexing style file gind.ist can be extracted from doc.dtx. To print the index, the command \PrintIndex is placed where it should appear. Often this is part of the final text in \StopEventually. An up-to-date index can only appear after MakeIndex has been run between two LATEX processings. A record of changes to the software can be made by inserting \changes{version}{date}{text} throughout the documentation, in both the description and coding parts. To form the change history list, the command \RecordChanges must be placed in the preamble. This enables the change entries to be placed in a glossary file, which is then processed by MakeIndex as makeindex -s gglo.ist -o filename.gls filename.glo (The indexing style file gglo.ist is also extracted from doc.dtx.) The change history is then printed in the documentation where \PrintChanges is located, again often as part of final text. The texts of the \changes commands are ordered, first by version number, then by the name of the macro or environment in which they appear. D.7. Managing code and documentation 471 Integrity tests If the source file is to be sent over electronic networks, there is a danger that it might be corrupted or truncated. Two tests are possible to check for this. By placing \CheckSum{num} near the start of the documentation (before the coding anyway), all the backslashes in the macrocode environments will be added up, and the total compared with the number num by the \Finale command. If num=0, the true total will be printed on the monitor; otherwise, if the sum does not agree with num, an error is printed, with the two values. The other test checks that the character set has not been corrupted by passing through computer systems with different character codes. \CharacterTable {Upper-case \A\B\C\D\E\F\G\H. . . . . . . . . . . . . Tilde \˜} The argument must agree exactly with that expected by doc (except for inactive % signs and multiple spaces). It should be copied from the doc.sty or doc.dtx files. Obtaining the file information File information may be obtained with the command \GetFileInfo{filename} which defines \filename, \filedate, \fileversion, and \fileinfo from the optional release information to be found in the \Providesxxx command identifying the specified file (Section D.2.1). The idea is that the .dtx file should contain this information once, and only once, but it needs to be known to print it in the title of the article. These \filexxx commands may be used for this purpose. The release information must conform to the sequence date, blank, version, blank, text. The ltxdoc class A special class called ltxdoc is provided to assist running the doc package. It invokes the article class with the doc package, and then issues commands \AtBeginDocument{\MakeShortVerb{\|}} \CodelineNumbered \DisableCrossrefs 472 Appendix D. LATEX Programming and defines a number of other useful commands for aiding the documentation. See the description by processing ltxdoc.dtx. It also provides for local configuration: if ltxdoc.cfg exists, it is read in. This can pass paper size or other formatting options to article, issue \OnlyDescription by means of \AtBeginDocument, and so on. A sample .dtx file To illustrate these features, we show part of the source file fullpage.dtx. The initial lines ensure that all the files that can be extracted from it (the package .sty and the documentation driver .drv) receive their proper identifying commands. The date and version information appears only once, but is transferred to both extracted files. % \iffalse (This is a meta-comment) %% Copyright (C) 1994 Patrick W. Daly \NeedsTeXFormat{LaTeX2e} %<*dtx> \ProvidesFile {fullpage.dtx} % %\ProvidesPackage{fullpage} % % \end{macrocode} % \end{macro}\end{macro} % \Finale E LATEX and World Wide Web Today it is no longer sufficient to produce professional-looking printed output on paper; one has to be able to get it online as well, that is, make it available in electronic form of some kind. To some extent, PostScript output fulfills this requirement in that it may be considered electronic paper. However, as we point out in Section 15.3, true electronic documents are something quite different. The Internet used to be a nice, quiet neighborhood where academics could exchange simple, plain text emails or obtain known files by FTP, until it was invaded by the rowdy World Wide Web with its corporate identities, slick advertising, energetic yuppies, anarchists, and revolutionaries. In other words, it went cosmopolitan. It is here in this glittering marketplace that electronic documents have to compete for attention. An electronic document is not something that is simply sent to a printer or leisurely viewed on a monitor: it is interactive, in that it guides the reader to other parts of itself or to other documents located anywhere else on the Web. With these links, the viewer can jump to other relevant passages with a mere mouse click. Colored illustrations are naturally part of such documents, but so are sounds and movies, as well as means of sending feedback to the author. This is a totally new medium for information exchange, more radical than the Gutenberg revolution from handwritten manuscripts to printed books. In Section 1.2 we explain the structural similarities between LATEX and the Web languages HTML and XML. Here we point out the possibilities for conversion from LATEX to the others, and then how TEX can be used as an engine to render XML documents in LATEX formats. Detailed descriptions of the conversion programs are to be found in the supplied documentation, and in the LATEX Web Companion (Goossens and Rahtz, 1999). This topic is far too extensive to be dealt with in this book. 475 476 Appendix E. LATEX and World Wide Web E.1 Converting to HTML E.1.1 The LATEX2HTML program The LATEX2HTML translator, written by Nikos Drakos with additions by a large number of contributors, is a comprehensive Perl script that converts a LATEX source file into HTML with the help of several other programs, notably LATEX itself, dvips, Ghostscript, and the netpbm library of graphics utilities. When LATEX2HTML processes a LATEX file, it creates a new subdirectory with the same name as that file, to which it writes the resulting HTML output and any generated images as .gif files. The program interprets the LATEX input text in the same way as LATEX itself does, but instead of producing typesetting instructions in the .dvi file, it writes appropriate HTML code to an .html file. For example, \section{Introduction} is interpreted as\ProvidesFile{fullpage.drv} % \fi %\ProvidesFile{fullpage} [2002/02/15 1.1 (PWD)] It is the last \ProvidesFile{fullpage} that enables the proper functioning of \GetFileInfo; the first one is only a dummy to absorb the information line when the.dtx file is read directly. Next, the driver part is given. This is what LATEX sees when it processes the file directly. %\iffalse %<*driver> \documentclass[a4paper,11pt]{article} \usepackage{doc} \EnableCrossrefs \RecordChanges \CodelineIndex \begin{document} \DocInput{fullpage.dtx} \end{document} % %\fi Now the checksum and list of commands that are not to be indexed are given, followed by the start of the article. % \CheckSum{73} % \DoNotIndex{\addtolength,\boolean,\ExecuteOptions,\ifthenelse} D.7. Managing code and documentation % % % % \DoNotIndex{\newboolean,\newlength,\ProcessOptions} \DoNotIndex{\RequirePackage,\setboolean,\setlength} \changes{1.0}{1994 Feb 15}{Initial version} \changes{1.1}{2002 Feb 15}{Next revision} % % % % % % % % % % % \GetFileInfo{fullpage} \title{\bfseries A Package to Set Margins to Full Page} \author{Patrick W. Daly} \date{This paper describes package \texttt{\filename}\\ version \fileversion, from \filedate} \maketitle \MakeShortVerb{\|} 473 \section{Purpose} To set a uniform margin of one inch or 1.5˜cm on all four . . . . . . We advance to the end of the description and start of the coding part. % \StopEventually{\PrintIndex\PrintChanges} % % \section{The Coding} % The first thing is to read in the \texttt{ifthen} package, % if it is not already there. % \begin{macrocode} %<*package> \RequirePackage{ifthen} % \end{macrocode} % % \begin{macro}{\DeclareOption} % \begin{macro}{\FP@margin} % Define the options with help of the length |\FP@margin|. The % options |in| and |cm| select the actual margin size. % \begin{macrocode} \newlength{\FP@margin} \DeclareOption{in}{\setlength{\FP@margin}{1in}} \DeclareOption{cm}{\setlength{\FP@margin}{1.5cm}} % \end{macrocode} % \end{macro} The end of the file finishes the coding and calls \Finale. . . . . . . . \setlength{\topmargin}{\FP@margin} \addtolength{\topmargin}{-1in} %Introduction
for the output. This means that LATEX2HTML is essentially duplicating the LATEX processing, an enormous undertaking. Since the document classes contain varying commands or have common ones behaving differently, there must be Perl scripts for each one (article.perl, and so on) to program these commands properly. Additional packages loaded with \usepackage can also define new commands, or alter the functionality of existing ones; the translator must be informed about these by means of corresponding Perl scripts. For example, the natbib package described in Section 9.3.4 defines citation commands \citet and \citep, which need to be made available to LATEX2HTML in a file natbib.perl. Most of the tools packages of Section B.5.4 are included as Perl scripts, as are many other popular contributed packages. In other words, the entire LATEX2HTML installation must mirror the LATEX one. This process is somewhat simplified by the fact that both formats are markup languages written in pure typewriter text. However, this similarity soon reaches its limits with the many LATEX features not available in HTML, such as complex math, included figures, cross-referencing. In the other direction, HTML exhibits hyperlinks, both internally and to external documents, something not provided by normal LATEX. LATEX2HTML attempts to reproduce math with the limited HTML possibilities, but failing that, formulas are handled the same as figures and other environments that cannot be directly rendered: they are converted to GIF image files along the route.tex →.dvi →.ps →.pbm →.gif, which are then included in the HTML file as in-line images. Cross-references and citations are automatically provided with hyperlinks to their targets; the keyword index also links back to the text. Other features of HTML can be included by means of special commands defined in the html.sty package. For example: • explicit hyperlinks, internal and external E.1. Converting to HTML 477 • conditional text for the HTML or LATEX versions only • raw HTML code • segmentation of the HTML output • finer image control • ... This package thus provides the LATEX writer with a more convenient interface for producing hypertext documents; furthermore, the same document can still be processed with LATEX to generate the ‘paper’ version at any time. The conditional text mentioned above allows the electronic and paper versions to exhibit some differences. LATEX2HTML is available on the CTAN servers (Figure B.4 on page 390) under the support directory. It can also be downloaded from the LATEX2HTML home page http://cbl.leeds.ac.uk/nikos/tex2html/ doc/latex2html/latex2html.html, where more information as well as a manual can be obtained. E.1.2 The TEX4ht program An alternative program is that by Eitan M. Gurari, called TEX4ht. It produces much the same results as LATEX2HTML, but by a different route. Rather than trying to interpret the LATEX input text itself, it processes instead the.dvi file to extract the HTML output. It is therefore applicable both to LATEX and Plain TEX, as its name implies. In reality, it is not as simple as that. Since the DVI output is normally only a list of typesetting instructions, containing no logical markup information at all, it is necessary to process the LATEX input with the matching TeX4ht.sty package that redefines all the regular LATEX commands to write appropriate code to the.dvi file. This is accomplished by means of the \special command, a basic TEX command for writing instructions to a particular DVI driver. In this case the driver is the TEX4ht program; no other driver will be able to process this.dvi file. The TEX4ht processor writes the HTML output according to various options specified in the LATEX input. For example, the HTML output can be segmented by chapters or sections, tables of contents may be added to each segment, links are automatically established for cross-references. As with LATEX2HTML, manual links to external documents or internal points can be made, raw HTML coding included, explicit images included. It is also possible to turn off the HTML conversion in order to produce a normal .dvi file; conditional input for whether HTML is on or off is also available. Any symbols, tables, equations, or imported figures that cannot be directly rendered in HTML are written to a new DVI file, with extension 478 Appendix E. LATEX and World Wide Web .idv, one item per page. Finally, a log file is written containing conversion instructions for each such object; this file is so constructed as to act as a script, or batch job, for creating GIF images. Just how this conversion is realized and how the instructions are formatted depend on the local installation and can be configured by the user. However, the usual route is something like.idv →.ps (dvips) →.ppm (Ghostscript) →.gif (pbm). An example of TEX4ht output with a GIF representation of a math equation can be seen in Figure E.1 on page 482. Since TEX4ht needs to redefine all the LATEX markup commands, one could argue that it too is duplicating LATEX just like LATEX2HTML. To some extent this is true, although there is a very important difference: it is only the markup, not the formatting commands, that needs to be massaged. Most classes and additional packages will need no extra configuring to be processed by TEX4ht. A package like natbib which adds new citation commands \citet and \citep will totally confuse LATEX2HTML without the additional Perl script natbib.perl, whereas under TEX4ht these commands will produce the correct output text in the HTML file without any additional definitions. (However, the automatic links between the citations and list of references will be missing, since this is a markup feature, but the printed text will be all right.) TEX4ht is available from the TEXLive CD, or from http://www.cis. ohio-state.edu/˜gurari/TeX4ht/mn.html. LATEX2HTML and TEX4ht are only two examples of procedures for creating HTML output from LATEX. In both cases, one should not try to convert arbitrary LATEX files, but should view them as means of producing normal LATEX and HTML output from a common source file. This source file must be constructed accordingly, possibly with conditional texts for the two outputs, with manual hyperlinks, formatting options for HTML, and so on. The use of GIF bitmap images for rendering items not readily available in HTML, while producing the visual features on screen, does not allow these objects to be searched for or otherwise further processed. Such images also do not participate in automatic font size changes and other Web manipulations. E.2 The Extensible Markup Language: XML It has long been recognized that HTML has many severe limitations. Its simplicity may have been responsible for its rapid rise in popularity, but that simplicity also restricts it to the type of documents for which it was originally intended. Today the Web is offering much more than at the beginning, with databases, search engines, data verification. HTML is not programmable, so that browser suppliers have found it necessary to add additional features of their own, which only function with their browser. E.2. The Extensible Markup Language: XML 479 Standardization is thus destroyed. What is needed is a means of adding new features to an HTML file so that the browser can be informed of what they mean. This would be like adding new features to a LATEX file by means of a package. It is to this end that the Web Consortium began the development in 1996 of the Extensible Markup Language, or XML. However, XML is not so much a language as a specification for defining languages in a standard manner. An XML interpreter must be able to determine whether an XML document conforms to the general rules (mainly that all tags are properly closed), in which case it is considered to be well-formed, and to the specific syntax of the tags that it uses (as defined in a DTD, Document Type Definition), in which case it is also valid. There remains the question of how those tags are to be rendered (how are sections formatted, what to do with cross references, how to include graphics), which is relegated to style sheets documented in the Extensible Stylesheet Language, XSL. Here we have true separation between content and format, between logical and typographical markup. If all this sounds overwhelming, it is! Furthermore, the DTDs are considered to be too cumbersome and various alternatives have been developed, themselves conforming to XML (which the DTDs do not). This whole area is in transition, but the rewards will be high when a reliable standard for electronic data exchange is achieved. Data in this sense is very generic, and includes textual documents. We recommend the books by (Marchal, 2000) and (Williamson, 2001); or one can check the Web Consortium home page http://www.w3.org/. E.2.1 XML and LATEX What does all this have to do with LATEX? Just as the similarity between LATEX and HTML allow relative easy conversion, so does the essential similarity with XML. The TEX4ht system has already done the real work of converting LATEX structure into HTML tags; it is therefore simply a matter of changing the output for each of those tags, something that is put into corresponding configuration files. Since XML itself is not a language with defined tags, how do we know what those tags are to be? Here we rely on existing DTDs for textual documents. These can be the DocBook DTD developed for software user manuals and other computer documentation, or the TEI DTD, the Text Encoding Initiative meant essentially for general text, including images and sounds. The TEX4ht collection on the TEXLive CD includes configurations for producing XML output from LATEX for both of these DTDs. The preamble to the LATEX source file should then include \usepackage[html]{tex4ht} for HTML output 480 Appendix E. LATEX and World Wide Web \usepackage[xhtml,docbook]{tex4ht} \usepackage[xhtml,tei]{tex4ht} for XML, DocBook output for XML, TEI output One might ask why does the author not write an XML file directly as the source document? First, one might very well want to convert older documents recorded in LATEX to XML. Secondly, one might find it simpler to write in LATEX (not everyone agrees) since no one would write an XML file by hand (everyone agrees) but would rely on some application to do it behind the scenes. Certainly LATEX source text is easier to read, even when intersperse with commands, than an XML file. E.2.2 MathML and LATEX One of the strengths of TEX and thus LATEX over other text processing systems is the ability to handle mathematics in a way that is acceptable to mathematicians. HTML has never been able to even begin to compete in this area. The only way conversion programs like LATEX2HTML and TEX4ht can render equations like that in Figure E.1 is to convert it to an image file. This is hardly a satisfactory solution. The MathML project attempts to define an XML language to encode mathematics. We refer to chapter 8 of the LATEX Web Companion (Goossens and Rahtz, 1999) for a description. TEX4ht can produce output in MathML by specifying \usepackage[xhtml,mathml]{tex4ht} Symbols that do not exists in the browser fonts will still be converted to image files, but instructions are inserted to carry out the placement for fractions and superscripts and subscripts. Unfortunately, most browsers do not recognize MathML (yet). Again, once this becomes established there will be a standard for recording and exchanging documents with complex mathematics. E.2.3 Rendering XML with TEX/LATEX Another role that LATEX, or more properly the TEX program, can play in the XML world, is to translate it to a form that can be viewed or printed as a finished document. This is known as rendering. David Carlisle has written macros in a file xmltex.tex to act as an XML parser for output in TEX or LATEX. Sebastian Rahtz has written an additional macro package PassiveTEX, to incorporate an XSL style sheet for the TEI DTD into xmltex. With this combination, one can produce DVI or PDF output from a TEI-coded XML file. There are a number of ways of going about this. The simplest is to write a ‘wrapper’ file for processing document.xml as E.3. The techexplorer Hypermedia Browser 481 \def\xmlfile{document.xml} \input xmltex.tex and then to process this with either LATEX or pdfLATEX. The PassiveTEX macros will be found automatically, if they are on the system. Another means is to generate an xmltex format, as described in Section B.1.3. This would be done with initex &latex xmltex.tex tex -ini &latex xmltex.tex or to generate a format named xmltex.fmt. One can then invoke it with tex &xmltex document.xml or simply with xmltex document.xml if an alias or batch file for the command xmltex has been defined to equate to the real command. Instead of using the TEX program, one can also make use of pdfTEX instead, to generate PDF instead of DVI output. E.3 The techexplorer Hypermedia Browser A completely different approach to Web viewing of TEX and LATEX documents is offered by the IBM techexplorer Hypermedia Browser, a plug-in for Netscape Navigator and Microsoft Internet Explorer under Windows. When properly installed, it is launched automatically within the parent browser window when one opens a file with one of the extensions .tex, .bbl,.ltx,.latex, or.tcx. The techexplorer interprets the TEX and LATEX commands directly and displays the results on the monitor. The original page height and line width are ignored, the paragraphs being fitted to the size of the window as is normal for any browser. Fonts, tables, environments, but most importantly mathematics are reproduced very well. Figure E.1 on the next page demonstrates a single formula represented by both TEX4ht and techexplorer. Even user commands defined with \def and \newcommand are recognized, provided they occur within the same file. However, no external packages may be loaded, nor are the class files accepted. (Both \usepackage and \documentclass are simply ignored.) Hypertext features can be included with additional TEX-like commands that establish internal and external links, pop-up menus, multiple-file documents (segmentation) with automatic links between them, and inclusion of images. In other words, a techexplorer document can have the full range of hypertext features of HTML. Here one must make the same comment as for LATEX2HTML and TEX4ht: it is not primarily intended for viewing arbitrary LATEX documents, but rather for preparing hypertext Web pages by means of TEX or LATEX. The only problem here is that most 482 Appendix E. LATEX and World Wide Web Figure E.1: Example of a math formula represented by TEX4ht (as a GIF image of the original LATEX output) and by techexplorer rendering. Internet users will probably not have techexplorer installed, so that they will only be presented with the input text, and not its rendering. One additional application of techexplorer which is not available to the other programs is to embed TEX commands, especially mathematics, inside a regular HTML file. If the commands are stored in a file formula.tex, they could be embedded with
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : No Has XFA : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04 Create Date : 2004:01:15 10:14Z Modify Date : 2011:04:12 13:50:55+01:00 Metadata Date : 2011:04:12 13:50:55+01:00 Producer : pdfTeX-1.0b-pdfcrypt; modified using iText 2.1.7 by 1T3XT Format : application/pdf Document ID : uuid:0b21e8d4-34c2-454f-8672-b3641aba8915 Instance ID : uuid:ddd987b5-4a46-466e-9a26-9aa354d3817c Page Count : 658EXIF Metadata provided by EXIF.tools