% $Id: faq-adj-types.tex,v 1.50 2014/01/22 17:29:03 rf10 Exp $ \section{Adjusting the typesetting} \subsection{Alternative document classes} \Question[Q-replstdcls]{Replacing the standard classes} People are forever concocting classes that replace the standard ones: the present author produced an \Class{ukart} class that used the \Package{sober} package, and a few British-specific things (such as appear in the \Package{babel} package's British-english specialisation) in the 1980s, which is still occasionally used. Similar public efforts were available well back in the days of \LaTeXo{}: a notable example, whose pleasing designs seem not to have changed much over all that time, is the \Class{ntgclass} bundle. Each of the standard classes is replaced by a selection of classes, named in Dutch, sometimes with a single numeric digit attached. So we have classes \Class{artikel2}, \Class{rapport1}, \Class{boek3} and \Class{brief}. These classes are moderately well documented in English. The \Class{KOMA-script} bundle (classes named \Class{scr...}) are a strong current contender. They are actively supported and are subject to sensitive development; they are comprehensive in their coverage of significant typesetting issues; they produce good-looking output and they are well documented in both English (\Package{scrguien} in the distribution) and German (\Package{scrguide} in the distribution). The other comparable class is \Class{memoir}. This aims to replace \Class{book} and \Class{report} classes directly, and (like \Class{KOMA-script}) is comprehensive in its coverage of small issues. \Class{Memoir}'s documentation (\Package{memman}) is very highly spoken of, and its lengthy introductory section is regularly recommended as a tutorial on typesetting. \begin{ctanrefs} \item[\nothtml{\rmfamily}KOMA-script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[\nothtml{\rmfamily}NTGclass bundle]\CTANref{ntgclass} \item[sober.sty]\CTANref{sober} \end{ctanrefs} \Question[Q-slidecls]{Producing presentations (including slides)} Lamport's original \LaTeX{} had a separate program (Sli\TeX{}) for producing slides; it dates from the age when colour effects were produced by printing separate slides in different-coloured inks, and overlaying them, and was just about acceptable back then. When \LaTeXe{} came along, the reason Sli\TeX{} had to be a separate program went away, and its functionality was supplied by the \Class{slides} class. While this makes life a little easier for system administrators, it does nothing for the inferior functionality of the class: no-one who ``knows'' uses \Class{slides} nowadays. The `classic' alternatives have been \Class{seminar} and \Class{foils} (originally known as Foil\TeX{}). Both were originally designed to produce output on acetate foils, though subsequent work has provided environments in which they can be used with screen projectors (see below). The advent of Microsoft \ProgName{PowerPoint} (feeble though early versions of it were) has created a demand for ``dynamic'' slides~--- images that develop their content in a more elaborate fashion than by merely replacing one foil with the next in the way that was the norm when \Class{slides}, \Class{foils} and \Class{seminar} were designed. The \Class{prosper} class builds on \Class{seminar} to provide dynamic effects and the like; it retains the ability to provide \acro{PDF} for a projected presentation, or to print foils for a foil-based presentation. The add-on package \Package{ppr-prv} adds ``preview'' facilities (that which is commonly called ``hand-out printing''). The \Package{HA-prosper} package, which you load with \Class{prosper}, mends a few bugs, and adds several facilities and slide design styles. The (more recent) \Class{powerdot} class is designed as a replacement for \Class{prosper} and \Package{HA-prosper}, co-authored by the author of \Package{HA-prosper}. \Class{Beamer} is a relatively easy-to-learn, yet powerful, class that (as its name implies) was designed for use with projection displays. It needs the \Package{pgf} package (for graphics support), which in turn requires \Package{xcolor}; while this adds to the tedium of installing \Class{beamer} ``from scratch'', both are good additions to a modern \LaTeX{} installation. \Class{Beamer} has reasonable facilities for producing printed copies of slides. \Class{Talk} is another highly functional, yet easy-to-learn class which claims to differ from the systems mentioned above, such as \Class{beamer}, in that it doesn't impose a slide style on you. You get to specify a bunch of slide styles, and you can switch from one to the other between slides, as you need. The class itself provides just the one style, in the package \Package{greybars}: the author's suggestion that users should contribute their own has been enthusiastically accepted~--- see (for example) the % !line break \href{http://deic.uab.es/~iblanes/beamer_gallery/}{Beamer Gallery}. \Package{Lecturer} is a \emph{generic} solution (it works with \plaintex{}, \latex{} and \context{}~mk~ii, but not~--- yet~--- with \context{}~mk iv). By separating the functionality needed for a presentation (using \tex{} for typesetting, and \acro{PDF} functions for layering and dynamic effects) a clear structure emerges. While it doesn't have the range of ``themes'' (presentation styles) of \Class{beamer} it seems a useful alternative candidate. \Package{Present} is designed for use with \plaintex{} only; its design is simple, to the extent that its author hopes that users will themselves be able to tune its macros. \ProgName{Ppower4} (commonly known as \ProgName{pp4}) is a \ProgName{Java}-based support program that will postprocess \acro{PDF}, to `animate' the file at places you've marked with commands from one of the \ProgName{pp4} packages. The commands don't work on \acro{PDF} that has come from \ProgName{dvips} output; they work with \acro{PDF} generated by \PDFLaTeX{}, \LaTeX{}, or \ProgName{dvipdfm} running on \LaTeX{} output. \Package{Pdfscreen} and \Package{texpower} are add-on packages that permit dynamic effects in documents formatted in ``more modest'' classes; \Package{pdfscreen} will even allow you to plug ``presentation effects'' into an \Class{article}-class document. % ifmslide %\noindent ifmslide: a few slides extolling virtues in \File{doc/ifmman.pdf} A more detailed examination of the alternatives (including examples of code using many of them) may be found at Michael Wiedmann's fine \URL{http://www.miwie.org/presentations/presentations.html} \CONTeXT{} users will find that much (if not all) of what they need is already in \CONTeXT{} itself; there's a useful summary of what's available, with examples, in \URL{http://wiki.contextgarden.net/Presentation_Styles} % \begin{ctanrefs} \item[beamer.cls]Download all of \CTANref{beamer} \item[foils.cls]\CTANref{foiltex} \item[greybars.sty]distributed with \CTANref{talk} \item[HA-prosper.sty]\CTANref{ha-prosper} %\item[ifmslide.sty]\CTANref{ifmslide} \item[lecturer.sty]\CTANref{lecturer} \item[seminar.cls]\CTANref{seminar} \item[pdfscreen.sty]\CTANref{pdfscreen} \item[pgf.sty]\CTANref{pgf} \item[powerdot.cls]\CTANref{powerdot} \item[pp4]\CTANref{ppower4} \item[ppr-prv.sty]\CTANref{ppr-prv} \item[present.tex]\CTANref{present} \item[prosper.cls]\CTANref{prosper} \item[talk.cls]\CTANref{talk} \item[texpower]\CTANref{texpower} \item[xcolor.sty]\CTANref{xcolor} \end{ctanrefs} \Question[Q-poster]{Creating posters with \LaTeX{}} There is no complete ``canned solution'' to creating a poster (as, for example, classes like \Class{seminar}, \Class{powerdot} and \Class{beamer} serve for creating presentations in a variety of styles). The nearest approach to the complete solution is the \Class{sciposter} class, which provides the means to produce really rather good posters according to the author's required style. A complete worked example is provided with the distribution Otherwise, there is a range of tools, most of which are based on the \Class{a0poster} class, which sets up an appropriately-sized piece of paper, sets font sizes appropriately, and leaves you to your own devices. Having used \Class{a0poster}, you can of course slog it out, and write all your poster as an unadorned \LaTeX{} document (presumably in multiple columns, using the \Package{multicol} package), but it's not really necessary: the (straightforward) \Package{textpos} package provides a simple way of positioning chunks of text, or tables or figures, on the poster page. More sophisticated is the \Package{flowfram} package, whose basic aim in life is flowing text from one box on the page to the next. One of the package's design aims seems to have been the production of posters, and a worked example is provided. The author of \Package{flowfram} has an experimental tool called \href{http://www.dickimaw-books.com/software.html#jpgfdraw}{JpgfDraw}, which allows you to construct the outline of frames for use with \Package{flowfram}. The \Package{beamerposter} package is added to a % ! line break \Qref*{\Class{beamer} document}{Q-slidecls} to enable the user to work as if in a \Class{a0poster} class. Thus \Class{beamer}'s neat provisions for layout may be used when creating the poster. Documentation of \Package{beamerposter} is sparse, but an example file allows the user to get a grip on what's available. Despite the relative shortage of tools, there are a fair few web pages that explain the process (mostly in terms of the \Class{a0poster} route): \begin{itemize} \item from Norman Gray, % ! line break; this item checked 2012-10-02 \href{http://nxg.me.uk/docs/posters/}{Producing posters using \LaTeX{}}; \item from Nicola Talbot, % ! line break; this item checked 2012-10-02 \href{http://www.dickimaw-books.com/latex/posters/}{Creating technical posters with \LaTeX{}} \item From Rob Clark % ! line break; this item checked 2012-10-02 \href{http://homepages.inf.ed.ac.uk/robert/posters/advanced.html}{Advanced LaTeX Posters} % ! line break (which has links to code samples); \item from Brian Wolven, % ! line break this item failed 2012-10-02 \href{http://fuse.pha.jhu.edu/~wolven/posters.html}{LaTeX Poster Macros, Examples, and Accessories} % ! line break (this page also provides macros and other support suggestions); and \item from ``\emph{pjh}'' % ! line break; this item checked 2012-10-02 \href{http://www.phys.ufl.edu/~pjh/posters/poster_howto_UF.html}{Making and printing a poster with \LaTeX{}}, % ! line break which covers the specific issue of dealing with University of Florida styled poster (offering supporting material as necessary), but has hints which are generally useful. \end{itemize} \begin{ctanrefs} \item[a0poster.cls]\CTANref{a0poster} \item[beamer.cls]\CTANref{beamer} \item[beamerposter.sty]\CTANref{beamerposter} \item[flowfram.sty]\CTANref{flowfram} \item[multicol.sty]Distributed as part of \CTANref{2etools}[multicol] \item[sciposter.cls]\CTANref{sciposter} \item[textpos.sty]\CTANref{textpos} \end{ctanrefs} \Question[Q-thesis]{Formatting a thesis in \LaTeX{}} Thesis styles are usually very specific to your University, so it's usually not profitable to ask around for a package outside your own University. Since many Universities (in their eccentric way) still require double-spaced thesis text, you may also need separately to set up \Qref*{double spacing}{Q-linespace}. If you want to write a new thesis class of your own, a good place to start is the University of California style, but remember that it's often difficult to produce a thesis that both looks good and conforms with the style that your Univeristy demands. \begin{ctanrefs} \item[UC thesis style]\CTANref{ucthesis} \end{ctanrefs} \Question[Q-journalpaper]{Setting papers for journals} Publishers of journals have a wide range of requirements for the presentation of papers, and while many publishers do accept electronic submissions in \AllTeX{}, they don't often submit recommended macros to public archives. Nevertheless, there are considerable numbers of macros of one sort or another available on \acro{CTAN}; searching for your journal name in the CTAN catalogue~--- see % ! line break \Qref{searching \acro{CTAN}}{Q-findfiles})~--- may well turn up what you're seeking. Failing that, you may be well advised to contact the prospective publisher of your paper; many publishers have macros on their own web sites, or otherwise available only upon application. Check that the publisher is offering you macros suitable to an environment you can use: a few still have no macros for current \LaTeX{}, for example, claiming that \LaTeXo{} is good enough\dots{} Some publishers rekey anything sent them anyway, so that it doesn't really matter what macros you use. Others merely encourage you to use as few extensions of a standard package as possible, so that they will find it easy to transform your paper to their own internal form. \Question[Q-multidoc]{A `report' from lots of `article's} This is a requirement, for example, if one is preparing the proceedings of a conference whose papers were submitted in \LaTeX{}. The nearest things to canned solutions are Peter Wilson's \Class{combine} and Federico Garcia's \Class{subfiles} classes, but many approaches have been proposed. Each of of the offerings has its own advantages; in particular, several distinctly light-weight solutions (for example, \Package{includex} and \Package{docmute}) are available, well-suited to less formal documents. \Class{Combine} defines the means to `\csx{import}' entire documents, and provides means of specifying significant features of the layout of the document, as well as a global table of contents, and so on. The complete set of facilities is pretty complex. An auxiliary package, \Package{combinet}, allows use of the \csx{title}s and \csx{author}s (etc.\@) of the \csx{import}ed documents to appear in the global table of contents. The basic structure of a combined document would be: \begin{quote} \begin{verbatim} \documentclass[...]{combine} ... \begin{document} ... ... \begin{papers} % title and author of first article, % to go the the main ToC \coltoctitle{...} \coltocauthor{...} \label{art1} \import{art1} ... \end{papers} ... ... \end{document} \end{verbatim} \end{quote} The \Class{subfiles} class is used in the component files of a multi-file project, and the corresponding \Package{subfiles} package is used in the master file; so the structure of the master file looks like: \begin{quote} \begin{verbatim} \documentclass{} ... \usepackage{subfiles} ... \begin{document} ... \subfile{subfile_name} ... \end{document} \end{verbatim} \end{quote} while a subfile has the structure: \begin{quote} \begin{verbatim} \documentclass[mainfile_name]{subfiles} \begin{document} ... \end{document} \end{verbatim} \end{quote} Arrangements may be made so that the component files will be typeset using different page format, etc., parameters than those used when they are typeset as a part of the main file. A more `raw' toolkit is offered by Matt Swift's \Package{includex} and \Package{newclude} packages, both part of the \Package{frankenstein} bundle. Note that Matt believes \Package{includex} is obsolete (though it continues to work for this author); furthermore, its replacement, \Package{newclude} remains ``in development'', as it has been since 1999. Both \Package{includex} and \Package{newclude} enable you to `\csx{includedoc}' complete articles (in the way that you `\csx{include}' chapter files in an ordinary report). The preamble (everything up to \cmdinvoke{begin}{document}), and everything after \cmdinvoke{end}{document}, is ignored by both packages. Thus the packages don't ``do the whole job'' for you, though: you need to analyse the package use of the individual papers, and ensure that a consistent set is loaded in the preamble of the main report. (Both packages require \Package{moredefs}, which is also part of the bundle.) A neat (and simple) toolkit is offered by the \Package{docmute} package; once the package is loaded, anything between \cmdinvoke{documentclass}[...]{...} and \cmdinvoke{begin}{document} in an \csx{input}'ed or \csx{include}'d document is ignored, and then the input is processed up to \cmdinvoke{end}{document} in the input file. The package does nothing about \csx{usepackage} (or anything else) in the preamble of the included document; it's up to the user to ensure that any packages needed are loaded, and any other necessary configuration is done, in the parent document. The \Package{standalone} package develops on the ideas of \Package{docmute}; it was designed to meet the needs of users who are developing images from one of the more extreme new graphics packages (notably \Package{pgf/tikz}) where the compile time of the graphics is such that separate compilation is very desirable. \Package{Standalone} provides a means of developing the graphics in a convenient way, detached from the development of the document as a whole; its value for use in multiple documents is clear. The user includes the \Package{standalone} package in the main document, and each subfile uses the \Class{standalone} class. (\Class{Standalone} uses \Class{article} for the ``real'' work in stand-alone mode, but it may be asked to use another). The real difference from the \Package{docmute} package is flexibility. In particular, you can ask that the preambles of the included documents be gathered up, so that you can construct a good preamble for the master document. A final ``compile-together'' approach comes from the \Package{subdocs} package. The driver file contains a \csx{subdocuments} command: \begin{quote} \cmdinvoke*{subdocuments}[options]{file1, file2, ...} \end{quote} (the optional arguments provide layout options, such as control over whether \csx{clearpage} or \csx{cleardoublepage} are used between the files). Each of the sub-files will execute \begin{quote} \cmdinvoke*{usepackage}[master]{subdocs} \end{quote} to declare the name, \texttt{\emph{master}}, of the calling file; each of the subfiles reads all the \extension{aux} files, so that tables of contents may be produced. A completely different approach is to use the \Package{pdfpages} package, and to include articles submitted in \acro{PDF} format into a a \acro{PDF} document produced by \PDFLaTeX{}. The package defines an \csx{includepdf} command, which takes arguments similar to those of the \csx{includegraphics} command. With keywords in the optional argument of the command, you can specify which pages you want to be included from the file named, and various details of the layout of the included pages. \begin{ctanrefs} \item[combine.cls]\CTANref{combine} \item[combinet.sty]\CTANref{combine} \item[docmute.sty]\CTANref{docmute} \item[includex.sty]Distributed in the ``unsupported'' part of \CTANref{frankenstein}[includex] \item[moredefs.sty]Distributed as part of \CTANref{frankenstein}[moredefs] \item[newclude.sty]Distributed as part of \CTANref{frankenstein}[newclude] \item[pdfpages.sty]\CTANref{pdfpages} \item[standalone.cls, standalone.sty]\CTANref{standalone} \item[subdocs.sty]Distributed as part of \CTANref{bezos}[subdocs] \item[subfiles.cls, etc.]\CTANref{subfiles} \end{ctanrefs} \Question[Q-cv]{\emph{Curriculum Vitae} (R\'esum\'e)} Andrej Brodnik's class, \Class{vita}, offers a framework for producing a \emph{curriculum vitae}. The class may be customised both for subject (example class option files support both computer scientists and singers), and for language (both the options provided are available for both English and Slovene). Extensions may be written by creating new class option files, or by using macros defined in the class to define new entry types, etc. Didier Verna's class, \Class{curve}, is based on a model in which the \acro{CV} is made of a set of \emph{rubrics} (each one dealing with a major item that you want to discuss, such as `education', `work experience', etc). The class's documentation is supported by a couple of example files, and an emacs mode is provided. Xavier Danaux offers a class \Class{moderncv} which supports typesetting modern \emph{curricula vitarum}, both in a classic and in a casual style. It is fairly customizable, allowing you to define your own style by changing the colours, the fonts, etc. The European Commission has recommended a format for % ! line break \emph{curricula vitarum} within Europe, and Nicola Vitacolonna has developed a class \Class{europecv} to produce it. While (by his own admission) the class doesn't solve all problems, it seems well-thought out and supports all current official EU languages (together with a few non-official languages, such as Catalan, Galician and Serbian). The alternative to using a separate class is to impose a package on one of the standard classes. An example, Axel Reichert's \Package{currvita} package, has been recommended to the \acro{FAQ} team. Its output certainly looks good. There is also a \LaTeXo{} package \Package{resume}, which comes with little but advice \emph{against} trying to use it. \begin{ctanrefs} \item[currvita.sty]\CTANref{currvita} \item[curve.cls]\CTANref{curve} \item[europecv.cls]\CTANref{europecv} \item[moderncv.cls]\CTANref{moderncv} \item[resume.sty]\CTANref{resume} \item[vita.cls]\CTANref{vita} \end{ctanrefs} \Question[Q-letterclass]{Letters and the like} \LaTeX{} itself provides a \Class{letter} document class, which is widely disliked; the present author long since gave up trying with it. If you nevertheless want to try it, but are irritated by its way of vertically-shifting a single-page letter, try the following hack: \begin{quote} \begin{verbatim} \makeatletter \let\@texttop\relax \makeatother \end{verbatim} \end{quote} in the preamble of your file. Doing-it-yourself is a common strategy; Knuth (for use with \plaintex{}, in the \TeX{}book), and Kopka and Daly (in their Guide to \LaTeX{}) offer worked examples. (The latest version of Knuth's macros appear in his ``local library'' dump on the archive, which is updated in parallel with new versions of \TeX{}~--- so not very often\dots{}) Nevertheless, there \emph{are} contributed alternatives~--- in fact there are an awfully large number of them: the following list, of necessity, makes but a small selection. The largest, most comprehensive, class is \Class{newlfm}; the \texttt{lfm} part of the name implies that the class can create letters, faxes and memoranda. The documentation is voluminous, and the package seems very flexible. Other classes recommended for inclusion in this \acro{FAQ} are \Class{akletter} and \Class{isodoc}. The \Class{dinbrief} class, while recommended, is only documented in German. There are letter classes in each of the excellent \Class{KOMA-script} (\Class{scrlttr2}: documentation is available in English) and \Package{ntgclass} (\Class{brief}: documentation in Dutch only) bundles. While these are probably good (since the bundles themselves inspire trust) they've not been specifically recommended by any users. \begin{ctanrefs} \item[akletter.cls]\CTANref{akletter} \item[brief.cls]Distributed as part of \CTANref{ntgclass} \item[dinbrief.cls]\CTANref{dinbrief} \item[isodoc.cls]\CTANref{isodoc} \item[\nothtml{\rmfamily}Knuth's letter.tex]\CTANref{knuth-letter} \item[newlfm.cls]\CTANref{newlfm} \item[scrlttr2.cls]Distributed as part of \CTANref{koma-script} \end{ctanrefs} \Question[Q-extsizes]{Other ``document font'' sizes?} The \LaTeX{} standard classes have a concept of a (base) ``document font'' size; this size is the basis on which other font sizes (those from \csx{tiny} to \csx{Huge}) are determined. The classes are designed on the assumption that they won't be used with sizes other than the set that \LaTeX{} offers by default (10--12pt), but people regularly find they need other sizes. The proper response to such a requirement is to produce a new design for the document, but many people don't fancy doing that. A simple solution is to use the \Package{extsizes} bundle. This bundle offers ``extended'' versions of the article, report, book and letter classes, at sizes of 8, 9, 14, 17 and 20pt as well as the standard 10--12pt. Since little has been done to these classes other than to adjust font sizes and things directly related to them, they may not be optimal~--- but they are at least practical. More satisfactory are the \emph{\acro{KOMA}-script} classes, which are designed to work properly with the class option files that come with \Package{extsizes}, and the \Class{memoir} class that has its own options for document font sizes 9pt--12pt, 14pt, 17pt, 20pt, 25pt, 30pt, 36pt, 48pt and 60pt. The classes also offer size setup for any old font size, and the \Package{scrextend} package can extend this facility for use with any class: \begin{quote} \begin{verbatim} \usepackage[fontsize=12.3]{scrextend} \end{verbatim} \end{quote} will indeed set up the main document font to have size \texttt{12.3pt} with an appropriate default baselineskip. The package ``knows'' about \emph{\acro{KOMA}-script}'s default sizes, and for eccentric sizes such as the example, it will produce a warning: \begin{quote} \begin{verbatim} Using fallback calculation to setup font sizes \end{verbatim} \end{quote} (users should avoid becoming excited about that\dots{}). The package suffers from the same problem as does \Package{extsizes}: the resulting font sizes are the \emph{only} feature of the document that is changed, and the appearance of the resulting document will probably not be as good as if the document class had been designed for use at the size chosen. Many classes, designed to produce typeset results other than on ``ordinary'' paper, will have their own font size mechanisms and ranges of sizes. This is true, for example, of % ! line break \Qref*{poster classes}{Q-poster} (such as \Class{a0poster}), and of \Qref*{presentation and lecturing classes}{Q-slidecls} (such as \Class{beamer}. \begin{ctanrefs} \item[a0poster.cls]\CTANref{a0poster} \item[beamer.cls]\CTANref{beamer} \item[extsizes bundle]\CTANref{extsizes} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[scrextend.sty]Distributed as part of \CTANref{koma-script} \end{ctanrefs} \LastEdit{2012-11-01} \subsection{Document structure} \Question[Q-titlsty]{The style of document titles} The \Package{titling} package provides a number of facilities that permit manipulation of the appearance of a \csx{maketitle} command, the \csx{thanks} commands within it, and so on. The package also defines a \environment{titlingpage} environment, that offers something in between the standard classes' \pkgoption{titlepage} option and the \environment{titlepage} environment, and is itself somewhat configurable. The memoir class includes all the functionality of the \Package{titling} package, while the \Class{KOMA-script} classes have their own range of different titling styles. Finally, the indefatigable Vincent Zoonekynd supplies examples of how to program alternative % don't let this \href suffer a line-break \href{http://zoonek.free.fr/LaTeX/LaTeX_samples_title/0.html}{title styles}. The web page is not useful to users unless they are willing to do their own \LaTeX{} programming. \begin{ctanrefs} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[titling.sty]\CTANref{titling} \end{ctanrefs} \Question[Q-secthead]{The style of section headings} Suppose that the editor of your favourite journal has specified that section headings must be centred, in small capitals, and subsection headings ragged right in italic, but that you don't want to get involved in the sort of programming described in section 2.2 of \emph{The \LaTeX{} Companion} \begin{narrowversion} % really non-hyper (\Qref{}{Q-latex-books}; the programming itself is discussed in \Qref[question]{}{Q-atsigns}). \end{narrowversion} \begin{wideversion} % really hyper (see \Qref{\latex{} books}{Q-latex-books}; the \Qref{programming}{Q-atsigns} itself is discussed elsewhere in this \acro{FAQ}). \end{wideversion} The following hack will probably satisfy your editor. Define yourself new commands \begin{quote} \begin{wideversion} \begin{verbatim} \newcommand{\ssection}[1]{% \section[#1]{\centering\normalfont\scshape #1}} \newcommand{\ssubsection}[1]{% \subsection[#1]{\raggedright\normalfont\itshape #1}} \end{verbatim} \end{wideversion} \begin{narrowversion} % really non-hyper \begin{verbatim} \newcommand{\ssection}[1]{% \section[#1]{\centering \normalfont\scshape #1}} \newcommand{\ssubsection}[1]{% \subsection[#1]{\raggedright \normalfont\itshape #1}} \end{verbatim} \end{narrowversion} \end{quote} and then use \csx{ssection} and \csx{ssubsection} in place of \csx{section} and \csx{subsection}. This isn't perfect: section numbers remain in bold, and starred forms need a separate redefinition. The \Package{titlesec} package offers a structured approach to the problem, based on redefinition of the sectioning and chapter commands themselves. This approach allows it to offer radical adjustment: its options provide (in effect) a toolbox for designing your own sectioning commands' output. The \Package{sectsty} package provides a more simply structured set of tools; while it is less powerful than is \Package{titlesec}, it is perhaps preferable for minor adjustments, since you can use it after having read a smaller proportion of the manual. The \Package{fncychap} package provides a nice collection of customised chapter heading designs. The \Package{anonchap} package provides a simple means of typesetting chapter headings ``like section headings'' (i.e., without the ``Chapter'' part of the heading); the \Package{tocbibind} package provides the same commands, in pursuit of another end. The \Class{memoir} class includes facilities that match \Package{sectsty} and \Package{titlesec}, as well as a bundle of chapter heading styles (including an \Package{anonchap}-equivalent). The \Class{KOMA-script} classes also have sets of tools that provide equivalent functionality, notably formatting specifications \csx{partformat}, \csx{chapterformat}, \csx{sectionformat}, \dots{}, as well as several useful overall formatting specifications defined in class options. Finally, the indefatigable Vincent Zoonekynd supplies examples of how to program alternative % don't let these \href suffer line-breaks \href{http://zoonek.free.fr/LaTeX/LaTeX_samples_chapter/0.html}{chapter heading styles} and \href{http://zoonek.free.fr/LaTeX/LaTeX_samples_section/0.html}{section heading styles}. The web pages provide programming examples, and expect users to adapt them to their own \LaTeX{} use. \begin{ctanrefs} \item[anonchap.sty]\CTANref{anonchap} \item[fncychap.sty]\CTANref{fncychap} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[sectsty.sty]\CTANref{sectsty} \item[titlesec.sty]\CTANref{titlesec} \item[tocbibind.sty]\CTANref{tocbibind} \end{ctanrefs} \LastEdit{2011-06-01} \Question[Q-appendix]{Appendixes} \LaTeX{} provides an exceedingly simple mechanism for appendixes: the command \csx{appendix} switches the document from generating sections (in \Class{article} class) or chapters (in \Class{report} or \Class{book} classes) to producing appendixes. Section or chapter numbering is restarted and the representation of the counter switches to alphabetic. So: \begin{quote} \begin{verbatim} \section{My inspiration} ... \section{Developing the inspiration} ... \appendix \section{How I became inspired} ... \end{verbatim} \end{quote} would be typeset (in an \Class{article} document) something like: \begin{quote} \textbf{1~~My inspiration} \dots{} \textbf{2~~Developing the inspiration} \dots{} \textbf{A~~How I became inspired} \dots{} \end{quote} which is quite enough for many ordinary purposes. Note that, once you've switched to typesetting appendixes, \LaTeX{} provides you with no way back~--- once you've had an appendix, you can no longer have an ``ordinary'' \csx{section} or \csx{chapter}. The \Package{appendix} provides several ways of elaborating on this simple setup. Straightforward use of the package allows you to have a separate heading, both in the body of the document and the table of contents; this would be achieved by \begin{quote} \begin{verbatim} \usepackage{appendix} ... \appendix \appendixpage \addappheadtotoc \end{verbatim} \end{quote} The \csx{appendixpage} command adds a separate title ``Appendices'' above the first appendix, and \csx{addappheadtotoc} adds a similar title to the table of contents. These simple modifications cover many people's needs about appendixes. The package also provides an \environment{appendices} environment, which provides for fancier use. The environment is best controlled by package options; the above example would be achieved by \begin{quote} \begin{verbatim} \usepackage[toc,page]{appendix} ... \begin{appendices} ... \end{appendices} \end{verbatim} \end{quote} The great thing that the \environment{appendices} environment gives you, is that once the environment ends, you can carry on with sections or chapters as before~--- numbering isn't affected by the intervening appendixes. The package provides another alternative way of setting appendixes, as inferior divisions in the document. The \environment{subappendices} environment allows you to put separate appendixes for a particular section, coded as \csx{subsection}s, or for a particular chapter, coded as \csx{section}s. So one might write: \begin{quote} \begin{verbatim} \usepackage{appendix} ... \section{My inspiration} ... \begin{subappendices} \subsection{How I became inspired} ... \end{subappendices} \section{Developing the inspiration} ... \end{verbatim} \end{quote} Which will produce output something like: \begin{quote} \textbf{1~~My inspiration} \dots{} \textbf{1.A~~How I became inspired} \dots{} \textbf{2~~Developing the inspiration} \dots{} \end{quote} There are many other merry things one may do with the package; the user is referred to the package documentation for further details. The \Class{memoir} class includes the facilities of the \Package{appendix} package. The \Class{KOMA-script} classes offer a \csx{appendixprefix} command for manipulating the appearance of appendixes. \begin{ctanrefs} \item[appendix.sty]\CTANref{appendix} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \end{ctanrefs} \Question[Q-secindent]{Indent after section headings} \LaTeX{} implements a style that doesn't indent the first paragraph after a section heading. There are coherent reasons for this, but not everyone likes it. The \Package{indentfirst} package suppresses the mechanism, so that the first paragraph is indented. \begin{ctanrefs} \item[indentfirst.sty]Distributed as part of \CTANref{2etools}[indentfirst] \end{ctanrefs} \Question[Q-subsubsub]{How to create a \csx{subsubsubsection}} \LaTeX{}'s set of ``sections'' stops at the level of \csx{subsubsection}. This reflects a design decision by Lamport~--- for, after all, who can reasonably want a section with such huge strings of numbers in front of it? In fact, \LaTeX{} standard classes \emph{do} define ``sectioning'' levels lower than \csx{subsubsection}, but they don't format them like sections (they're not numbered, and the text is run-in after the heading). These deeply inferior section commands are \csx{paragraph} and \csx{subparagraph}; you can (if you \emph{must}) arrange that these two commands produce numbered headings, so that you can use them as \csx{subsubsubsection}s and lower. The \Package{titlesec} package provides a sensible set of macros for you to adjust the definitions of the sectioning macros, and it may be used to transform a \csx{paragraph}'s typesetting so that it looks like that of a \csx{section}. If you want to program the change yourself, you'll find that the commands (\csx{section} all the way down to \csx{subparagraph}) are defined in terms of the internal \csx{@startsection} command, which takes 6~arguments. Before attempting this sort of work, you are well advised to read the \LaTeX{} sources (\File{ltsect.dtx} in the \LaTeX{} distribution) and the source of the standard packages (\File{classes.dtx}), or to make use of the % ! line break \Qref*{\LaTeX{} Companion}{Q-latex-books}, which discusses the use of \csx{@startsection} for this sort of thing. You will note that Lamport didn't go on adding ``\texttt{sub}'' to the names of sectioning commands, when creating commands for the lowest levels of a document. This would seem sensible to any but the most rigorous stickler for symmetry~--- it would surely challenge pretty much anyone's reading of the source of a document, if there was a need to distinguish \csx{subsubsubsection} and \csx{subsubsubsubsection} \begin{ctanrefs} \item[\nothtml{\rmfamily}\LaTeX{} source]\CTANref{latex} \item[titlesec.sty]\CTANref{titlesec} \end{ctanrefs} \LastEdit{2012-02-14} \Question[Q-captsty]{The style of captions} Changes to the style of captions may be made by redefining the commands that produce the caption. So, for example, \csx{fnum@figure} (which produces the float number for figure floats) may be redefined, in a package of your own, or between \Qref*{\csx{makeatletter}--\csx{makeatother}}{Q-atsigns}: \begin{quote} \begin{wideversion} \begin{verbatim} \renewcommand{\fnum@figure}{\textbf{Fig.~\thefigure}} \end{verbatim} \end{wideversion} \begin{narrowversion} \begin{verbatim} \renewcommand{\fnum@figure}% {\textbf{Fig.~\thefigure}} \end{verbatim} \end{narrowversion} \end{quote} which will cause the number to be typeset in bold face. (Note that the original definition used \nothtml{\csx{figurename}~--- }% \Qref{\csx{figurename}}{Q-fixnam}.) More elaborate changes can be made by patching the \csx{caption} command, but since there are packages to do the job, such changes (which can get rather tricky) aren't recommended for ordinary users. The \Package{float} package provides some control of the appearance of captions, though it's principally designed for the creation of non-standard floats. The \Package{caption} and \Package{ccaption} (note the double ``\emph{c}'') packages provide a range of different formatting options. \Package{ccaption} also provides `continuation' captions and captions that can be placed outside of float environments. The (very simple) \Package{capt-of} package also allows captions outside a float environment. Note that care is needed when doing things that assume the sequence of floats (as in continuation captions), or potentially mix non-floating captions with floating ones. The \Class{memoir} class includes the facilities of the \Package{ccaption} package; the \Class{KOMA-script} classes also provide a wide range of caption-formatting commands. The documentation of \Package{caption} is available by processing a file \File{manual.tex}, which is created when you unpack \File{caption.dtx} Note that the previously-recommended package \Package{caption2} has now been overtaken again by \Package{caption}; however, \Package{caption2} remains available for use in older documents. \begin{ctanrefs} \item[caption.sty]\CTANref{caption} \item[capt-of.sty]\CTANref{capt-of} \item[ccaption.sty]\CTANref{ccaption} \item[float.sty]\CTANref{float} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \end{ctanrefs} \Question[Q-fancyhdr]{Alternative head- and footlines in \LaTeX{}} \keywords{headings header footer headline footline} The standard \LaTeX{} document classes define a small set of `page styles' which specify head- and footlines for your document (though they can be used for other purposes, too). The standard set is very limited, but \LaTeX{} is capable of much more. The internal \LaTeX{} coding needed to change page styles is not particularly challenging, but there's no need~--- there are packages that provide useful abstractions that match the way we typically think about these things. The \Package{fancyhdr} package provides simple mechanisms for defining pretty much every head- or footline variation you could want; the directory also contains some documentation and one or two smaller packages. \Package{Fancyhdr} also deals with the tedious behaviour of the standard styles with \Qref*{initial pages}{Q-nopageno}, by enabling you to define different page styles for initial and for body pages. While \Package{fancyhdr} will work with \Class{KOMA-script} classes, an alternative package, \Package{scrpage2}, eases integration with the classes. \Package{Scrpage2} may also be used as a \Package{fancyhdr} replacement, providing similar facilities. The \Class{KOMA-script} classes themselves permit some modest redefinition of head- and footlines, without the use of the extra package. \Class{Memoir} also contains the functionality of \Package{fancyhdr}, and has several predefined styles. Documentation of \Package{fancyhdr} is distributed with the package, in a separate file; documentation of \Package{scrpage2} is integrated with the \File{scrgui*} documentation files that are distributed with the \Class{KOMA-script} classes. \begin{ctanrefs} \item[fancyhdr.sty]\CTANref{fancyhdr} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \end{ctanrefs} \Question[Q-widefigs]{Wide figures in two-column documents} Floating figures and tables ordinarily come out the same width as the page, but in two-column documents they're restricted to the width of the column. This is sometimes not good enough; so there are alternative versions of the float environments~--- in two-column documents, \texttt{figure*} provides a floating page-wide figure (and \texttt{table*} a page-wide table) which will do the necessary. The ``\texttt{*}''ed float environments can only appear at the top of a page, or on a whole page~--- \texttt{h} or \texttt{b} float placement directives are simply ignored. Unfortunately, page-wide equations can only be accommodated inside float environments. You should include them in \texttt{figure} environments, or use the \Package{float} or \Package{ccaption}package to define a new float type. \begin{ctanrefs} \item[ccaption.sty]\CTANref{ccaption} \item[float.sty]\CTANref{float} \end{ctanrefs} \Question[Q-onecolabs]{1-column abstract in 2-column document} One often requires that the abstract of a paper should appear across the entire page, even in a two-column paper. The required trick is: \begin{quote} \begin{verbatim} \documentclass[twocolumn]{article} ... \begin{document} ... % \author, etc \twocolumn[ \begin{@twocolumnfalse} \maketitle \begin{abstract} ... \end{abstract} \end{@twocolumnfalse} ] \end{verbatim} \end{quote} Unfortunately, with the above \csx{thanks} won't work in the \csx{author} list. If you need such specially-numbered footnotes, you can make them like this: \begin{quote} \begin{verbatim} \title{Demonstration} \author{Me, You\thanks{}} \twocolumn[ ... as above ... ] { \renewcommand{\thefootnote}% {\fnsymbol{footnote}} \footnotetext[1]{Thanks for nothing} } \end{verbatim} \end{quote} and so on. As an alternative, among other facilities the \Package{abstract} package provides a \csx{saythanks} command and a \environment{onecolabstract} environment which remove the need to fiddle with the \csx{thanks} and footnoting. They can be used like this: \begin{quote} \begin{verbatim} \twocolumn[ \maketitle % full width title \begin{onecolabstract} % ditto abstract ... text \end{onecolabstract} ] \saythanks % typeset any \thanks \end{verbatim} \end{quote} The \Class{memoir} class offers all the facilities of \Package{abstract}. \begin{ctanrefs} \item[abstract.sty]\CTANref{abstract} \item[memoir.cls]\CTANref{memoir} \end{ctanrefs} \Question[Q-reallyblank]{Really blank pages between chapters} If you're using the standard classes, you need to take special action; the \Class{memoir} class and the \Class{Koma-Script} classes provide their own support for this~--- see below. \Class{Book} (by default) and \Class{report} (with \pkgoption{openright} class option) ensure that each chapter starts on a right-hand (recto) page; they do this by inserting a \csx{cleardoublepage} command between chapters (rather than a mere \csx{clearpage}). The empty page thus created gets to have a normal running header, which some people don't like. The (excellent) \Package{fancyhdr} manual covers this issue, basically advising the creation of a command \csx{clearemptydoublepage}: \begin{quote} \begin{verbatim} \let\origdoublepage\cleardoublepage \newcommand{\clearemptydoublepage}{% \clearpage {\pagestyle{empty}\origdoublepage}% } \end{verbatim} \end{quote} The ``obvious'' thing is then to use this command to replace \csx{cleardoublepage} in a patched version of the \csx{chapter} command. (Make a package of your own containing a copy of the command out of the class.) This isn't particularly difficult, but you can instead simply subvert \csx{cleardoublepage} (which isn't often used elsewhere): \begin{quote} \begin{verbatim} \let\cleardoublepage\clearemptydoublepage \end{verbatim} \end{quote} Note: this command works because \csx{clearemptydoublepage} uses a copy of \csx{cleardoublepage}: instructions on macro programming % beware line break \Qref*[question]{patching techniques}{Q-patch} explain the problem and why this is a solution. The \Package{emptypage} package does this sort of thing for you; all you need do is load the package, and it does the rest. The \emph{\acro{KOMA}-Script} replacements for the \Class{book} and \Class{report} classes (\Class{scrbook} and \Class{scrreprt} offers class options \pkgoption{cleardoubleempty}, \pkgoption{cleardoubleplain} and \pkgoption{cleardoublestandard} (using the running page style, as normal) that control the appearance of these empty pages. The classes also offer do-it-yourself commands \csx{cleardoubleempty} (etc.\@). The \Class{memoir} class (and the \Package{nextpage} package) provide commands \csx{cleartooddpage} and \csx{cleartoevenpage}, which both take an optional argument (the first, with no argument, being an equivalent of \csx{cleardoublepage}). One can achieve `special' effects by putting commands in the optional argument: the \csx{clearemptydoublepage} we're after would be achieved by \csx{cleartooddpage[}\cmdinvoke{thispagestyle}{empty}\texttt{]}. The commands will also serve if you want the surreal effect of ``This page intentionally left blank'' in the centre of an otherwise empty page. \begin{ctanrefs} \item[emptypage.sty]\CTANref{emptypage} \item[fancyhdr.sty]\CTANref{fancyhdr} \item[memoir.cls]\CTANref{memoir} \item[nextpage.sty]\CTANref{nextpage} \item[scrbook.cls, scrrept.cls]Part of \CTANref{koma-script} \end{ctanrefs} \Question[Q-balance]{Balancing columns at the end of a document} The \Package{twocolumn} option of the standard classes causes \LaTeX{} to set the text of a document in two columns. However, the last page of the document typically ends up with columns of different lengths~--- such columns are said to be ``unbalanced''. Many (most?) people don't like unbalanced columns. The simplest solution to the problem is to use the \Package{multicol} package in place of the \Package{twocolumn} option, as \Package{multicol} balances the columns on the final page by default. However, the use of \Package{multicol} does come at a cost: its special output routine disallows the use of in-column floats, though it does still permit full-width (e.g., \environment{figure*} environment) floats. As a result, there is a constant push for a means of balancing columns at the end of a \Package{twocolumn} document. Of course, the job can be done manually: \csx{pagebreak} inserted at the appropriate place on the last page can often produce the right effect, but this seldom appeals, and if the last page is made up of automatically-generated text (for example, bibliography or index) inserting the command will be difficult. The \Package{flushend} package offers a solution to this problem. It's a somewhat dangerous piece of macro code, which patches one of the most intricate parts of the \LaTeX{} kernel without deploying any of the safeguards discussed in \Qref[question]{patching commands}{Q-patch}. The package only changes the behaviour at end document (its \csx{flushend} command is enabled by default), and one other command permits adjustment of the final balance; other packages in the bundle provide means for insertion of full width material in two-column documents. The \Package{balance} package also patches the output routine (somewhat more carefully than \Package{flushend}). The user should be aware that any of these packages are liable to become confused in the presence of floats: if problems arise, manual adjustment of the floats in the document is likely to be necessary. It is this difficulty (what's required in any instance can't really be expressed in current \LaTeX{}) that led the author of \Package{multicol} to suppress single-column-wide floats. \begin{ctanrefs} \item[balance.sty]Distributed as part of \CTANref{preprint}[balance] \item[flushend.sty]Distributed as part of \CTANref{sttools}[flushend] \item[multicol.sty]Distributed as part of \CTANref{2etools}[multicol] \end{ctanrefs} \Question[Q-runheadtoobig]{My section title is too wide for the page header} By default, \LaTeX{} sectioning commands make the chapter or section title available for use by page headers and the like. Page headers operate in a rather constrained area, and it's common for titles too be too big to fit: the \LaTeX{} sectioning commands therefore take an optional argument: \begin{quote} \begin{verbatim} \section[short title]{full title} \end{verbatim} \end{quote} If the \meta{short title} is present, it is used both for the table of contents and for the page heading. The usual answer to people who complain that their title is too big for the running head is to suggest that they the optional argument. However, using the same text for the table of contents as for the running head may also be unsatisfactory: if your chapter titles are seriously long (like those of a Victorian novel), a valid and rational scheme is to have a shortened table of contents entry, and a really terse entry in the running head. One of the problems is the tendency of page headings to be set in capitals (which take up more space); so why not set headings as written for ``ordinary'' reading? It's not possible to do so with unmodified \LaTeX{}, but the \Package{fancyhdr} package provides a command \csx{nouppercase} for use in its header (and footer) lines to suppress \LaTeX{}'s uppercasing tendencies. Classes in the \Class{KOMA-script} bundle don't uppercase in the first place. In fact, the sectioning commands use `mark' commands to pass information to the page headers. For example, \csx{chapter} uses \csx{chaptermark}, \csx{section} uses \csx{sectionmark}, and so on. With this knowledge, one can achieve a three-layer structure for chapters: \begin{quote} \begin{verbatim} \chapter[middling version]{verbose version} \chaptermark{terse version} \end{verbatim} \end{quote} which should supply the needs of every taste. Chapters, however, have it easy: hardly any book design puts a page header on a chapter start page. In the case of sections, one has typically to take account of the nature of the \csx{*mark} commands: the thing that goes in the heading is the first mark on the page (or, failing any mark, the last mark on any previous page). As a result the recipe for sections is more tiresome: \begin{quote} \begin{verbatim} \section[middling version]{verbose version% \sectionmark{terse version}} \sectionmark{terse version} \end{verbatim} \end{quote} (the first \csx{sectionmark} deals with the header of the page the \csx{section} command falls on, and the second deal with subsequent pages; note that here, you need the optional argument to \csx{section}, even if ``\emph{middling version}'' is in fact the same text as ``\emph{long version''}.) A similar arrangement is necessary even for chapters if the class you're using is odd enough that it puts a page header on a chapter's opening page. Note that the \Package{titlesec} package manages the running heads in a completely different fashion; for example, you can use the optional argument of sectioning commands for page headers, only, by loading the package as: \begin{quote} \begin{verbatim} \usepackage[toctitles]{titlesec} \end{verbatim} \end{quote} The package documentation offers other useful techniques in this area. \LeadFrom{Tobi}{sx}{2012-02-01} The \Class{memoir} class avoids all the silliness by providing an extra optional argument for chapter and sectioning commands, for example: \begin{quote} \begin{narrowversion} \begin{verbatim} \section[middling version][terse version]% {verbose version} \end{verbatim} \end{narrowversion} \begin{wideversion} \begin{verbatim} \section[middling version][terse version]{verbose version} \end{verbatim} \end{wideversion} \end{quote} As a result, it is always possible for users of \Class{memoir} to tailor the header text to fit, with very little trouble. \begin{ctanrefs} \item[fancyhdr.sty]\CTANref{fancyhdr} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[titlesec.sty]\CTANref{titlesec} \end{ctanrefs} \LastEdit{2012-02-01} \nothtml{\begingroup\boldmath} \Question[Q-nofm]{Page numbering ``\meta{n} of \meta{m}''} \nothtml{\afterquestion} Finding the page number of the last page of a document, from within the document, is somewhat tricky. The \Package{lastpage} and \Package{zref-lastpage} packages define a label \texttt{LastPage} whose number is \emph{right} (after sufficiently many passes through \LaTeX{}, of course). The \Class{memoir} class also defines a ``last page'' label. The documentation of the \Package{fancyhdr} package spells out exactly how one might actually use this information to produce page numbering as suggested in the question. \begin{ctanrefs} \item[\nothtml{\rmfamily}fancyhdr documentation]\CTANref{fancyhdr} \item[lastpage.sty]\CTANref{lastpage} \item[zref-lastpage]Distributed as part of \CTANref{oberdiek}[zref] \end{ctanrefs} \LastEdit{2012-10-16} \Question[Q-pagebychap]{Page numbering by chapter} When I was a young man, a common arrangement for loose bound technical manuals is to number pages by chapter. (It's quite a good scheme, in those situations: even if your corrections add a whole page to the chapter, the most you have to redistribute is that chapter.) The problem, at first sight, seems pretty much the same as that in another answer on % beware line break \Qref*{running numbers within a chapter}{Q-running-nos}, and the basic technique is indeed pretty similar. However, tidying-up loose ends, making sure the page number gets reset to the correct value at the start of each chapter, and so on, is slightly more challenging. This is why the \Package{chappg} package was written: it does the obvious things, and more. Users have been known to ask for running page numbers within a section, but this really doesn't make sense: you need to run page numbers within document objects that always start on a fresh page. \begin{ctanrefs} \item[chappg.sty]\CTANref{chappg} \end{ctanrefs} \subsection{Page layout} \Question[Q-papersize]{The size of printed output} The final product of a \AllTeX{} run is something for a person to read. Often, nowadays, that product will be read ``on-screen'', but the printed page remains a principal output form. When we come to print our output, it is important that the output fits on the paper; in some cases, for the output to ``fit'' is good enough. However, there are circumstances where the actual size of the printed output, on the page, is crucial to the acceptance of the output. (This might happen when the output is a book to be published, or when it's a dissertation which must match the fancies of some bureaucrat even to be considered.) Sadly, we often find that the printed output doesn't conform to our expectations\dots{} The check-list for such problems has two entries: \begin{itemize} \item Your output is generated via Adobe \ProgName{Reader} (or possibly ``\ProgName{Acrobat Reader}''~--- older versions of the program had the qualified name). In this case, it may be that \ProgName{Reader} is willfully changing the size of your output: read \Qref*{\ProgName{Reader} antics}{Q-acroantics}. \item Something in your \TeX{} system is producing the wrong size (or shape) of output: read \Qref*{paper geometry}{Q-papergeom}. \end{itemize} An alternative approach is to use the (excellent) \Package{testflow} suite, that provides a detailed outline of the potential problems together with a sample document and prototype outputs. \begin{ctanrefs} \item[\nothtml{\rmfamily}testflow bundle]\CTANref{testflow} \end{ctanrefs} \Question[Q-acroantics]{Adobe \ProgName{Reader} messing with print size} \AliasQuestion{Q-outszwrng} Printing from Adobe \ProgName{Reader} shrinks the page ``to fit'' (\emph{by default}). Unfortunately, its calculation doesn't consider the existing margins of the document, so that it shrinks what it believes is your whole page onto what it believes is its output page. The effect typically looks as if your margins have expanded. Solve this problem by adjusting the \ProgName{Reader}'s default in the print dialogue; unfortunately, this dialogue varies from one version to the next: \begin{itemize} \item \ProgName{Reader} version 7:\\ Page Scaling (default: ``Fit to printer margins'')~--- change to ``None'', and\\ Scale (default 95\textpercent{} of Normal size)~--- change to ``100\textpercent{}''. \item Adobe Reader 6:\\ in the print dialogue, on the ``copies \& pages'' pane, you'll find a popup menu/drop-down list titled ``Page Scaling''~--- change to ``None''. \item Windows, Linux Acrobat (Reader) 5.0:\\ In the print dialog, make sure the ``Shrink oversized pages to fit'' checkbox is unchecked. It may also be useful to uncheck the ``Expand small pages to fit paper size'' checkbox as well. \end{itemize} \Question[Q-papergeom]{Getting the right paper geometry from \AllTeX{}} If your output is the wrong size, and you've checked that it's not due to the \Qref*{ministrations of Adobe \ProgName{Reader}}{Q-acroantics}, the problem is probably that your \AllTeX{} system is producing output that specifies the wrong paper size. Paper sizes can be a pain: they're a forgotten backwater~--- Knuth seems not to have considered paper size as something the \TeX{} engine needs to know about. As a result, there is no \acro{DVI} command to specify the paper on which the document should be printed, which has led a dichotomy where macros shape the text according to the needs of the author's chosen paper size, and device drivers' choice happens independently of the macros' ideas. In practice, one usually finds that macro packages (such as \plaintex{} and \LaTeX{}) assume American ``letter'' paper size, by default; and since most distributions nowadays originate in Europe, the drivers usually default to \acro{ISO} ``A4'' paper size. This is (of course) pretty unsatisfactory. Users may select a different paper size for their document (current \LaTeX{} offers a range of sizes as options in the standard classes), pretty easily. Nevertheless, the user also has to be sure that each time \ProgName{xdvi}, \ProgName{dvips} (or whatever) runs, it uses the paper size the document was designed for. The default paper size for \acro{DVI} drivers may be changed by a distribution management command (\ProgName{texconfig} for \texlive{}, the \ProgName{Options} application for \miktex{}), but this still doesn't provide for people using the ``wrong'' sort of paper for some reason. A different issue arises for users of \PDFTeX{}~--- the \acro{PDF} format \emph{does} have the means of expressing paper size and \PDFTeX{} has system variables \csx{pdfpagewidth} and \csx{pdfpageheight}, that are written into the output \acro{PDF} file. Unfortunately, most of the core software predates \PDFTeX{}, so not even \PDFLaTeX{} sets the correct values into those variables, to match the paper size specified in a \csx{documentclass} option. The \acro{DVI} drivers \ProgName{dvips}, \ProgName{dvipdfm} and its extensions (\ProgName{dvipdfmx} and \ProgName{xdvipdfmx}) define \csx{special} commands for the document to specify its own paper size; so in those cases, as when \PDFTeX{} is being used, the paper size can be programmed by the document. Users who wish to, may of course consult the manuals of the various programs to write the necessary code. The \Package{geometry} and \Package{zwpagelayout} packages (whose main business includes defining typeset page areas), also takes notice the size of the paper that the document is going to be printed on, and can issue the commands necessary to ensure the correct size of paper is used. If \Package{geometry} is used when a document is being processed by \PDFLaTeX{}, it can set the necessary dimensions ``in the output''. If the document is being processed by \LaTeX{} on a \TeX{} or \eTeX{} engine, there are package options which instruct \Package{geometry} which \csx{special} commands to use. (Note that the options are ignored if you are using \PDFLaTeX{}.) So, one resolution of the problem, when you are using \latex{}, is to add \begin{quote} \begin{verbatim} \usepackage[processor-option,...]{geometry} \end{verbatim} \end{quote} Where \pkgoption{processor-option} tells the package what will produce your (\PS{} or \acro{PDF} output~--- \Package{geometry} knows about \pkgoption{dvips} and \pkgoption{dvipdfm} (\pkgoption{dvipdfm} also serves for the extension \ProgName{dvipdfmx} and \ProgName{xdvipdfmx}). If you're using \PDFLaTeX{} or \xetex{}, load with \begin{quote} \begin{verbatim} \usepackage[program-option,...]{geometry} \end{verbatim} \end{quote} where \pkgoption{program-option} is \pkgoption{pdftex}, \pkgoption{xetex}. The alternative, \Package{zwpagelayout} requires a \pkgoption{driver} option: \begin{quote} \begin{verbatim} \usepackage[driver=value,...]{zwpagelayout} \end{verbatim} \end{quote} (permissible \meta{values} are \pkgoption{pdftex}, \pkgoption{xetex} and \pkgoption{dvips}; the default value is \pkgoption{unknown}). Needless to say, both the ``big'' classes (\Class{koma-script} and \Class{memoir}) provide their own ways to get the paper size ``right''. The \Package{typearea} package is the \Class{Koma-script} distribution's way of providing page layout functionality. Load it with the \pkgoption{pagesize} option and it will ensure the correct paper is selected, for \acro{PDF} output from \PDFLaTeX{}, and for \PS{} output from \LaTeX{} via \ProgName{dvips}. \Class{Memoir} has the standard classes' paper-size selections (\pkgoption{a4paper}, \pkgoption{letterpaper} and so on), but also permits the user to choose an arbitrary paper size, by setting the length registers \csx{stockheight} and \csx{stockwidth}. The commands \csx{fixdvipslayout} (for \LaTeX{} processing), and \csx{fixpdflayout} (for \PDFLaTeX{} processing) then instruct the processor to produce output that specifies the necessary paper size. \begin{ctanrefs} \item[geometry.sty]\CTANref{geometry} \item[memoir.cls]\CTANref{memoir} \item[typearea.sty]Distributed as part of \CTANref{koma-script}[typearea] \item[zwpagelayout.sty]\CTANref{zwpagelayout} \end{ctanrefs} \LastEdit{2011-12-12} \Question[Q-changemargin]{Changing the margins in \LaTeX{}} Changing the layout of a document's text on the page involves several subtleties not often realised by the beginner. There are interactions between fundamental \TeX{} constraints, constraints related to the design of \LaTeX{}, and good typesetting and design practice, that mean that any change must be very carefully considered, both to ensure that it ``works'' and to ensure that the result is pleasing to the eye. \LaTeX{}'s defaults sometimes seem excessively conservative, but there are sound reasons behind how Lamport designed the layouts themselves, whatever one may feel about his overall design. For example, the common request for ``one-inch margins all round on A4 paper'' is fine for 10- or 12-pitch typewriters, but not for 10pt (or even 11pt or 12pt) type because readers find such wide, dense, lines difficult to read. There should ideally be no more than 75 characters per line (though the constraints change for two-column text). So Lamport's warning to beginners in his section on `Customizing the Style'~--- ``don't do it''~--- should not lightly be ignored. This set of \acro{FAQ}s recommends that you use a package to establish consistent settings of the parameters: the interrelationships are taken care of in the established packages, without you \emph{needing} to think about them, but remember~--- the packages only provide consistent, working, mechanisms: they don't analyse the quality of what you propose to do. The following answers deal with the ways one may choose to proceed: \begin{itemize} \item \Qref*{Choose which package to use}{Q-marginpkgs}. \item \Qref*{Find advice on setting up page layout by hand}{Q-marginmanual}. \end{itemize} There is a related question~--- how to change the layout temporarily~--- and there's an answer that covers that, too: \begin{itemize} \item \Qref*{Change the margins on the fly}{Q-chngmargonfly}. \end{itemize} \Question[Q-marginpkgs]{Packages to set up page designs} There are two trustworthy tools for adjusting the dimensions and position of the printed material on the page are \Package{geometry} and the \Package{zwpagelayout} packages; a very wide range of adjustments of the layout may be relatively straightforwardly programmed with either, and package documentation is good and comprehensive. As is usual, users of the \Class{memoir} class have built-in facilities for this task, and users of the \Class{KOMA-script} classes are recommended to use an alternative package, \Package{typearea}. In either case it is difficult to argue that users should go for \Package{geometry}: both alternatives are good. The documentation both of \Package{geometry} and of \Package{zwpagelayout} is rather overwhelming, and learning all of of either package's capabilities is likely to be more than you ever need. The \Package{vmargin} package is somewhat simpler to use: it has a canned set of paper sizes (a superset of that provided in \LaTeXe{}), provision for custom paper, margin adjustments and provision for two-sided printing. \begin{ctanrefs} \item[geometry.sty]\CTANref{geometry} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[layout.sty]Distributed as part of \CTANref{2etools}[layout] \item[memoir.cls]\CTANref{memoir} \item[typearea.sty]Distributed as part of \CTANref{koma-script}[typearea] \item[vmargin.sty]\CTANref{vmargin} \item[zwpagelayout.sty]\CTANref{zwpagelayout} \end{ctanrefs} \LastEdit{2011-12-12} \Question[Q-marginmanual]{How to set up page layout ``by hand''} So you're eager to do it yourself, notwithstanding the cautions \begin{flatversion} outlined above (\Qref{}{Q-changemargin}). \end{flatversion} \begin{hyperversion} outlined in ``\Qref{changing margins}{Q-changemargin}''. \end{hyperversion} It's important that you first start by familiarising yourself with LaTeX's page layout parameters. For example, see section C.5.3 of the \LaTeX{} manual (pp.~181-182), or corresponding sections in many of the other good \LaTeX{} manuals (see \Qref[question]{\LaTeX{} books}{Q-latex-books}). \LaTeX{} controls the page layout with a number of parameters, which allow you to change the distance from the edges of a page to the left and top edges of your typeset text, the width and height of the text, and the placement of other text on the page. However, they are somewhat complex, and it is easy to get their interrelationships wrong when redefining the page layout. The layout package defines a \csx{layout} command which draws a diagram of your existing page layout, with the dimensions (but not their interrelationships) shown. Even changing the text height and width, \csx{textheight} and \csx{textwidth}, requires more care than you might expect: the height should be set to fit a whole number of text lines (in terms of multiples of \csx{baselinskip}), and the width should be constrained by the number of characters per line, as mentioned in % ! line break ``\Qref*{changing margins}{Q-changemargin}''. Margins are controlled by two parameters: \csx{oddsidemargin} and \csx{evensidemargin}, whose names come from the convention that odd-numbered pages appear on the right-hand side (`recto') of a two-page spread and even-numbered pages on the left-hand side (`verso'). Both parameters actually refer to the left-hand margin of the relevant pages; in each case the right-hand margin is specified by implication, from the value of \csx{textwidth} and the width of the paper. (In a one-sided document, which is the default in many classes, including the standard \Class{article} and \Class{report} classes, \csx{oddsidemargin} stands for both.) The ``origin'' (the zero position) on the page is one inch from the top of the paper and one inch from the left side; positive horizontal measurements extend right across the page, and positive vertical measurements extend down the page. Thus, the parameters \csx{evensidemargin}, \csx{oddsidemargin} and \csx{topmargin}, should be set to be 1~inch less than the true margin; for margins closer to the left and top edges of the page than 1~inch, the margin parameters must be set to negative values. \Question[Q-chngmargonfly]{Changing margins ``on the fly''} One of the surprises characteristic of \TeX{} use is that you cannot change the width or height of the text within the document, simply by modifying the text size parameters; \TeX{} can't change the text width on the fly, and \LaTeX{} only ever looks at text height when starting a new page. So the simple rule is that the parameters should only be changed in the preamble of the document, i.e., before the \cmdinvoke{begin}{document} statement (so before any typesetting has happened. To adjust text width within a document we define an environment: \begin{quote} \begin{verbatim} \newenvironment{changemargin}[2]{% \begin{list}{}{% \setlength{\topsep}{0pt}% \setlength{\leftmargin}{#1}% \setlength{\rightmargin}{#2}% \setlength{\listparindent}{\parindent}% \setlength{\itemindent}{\parindent}% \setlength{\parsep}{\parskip}% }% \item[]}{\end{list}} \end{verbatim} \end{quote} The environment takes two arguments, and will indent the left and right margins, respectively, by the parameters' values. Negative values will cause the margins to be narrowed, so \cmdinvoke{begin}{changemargin}{-1cm}{-1cm} narrows the left and right margins by 1 centimetre. Given that \TeX{} can't do this, how does it work?~--- well, the environment (which is a close relation of the \LaTeX{} \environment{quote} environment) \emph{doesn't} change the text width as far as \TeX{} is concerned: it merely moves text around inside the width that \TeX{} believes in. The \Package{changepage} package provides ready-built commands to do the above; it includes provision for changing the shifts applied to your text according to whether you're on an odd (\emph{recto}) or an even (\emph{verso}) page of a two-sided document. \Package{Changepage}'s structure matches that of the \Class{memoir} class. The (earlier) package \Package{chngpage} provides the same facilities, but it uses rather different syntax. \Package{Changepage}'s structure matches that of the \Class{memoir} class, and it should be used for any new work. Changing the vertical dimensions of a page is more clumsy still: the \LaTeX{} command \csx{enlargethispage} adjusts the size of the current page by the size of its argument. Common uses are \begin{quote} \begin{verbatim} \enlargethispage{\baselineskip} \end{verbatim} \end{quote} to make the page one line longer, or \begin{quote} \begin{verbatim} \enlargethispage{-\baselineskip} \end{verbatim} \end{quote} to make the page one line shorter. The process is (to an extent) simplified by the \Package{addlines} package: its \csx{addlines} command takes as argument the \emph{number} of lines to add to the page (rather than a length): the package documentation also provides a useful analysis of when the command may (or may not) be expected to work. \begin{ctanrefs} \item[addlines.sty]\CTANref{addlines} \item[changepage.sty]\CTANref{changepage} \end{ctanrefs} \LastEdit{2011-06-01} \Question[Q-nopageno]{How to get rid of page numbers} \AliasQuestion{ps@empty} Very occasionally, one wants a document with no page numbers. For such occasions, the package \Package{nopageno} will make \cmdinvoke{pagestyle}{plain} have the same effect as \cmdinvoke{pagestyle}{empty}; in simple documents, this will suppress all page numbering (it will not work, of course, if the document uses some other pagestyle than \environment{plain}). To suppress page numbers from a sequence of pages, you may use \cmdinvoke{pagestyle}{empty} at the start of the sequence, and restore the original page style at the end. Unfortunately, you still have to deal with the page numbers on pages containing a \csx{maketitle}, \csx{part} or \csx{chapter} command, since the standard classes; deal with those separately, as described below. To suppress page numbers on a single page, use \cmdinvoke{thispagestyle}{empty} somewhere within the text of the page. Note that, in the standard classes, \csx{maketitle} and \csx{chapter} use \csx{thispagestyle} internally, so your call must be \emph{after} those commands. Unfortunately, \csx{thispagestyle} doesn't work for \Class{book} or \Class{report} \csx{part} commands: they set the page style (as do \csx{chapter} commands), but then they advance to the next page so that you have no opportunity to change the style using \csx{thispagestyle}. The present author has proposed solving the problem with the following ``grubby little patch'', on \Newsgroup{comp.text.tex}: \begin{quote} \begin{verbatim} \makeatletter \let\sv@endpart\@endpart \def\@endpart{\thispagestyle{empty}\sv@endpart} \makeatother \end{verbatim} \end{quote} Fortunately, that patch has now been incorporated in a small package \Package{nonumonpart} (a difficult name\dots) Both the \Class{KOMA-script} classes and \Class{memoir} have separate page styles for the styles of various ``special'' pages, so, in a \Class{KOMA} class document one might say: \begin{quote} \begin{verbatim} \renewcommand*{\titlepagestyle}{empty} \end{verbatim} \end{quote} while \Class{memoir} will do the job with \begin{quote} \cmdinvoke{aliaspagestyle}{title}{empty} \end{quote} An alternative (in all classes) is to use the rather delightful \cmdinvoke{pagenumbering}{gobble}; this has the simple effect that any attempt to print a page number produces nothing, so there's no issue about preventing any part of \LaTeX{} from printing the number. However, the \csx{pagenumbering} command does have the side effect that it resets the page number (to 1), so it is unlikely to be helpful other than at the beginning of a document. The \Package{scrpage2} package separates out the representation of the page number (it typesets the number using the \csx{pagemark} command) from the construction of the page header and footer; so one can say \begin{quote} \begin{verbatim} \renewcommand*{\pagemark}{} \end{verbatim} \end{quote} which will also suppress the printing of the page number. Neither of these ``suppress the page number'' techniques touches the page style in use; in practice this means they don't make sense unless you are using \cmdinvoke{pagestyle}{plain} \begin{ctanrefs} \item[fancyhdr.sty]\CTANref{fancyhdr} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[nonumonpart.sty]\CTANref{nonumonpart} \item[nopageno.sty]\CTANref{nopageno} \item[scrpage2.sty]Distributed as part of \CTANref{koma-script} \end{ctanrefs} \LastEdit{2011-04-16} \Question[Q-crop]{How to create crop marks} If you're printing something that's eventually to be reproduced in significant quantities, and bound, it's conventional to print on paper larger than your target product, and to place ``crop marks'' outside the printed area. These crop marks are available to the production house, for lining up reproduction and trimming machines. You can save yourself the (considerable) trouble of programming these marks for yourself by using the package \Package{crop}, which has facilities to satisfy any conceivable production house. Users of the \Class{memoir} class don't need the package, since \Class{memoir} has its own facilities for programming crop marks. \begin{ctanrefs} \item[crop.sty]\CTANref{crop} \item[memoir.cls]\CTANref{memoir} \end{ctanrefs} \Question[Q-watermark]{`Watermarks' on every page} It's often useful to place some text (such as `DRAFT') in the background of every page of a document. For \LaTeX{} users, the simplest way to do this uses the \Package{draftcopy} package. This can deal with many types of \acro{DVI} processors (in the same way that the graphics package does) and knows translations for the word `DRAFT' into a wide range of languages (though you can choose your own word, too). Unfortunately, however, the package relies on \PS{} specials, and will therefore fail if you are viewing your document with \ProgName{xdvi}, and won't even compile if you're using \PDFLaTeX{}. (\PDFLaTeX{} users need one of the other solutions below.) The \Package{wallpaper} package builds on \Package{eso-pic} (see below). Apart from the single-image backdrops described above (``wallpapers'', of course, to this package), the package provides facilities for tiling images. All its commands come in pairs: one for ``general'' use, and one applying to the current page only. The \Package{draftwatermark} package uses the same author's \Package{everypage} package to provide a simple interface for adding textual (`DRAFT'-like) watermarks. The \Package{xwatermark} package provides very flexible watermarking, with a ``modern'' (key-value) interface. More elaborate watermarks may be achieved using the \Package{eso-pic} package, or by using \Package{everypage} (see below). \Package{Eso-pic} attaches a \environment{picture} environment to every page as it is shipped out; the user can put things into that environment: the package provides commands for placing things at certain useful points (like ``text upper left'' or ``text centre'') in the picture, but the user is at liberty to do what he or she likes. \Package{Eso-pic} is, in turn, built upon the package \Package{atbegshi}. That package has the capability to produce watermarks \emph{on top of} the other material on the page; this doesn't sound very ``watermark-like'', but can be useful on pages where the watermark would otherwise be hidden by graphics or the like. The \Package{atbegshi} command that \Package{eso-pic} uses is \csx{AtBeginShipoutUpperLeft}; \csx{AtBeginShipoutUpperLeftForeground} is what's needed instead to place the material on top of the rest of the content of the page. \Package{Everypage} allows you to add ``something'' to every page, or to a particular page; you therefore need to construct your own apparatus for anything complicated. Finally, one can use the \ProgName{pdftk} untility; with it, the command: \begin{quote} \begin{verbatim} pdftk a.pdf background b.pdf output c.pdf \end{verbatim} \end{quote} will recreate \File{a.pdf} as \File{c.pdf}, having used the first page of \File{b.pdf} as background on every page. If you have a standard background (``DRAFT'' or ``SECRET'', or whatever) used in several files, \ProgName{pdftk} might well be attractive. \ProgName{Pdftk} is available as a command line tool; it is available in most linux distritbutions, but may be downloaded from its % ! line break \href{http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/}{home site} \begin{ctanrefs} \item[atbegshi.sty]Distributed as part of \CTANref{oberdiek}[atbegshi] \item[draftcopy.sty]\CTANref{draftcopy} \item[draftwatermark.sty]\CTANref{draftwatermark} \item[eso-pic.sty]\CTANref{eso-pic} \item[everypage.sty]\CTANref{everypage} \item[everyshi.sty]Distributed as part of \CTANref{ms}[everyshi] \item[wallpaper.sty]\CTANref{wallpaper} \end{ctanrefs} \Question[Q-landscape]{Typesetting things in landscape orientation} It's often necessary to typeset part of a document in landscape orientation; to achieve this, one needs not only to change the page dimensions, but also to instruct the output device to print the strange page differently. There are two ``ordinary'' mechanisms for doing two slight variations of landscape typesetting: \begin{itemize} \item If you have a single floating object that is wider than it is deep, and will only fit on the page in landscape orientation, use the \Package{rotating} package; this defines \environment{sidewaysfigure} and \environment{sidewaystable} environments which create floats that occupy a whole page. Note that \Package{rotating} has problems in a document that also loads the \Package{float} package, which recommended in other answers in these \acro{FAQ}s, for example that on \Qref*{float placement}{Q-floats}. The \Package{rotfloat} package loads \Package{rotating} for you, and smooths the interaction with \Package{float}. \item If you have a long sequence of things that need to be typeset in landscape (perhaps a code listing, a wide \environment{tabbing} environment, or a huge table typeset using \Package{longtable} or \Package{supertabular}), use the \Package{lscape} package (or \Package{pdflscape} if you're generating \acro{PDF} output, whether using \PDFLaTeX{} or \ProgName{dvips} and generating \acro{PDF} from that). Both packages define an environment \environment{landscape}, which clears the current page and restarts typesetting in landscape orientation (and clears the page at the end of the environment before returning to portrait orientation). \end{itemize} No currently available package makes direct provision for typesetting in both portrait and landscape orientation on the same page (it's not the sort of thing that \TeX{} is well set-up to do). If such behaviour was an absolute necessity, one might use the techniques described in % beware line-wrap \Qref[question]{"flowing text around figures"}{Q-textflow}, and would rotate the landscape portion using the rotation facilities of the \Package{graphics} package. (Returning from landscape to portrait orientation would be somewhat easier: the portrait part of the page would be a bottom float at the end of the landscape section, with its content rotated.) To set an entire document in landscape orientation, one might use \Package{lscape} around the whole document. A better option is the \pkgoption{landscape} option of the \Package{geometry} package; if you also give it \pkgoption{dvips} or \pkgoption{pdftex} option, \Package{geometry} also emits the rotation instructions to cause the output to be properly oriented. The \Class{memoir} class has the same facilities, in this respect, as does \Package{geometry}. A word of warning: most current \TeX{} previewers do not honour rotation requests in \acro{DVI} files. %% (the exception is %% (the exceptions are the %% \begin{htmlversion} %% (\Qref{commercial}{Q-commercial}) \YandY{} previewer %% \ProgName{dviwindo}, %% \end{htmlversion} %% \htmlignore %% (commercial) \YandY{} previewer \ProgName{dviwindo} %% (\Qref{}{Q-commercial}), %% \endhtmlignore %% and %% the fp\TeX{} previewer Win\acro{DVI}). If your previewer is not %% capable of rotation, Your best bet is to convert your output to \PS{} or to \acro{PDF}, and to view these `final' forms with an appropriate viewer. \begin{ctanrefs} \item[geometry.sty]\CTANref{geometry} \item[graphics.sty]Distributed as part of \CTANref{graphics} \item[longtable.sty]Distributed as part of \CTANref{2etools}[longtable] \item[lscape.sty]Distributed as part of \CTANref{graphics}[lscape] \item[memoir.cls]\CTANref{memoir} \item[pdflscape.sty]Distributed with Heiko Oberdiek's packages \CTANref{oberdiek}[pdflscape] \item[rotating.sty]\CTANref{rotating} \item[rotfloat.sty]\CTANref{rotfloat} \item[supertabular.sty]\CTANref{supertabular} \end{ctanrefs} \Question[Q-abspos]{Putting things at fixed positions on the page} \TeX{}'s model of the world is (broadly speaking) that the author writes text, and \TeX{} and its macros decide how it all fits on the page. This is not good news for the author who has, from whatever source, a requirement that certain things go in exactly the right place on the page. There \emph{are} places on the page, from which things may be hung, and two \LaTeX{} packages allow you position things relative to such points, thus providing a means of absolute positioning. The \Package{textpos} package aids the construction of pages from ``blobs'', dotted around over the page (as in a poster); you give it the location, and it places your typeset box accordingly. The \Package{eso-pic} defines a ``shipout picture'' that covers the page. The user may add \environment{picture}-mode commands to this picture, which of course can include box placements as well as the other rather stilted commands of \environment{picture}-mode. (\Package{Eso-pic} requires the services of \Package{everyshi}, which must therefore also be available.) % % Fortunately, in the \LaTeX{} world at least, there \emph{is} a fixed % point on every page, to whit the page header. The package % \Package{textpos} latches bits of typesetting to locations you % specify, by fixing them to the page header, and thereby solves the % problem. \begin{ctanrefs} \item[eso-pic.sty]\CTANref{eso-pic} \item[everyshi.sty]Distributed as part of \CTANref{ms}[everyshi] \item[textpos.sty]\CTANref{textpos} \end{ctanrefs} \Question[Q-nopagebrk]{Preventing page breaks between lines} One commonly requires that a block of typeset material be kept on the same page; it turns out to be surprisingly tricky to arrange this. \LaTeX{} provides a \environment{samepage} environment which claims it does this sort of thing for you. It proceeds by setting infinite penalties for all sorts of page-break situations; but in many situations where you want to prevent a page break, \environment{samepage} doesn't help. If you're trying to keep running text together, you need to end the paragraph inside the environment (see \Qref[question]{preserving paragraph parameters}{Q-paraparam}). Also, if the things you are trying to keep together insert their own pagebreak hints, \environment{samepage} has no power over them (though list items' attempts~--- they suggest page breaks between items~--- are subverted by \environment{samepage}). Naturally, if \environment{samepage} \emph{does} work, it is capable of leaving stuff jutting out at the bottom of the page. Another convenient trick is to set all the relevant stuff in a \csx{parbox} (or a \environment{minipage} if it contains things like verbatim text that may not be used in the argument of a \csx{parbox}). The resulting box certainly \emph{won't} break between pages, but that's not to say that it will actually do what you want it to do: again, the box may be left jutting out at the bottom of the page. Why do neither of these obvious things work?~--- Because \TeX{} can't really distinguish between infinitely awful things. \environment{Samepage} will make any possible break point ``infinitely bad'' and boxes don't even offer the option of breaks, but if the alternative is the leave an infinitely bad few centimetres of blank paper at the bottom of the page, \TeX{} will take the line of least resistance and do nothing. This problem still arises even if you have \csx{raggedbottom} in effect: \TeX{} doesn't notice the value of \emph{that} until it starts actually shipping a page out. One approach is to set: \begin{quote} \begin{verbatim} \raggedbottom \addtolength{\topskip}{0pt plus 10pt} \end{verbatim} \end{quote} The \texttt{10pt} offers a hint to the output routine that the column is stretchable; this will cause \TeX{} to be more tolerant of the need to stretch while building the page. If you're doing this as a temporary measure, cancel the change to \csx{topskip} by: \begin{quote} \begin{verbatim} \addtolength{\topskip}{0pt plus-10pt} \end{verbatim} \end{quote} as well as resetting \csx{flushbottom}. (Note that the \texttt{10pt} never actually shows up, because it is overwhelmed when the page is shipped out by the stretchability introduced by \csx{raggedbottom}; however, it could well have an effect if \csx{flushbottom} was in effect.) An alternative (which derives from a suggestion by Knuth in the \TeX{}book) is the package \Package{needspace} or the \Class{memoir} class, which both define a command \csx{needspace} whose argument tells it what space is needed. If the space isn't available, the current page is cleared, and the matter that needs to be kept together will be inserted on the new page. For example, if 4~lines of text need to be kept together, the sequence \begin{quote} \begin{verbatim} \par \needspace{4\baselineskip} % the stuff that must stay together % now stuff we don't mind about \end{verbatim} \end{quote} Yet another trick by Knuth is useful if you have a sequence of small blocks of text that need, individually, to be kept on their own page. Insert the command \csx{filbreak} before each small block, and the effect is achieved. The technique can be used in the case of sequences of \LaTeX{}-style sections, by incorporating \csx{filbreak} into the definition of a command (as in % beware line break \Qref[question]{patching commands}{Q-patch}). A simple and effective patch would be: \begin{quote} \begin{verbatim} \let\oldsubsubsection=\subsubsection \renewcommand{\subsubsection}{% \filbreak \oldsubsubsection } \end{verbatim} \end{quote} While the trick works for consecutive sequences of blocks, it's slightly tricky to get out of such sequences unless the sequence is interrupted by a forced page break (such as \csx{clearpage}, which may be introduced by a \csx{chapter} command, or the end of the document). If the sequence is not interrupted, the last block is likely to be forced onto a new page, regardless of whether it actually needs it. If one is willing to accept that not everything can be accomplished totally automatically, the way to go is to typeset the document and to check for things that have the potential to give trouble. In such a scenario (which has Knuth's authority behind it, if one is to believe the rather few words he says on the subject in the \TeX{}book) one can decide, case by case, how to deal with problems at the last proof-reading stage. At this stage, you can manually alter page breaking, using either \csx{pagebreak} or \csx{clearpage}, or you can place a \csx{nopagebreak} command to suppress unfortunate breaks. Otherwise, you can make small adjustments to the page geometry, using \csx{enlargethispage}. Supposing you have a line or two that stray: issue the command \cmdinvoke{enlargethispage}{2\csx{baselineskip}} and two lines are added to the page you're typesetting. Whether this looks impossibly awful or entirely acceptable depends on the document context, but the command remains a useful item in the armoury. Note that both \csx{pagebreak} and \csx{nopagebreak} take an optional number argument to adjust how the command is to be interpreted. Thus \cmdinvoke{pagebreak}[0], the command `suggests' that a page break might be worth doing, whereas \cmdinvoke{pagebreak}[4] `demands' a page break. Similarly \cmdinvoke{nopagebreak}[0] makes a suggestion, while \cmdinvoke{nopagebreak}[4] is a demand. In both commands, the default value of the optional argument is 4. \begin{ctanrefs} \item[memoir.cls]\CTANref{memoir} \item[needspace.sty]\CTANref{needspace} \end{ctanrefs} \Question[Q-parallel]{Parallel setting of text} It's commonly necessary to present text in two languages `together' on a page, or on a two-page spread. For this to be satisfactory, one usually needs some sort of alignment between the two texts. The \Package{parallel} package satisfies the need, permitting typesetting in two columns (not necessarily of the same width) on one page, or on the two opposing pages of a two-page spread. Use can be as simple as \begin{quote} \begin{verbatim} \usepackage{parallel} ... \begin{Parallel}{}{]{3} \colchunk{} \colchunk{} \colchunk{} \colplacechunks ... \end{parcolumns} \end{verbatim} \end{quote} The \meta{options} can specify the widths of the columns, whether to place rules between the columns, whether to set the columns sloppy, etc. Again, there are issues with colours, which are addressed by the \Package{pdfcolparcolumns} package. The \Package{ledpar} package is distributed with (and integrated with) the \Qref{\Package{ledmac} package}{Q-linenos}. It provides parallel setting carefully integrated with the needs of a scholarly text, permitting translation, or notes, or both, to be set in parallel with the `base' text of the document. \begin{ctanrefs} \item[ledpar.sty]Distributed with \CTANref{ledmac} \item[parallel.sty]\CTANref{parallel} \item[parcolumns.sty]Distributed as part of \CTANref{sauerj}[parcolumns] \item[pdfcolparallel.sty]Distributed as part of \CTANref{oberdiek}[pdfcolparallel] \item[pdfcolparcolumns.sty]pdfcolparcolumns] \end{ctanrefs} \Question[Q-epigraph]{Typesetting epigraphs} Epigraphs are those neat quotations that authors put at the start of chapters (or even at the end of chapters: Knuth puts things at the ends of chapters of the \TeX{}book). Typesetting them is a bit of a fiddle, but not impossible to do for yourself. Fortunately, there are two packages that do the job, to some extent; there are also facilities in the two ``big'' classes (\Class{memoir} and \Class{koma-script}. The \Package{epigraph} package defines an \csx{epigraph} command, for creating a single epigraph (as at the top of a chapter): \begin{quote} \begin{verbatim} \chapter{The Social Life of Rabbits} \epigraph{Oh! My ears and whiskers!}% {Lewis Carroll} \end{verbatim} \end{quote} and an epigraphs environment, for entering more than one epigraph consecutively, in a sort of list introduced by \csx{qitem} commands: \begin{quote} \begin{verbatim} \begin{epigraphs} \qitem{What I tell you three times is true}% {Lewis Carroll} \qitem{Oh listen do, I'm telling you!}% {A.A. Milne} \end{epigraphs} \end{verbatim} \end{quote} The \csx{epigraphhead} command enables you to place your epigraph \emph{above} a chapter header: \begin{quote} \begin{verbatim} \setlength{\unitlength}{1pt} ... \chapter{The Social Life of Rabbits} \epigraphhead[]{% \epigraph{Oh! My ears and whiskers!}% {Lewis Carroll}% } \end{verbatim} \end{quote} The \meta{distance} says how far above the chapter heading the epigraph is to go; it's expressed in terms of the \csx{unitlength} that's used in the \environment{picture} environment; the package's author recommends \texttt{70pt}. The package also offers various tricks for adjusting the layout of chapter header (necessary if you've found a hugely long quotation for an \csx{epigraphhead}), for patching the bibliography, for patching \csx{part} pages, and so on. (Some of these suggested patches lead you through writing your own package\dots{}) The \Package{quotchap} package redefines chapter headings (in a moderately striking way), and provides an environment \environment{savequotes} in which you can provide one (or more) quotations to use as epigraphs. The facilities seem not as flexible as those of \Package{epigraph}, but it's probably easier to use. The \Class{memoir} class offers all the facilities of the \Package{epigraph} package. The \Class{Koma-script} classes have commands \csx{setchapterpreamble} and \csx{dictum} to provide these facilities. \begin{ctanrefs} \item[epigraph.sty]\CTANref{epigraph} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[quotchap.sty]\CTANref{quotchap} \end{ctanrefs} % \Question[Q-outszwrng]{\AllTeX{} \acro{PDF} output prints at wrong size} % Having got everything \emph{else} right, you should be aware that the % problem may have nothing to do with \AllTeX{} and everything to do % with the program you use for printing. A regular cause for such % problems lies with Acrobat Reader, which by default enables its option % to scale pages to fit on the printable area of the paper. Since a % printer can rarely print right to the edge, this means that pdf-files % will be shrunk by some (small) factor (even if the pdf-file is % formatted for A4, and your paper size is set to A4 as well). % Correcting this silliness is not very hard, but the exact details % depend on the version of Acrobat Reader (or "Adobe Reader" from % version 6.0 onwards) you have installed: % \begin{itemize} % \item Mac OS X, Adobe Reader 6:\\ % in the print dialogue, on the ``copies \& pages'' pane, you'll find a % popup menu titled ``Page Scaling''. Make sure that the menu reads % ``None''. % \item Windows, Adobe Reader 6:\\ % in the print dialogue, select ``None'' from the drop-down list % ``Page Scaling''. % \item Windows, Linux Acrobat (Reader) 5.0:\\ % In the print dialog, make sure the ``Shrink oversized pages to fit'' % checkbox is unchecked. It may also be useful to uncheck the % ``Expand small pages to fit paper size'' checkbox as well. %\end{itemize} \subsection{Spacing of characters and lines} \Question[Q-linespace]{Double-spaced documents in \LaTeX{}} A quick and easy way of getting inter-line space for copy-editing is to change \csx{baselinestretch}~--- \cmdinvoke{linespread}{1.2} (or, equivalently \cmdinvoke{renewcommand}{\csx{baselinestretch}}{1.2}) may be adequate. Note that \csx{baselinestretch} changes don't take effect until you select a new font, so make the change in the preamble before any font is selected. Don't try changing \csx{baselineskip}: its value is reset at any size-changing command so that results will be inconsistent. For preference (and certainly for a production document, such as a dissertation or an article submission), use a line-spacing package. The only one currently supported is \Package{setspace}. \Package{Setspace} switches off double-spacing at places where even the most die-hard official would doubt its utility (footnotes, figure captions, and so on); it's very difficult to do this consistently if you're manipulating \csx{baselinestretch} yourself. (Note: do \emph{not} be tempted by \Package{doublespace}~--- its performance under current \LaTeX{} is at best problematical.) Of course, the real solution (other than for private copy editing) is \emph{not} to use double-spacing at all. Universities, in particular, have no excuse for specifying double-spacing in submitted dissertations: \LaTeX{} is a typesetting system, not a typewriter-substitute, and can (properly used) make single-spaced text even more easily readable than double-spaced typewritten text. If you have any influence on your university's system (for example, through your dissertation supervisor), it may be worth attempting to get the rules changed (at least to permit a ``well-designed book'' format). Double-spaced submissions are also commonly required when submitting papers to conferences or journals. Fortunately (judging by the questions from users in this author's department), this demand is becoming less common. Documentation of \Package{setspace} appears as \TeX{} comments in the package file itself. \begin{ctanrefs} \item[setspace.sty]\CTANref{setspace} \end{ctanrefs} \LastEdit{2013-10-28} \Question[Q-letterspace]{Changing the space between letters} A common technique in advertising copy (and other text whose actual content need not actually be \emph{read}) is to alter the space between the letters (otherwise known as the tracking). As a general rule, this is a very bad idea: it detracts from legibility, which is contrary to the principles of typesetting (any respectable font you might be using should already have optimum tracking built into it). The great type designer, Eric Gill, is credited with saying ``he who would letterspace lower-case text, would steal sheep''. (The attribution is probably apocryphal: others are also credited with the remark. Stealing sheep was, in the 19th century, a capital offence in Britain.) As the remark suggests, though, letterspacing of upper-case text is less awful a crime; the technique used also to be used for emphasis of text set in Fraktur (or similar) fonts. Straightforward macros (usable, in principle, with any \TeX{} macro package) may be found in \Package{letterspacing} (which is the name of the \extension{tex} file). %%% the package has a serious bug in it, so suppress mention pro tem %The \Package{tracking} package has similar facilities. A more comprehensive solution is to be found in the \Package{soul} package (which is optimised for use with \LaTeX{}, but also works with \plaintex{}). Soul also permits hyphenation of letterspaced text; Gill's view of such an activity is not (even apocryphally) recorded. (Spacing-out forms part of the name of \Package{soul}; the other half is described in \Qref[question]{another question}{Q-underline}.) Possibly the `ultimate' in this field is the \Package{microtype}, which uses the micro-typography capabilities of current \PDFTeX{} to provide a \csx{textls} command, which operates according to parameters declared in a \csx{SetTracking} command. \Package{Microtype}'s `tracking' facility expands the natural spacing of the font itself, rather than inserting space between characters. Ordinarily, letter-spacing will destroy ligatures; however, this is \emph{wrong} for some font styles (for example, \FontName{fraktur}), and the package provides a means of protecting the ligatures in a letter-spaced text. \begin{ctanrefs} \item[letterspacing.tex]\CTANref{letterspacing} \item[microtype.sty]\CTANref{microtype} \item[soul.sty]\CTANref{soul} %\item[tracking.sty]\CTANref{tracking} \end{ctanrefs} \Question[Q-ragright]{Setting text ragged right} The trick with typesetting ragged right is to be sure you've told the \TeX{} engine ``make this paragraph ragged, but never \emph{too} ragged''. The \LaTeX{} \csx{raggedright} command (and the corresponding \environment{flushleft} environment) has a tendency to miss the ``never'' part, and will often create ridiculously short lines, for some minor benefit later in the paragraph. The \plaintex{} version of the command doesn't suffer this failing, but is rather conservative: it is loath to create too large a gap at the end of the line, but in some circumstances~--- such as where \Qref*{hyphenation is suppressed}{Q-hyphoff}~--- painfully large gaps may sometimes be required. Martin Schr\"oder's \Package{ragged2e} package offers the best of both worlds: it provides raggedness which is built on the \plaintex{} model, but which is easily configurable. It defines easily-remembered command (e.g., \csx{RaggedRight}) and environment (e.g., \environment{FlushLeft}) names that are simply capitalised transformations of the \LaTeX{} kernel originals. The documentation discusses the issues and explains the significance of the various parameters of \Package{ragged2e}'s operation. \begin{ctanrefs} \item[ragged2e.sty]Distributed as part of \CTANref{ms}[ragged2e] \end{ctanrefs} \Question[Q-flushboth]{Cancelling \csx{ragged} commands} \LaTeX{} provides commands \csx{raggedright} and \csx{raggedleft}, but none to cancel their effect. The \csx{centering} command is implemented in the same way as the \csx{ragged*} commands, and suffers in the same way. The following code (to be inserted in a package of your own, or as \nothtml{internal \LaTeX{} code~---}% beware line break \Qref{internal \LaTeX{} code}{Q-atsigns}) defines a command that restores flush justification at both margins: \begin{verbatim} \def\flushboth{% \let\\\@normalcr \@rightskip\z@skip \rightskip\@rightskip \leftskip\z@skip \parindent 1.5em\relax} \end{verbatim} There's a problem with the setting of \csx{parindent} in the code: it's necessary because both the \csx{ragged} commands set \csx{parindent} to zero, but the setting isn't a constant of nature: documents using a standard \LaTeX{} class with \pkgoption{twocolumn} option will have \texttt{1.0em} by default, and there's no knowing what you (or some other class) will have done. Any but a really old copy of Martin Schr\"oder's \Package{ragged2e} package has a \csx{justifying} command to match its % ! line break \Qref*{versions of the \LaTeX{} `ragged' commands}{Q-ragright}. The package also provides a \environment{justify} environment, which permits areas of justified text in a larger area which is ragged. \begin{ctanrefs} \item[ragged2e.sty]Distributed as part of \CTANref{ms}[ragged2e] \end{ctanrefs} % this package hasn't materialised, for some reason i don't now % remember... %% Donald Arseneau's \Package{flushboth} package provides this code, and %% preserves a sensible value for \csx{parindent} (at begin document). %% This still doesn't protect it against any change you might make to %% \csx{parindent} within the body of your document. %% \begin{ctanrefs} %% \item[flushboth.sty]\CTANref{flushboth} %% \end{ctanrefs} \subsection{Typesetting specialities} \Question[Q-verbfile]{Including a file verbatim in \LaTeX{}} A good way is to use Rainer Sch\"opf's \Package{verbatim} package, which provides a command \csx{verbatiminput} that takes a file name as argument: \begin{quote} \begin{verbatim} \usepackage{verbatim} ... \verbatiminput{verb.txt} \end{verbatim} \end{quote} Another way is to use the \environment{alltt} environment, which requires the \Package{alltt} package. The environment interprets its contents `mostly' verbatim, but executes any \AllTeX{} commands it finds: \begin{quote} \begin{verbatim} \usepackage{alltt} ... \begin{alltt} \input{verb.txt} \end{alltt} \end{verbatim} \end{quote} of course, this is little use for inputting \AllTeX{} source code\dots{} The \Package{moreverb} package extends the \Package{verbatim} package, providing a \environment{listing} environment and a \csx{listinginput} command, which line-number the text of the file. The package also has a \csx{verbatimtabinput} command, that honours \acro{TAB} characters in the input (the package's \environment{listing} environment and the \csx{listinginput} command also both honour \acro{TAB}). The \Package{sverb} package provides verbatim input (without recourse to the facilities of the \Package{verbatim} package): \begin{quote} \begin{verbatim} \usepackage{sverb} ... \verbinput{verb.txt} \end{verbatim} \end{quote} The \Package{fancyvrb} package offers configurable implementations of everything \Package{verbatim}, \Package{sverb} and \Package{moreverb} have, and more besides. It is nowadays the package of choice for the discerning typesetter of verbatim text, but its wealth of facilities makes it a complex beast and study of the documentation is strongly advised. The \Class{memoir} class includes the relevant functionality of the \Package{verbatim} and \Package{moreverb} packages. \begin{ctanrefs} \item[alltt.sty]Part of the \LaTeX{} distribution. \item[fancyvrb.sty]\CTANref{fancyvrb} \item[memoir.cls]\CTANref{memoir} \item[moreverb.sty]\CTANref{moreverb} \item[sverb.sty]Distributed as part of \CTANref{mdwtools}[sverb] \item[verbatim.sty]Distributed as part of \CTANref{2etools}[verbatim] \end{ctanrefs} \Question[Q-linenos]{Including line numbers in typeset output} For general numbering of lines, there are two packages for use with \LaTeX{}, \Package{lineno} (which permits labels attached to individual lines of typeset output) and \Package{numline}. (\Package{Numline} is considered obsolete, but remains available from the archive.) Both of these packages play fast and loose with the \LaTeX{} output routine, which can cause problems: the user should beware\dots{} If the requirement is for numbering verbatim text, \Package{moreverb}, or \Package{fancyvrb} (see % ! line break \Qref[question]{including files verbatim}{Q-verbfile}) may be used. Class \Class{memoir} also provides the necessary facilities. One common use of line numbers is in critical editions of texts, and for this the \Package{edmac} package offers comprehensive support; \Package{ledmac} is a \LaTeX{} port of \Package{edmac}. The \Package{vruler} package sidesteps many of the problems associated with line-numbering, by offering (as its name suggests) a rule that numbers positions on the page. The effect is good, applied to even-looking text, but is poor in texts that involve breaks such as interpolated mathematics or figures. Documentation of the package, in the package itself, is pretty tough going, though there is an example (also inside the package file). \begin{ctanrefs} \item[edmac]\CTANref{edmac} \item[fancyvrb.sty]\CTANref{fancyvrb} \item[ledmac.sty]\CTANref{ledmac} \item[lineno.sty]\CTANref{lineno} \item[memoir.cls]\CTANref{memoir} \item[moreverb.sty]\CTANref{moreverb} \item[numline.sty]\CTANref{numline} \item[vruler.sty]\CTANref{vruler} \end{ctanrefs} \Question[Q-codelist]{Code listings in \LaTeX{}} `Pretty' code listings are sometimes considered worthwhile by the ``ordinary'' programmer, but they have a serious place in the typesetting of dissertations by computer science and other students who are expected to write programs. Simple verbatim listings of programs are commonly useful, as well. \begin{hyperversion} \Qref{Verbatim listings}{Q-verbfile} are dealt with elsewhere, \end{hyperversion} \begin{flatversion} Verbatim listings are dealt with elsewhere (\Qref{}{Q-verbfile}), \end{flatversion} as is the problem of % ! line break \Qref*{typesetting algorithm specifications}{Q-algorithms}. The \Package{listings} package is widely regarded as the best bet for formatted output (it is capable of parsing program source, within the package itself), but there are several well-established packages that rely on a pre-compiler of some sort. You may use \Package{listings} to typeset snippets that you include within your source: \begin{quote} \begin{verbatim} \usepackage{listings} \lstset{language=C} ... \begin{document} \begin{lstlisting} #include int main(int argc, char ** argv) { printf("Hello world!\n"); return 0; } \end{lstlisting} \end{document} \end{verbatim} \end{quote} or you can have it typeset whole files: \begin{quote} \begin{verbatim} \usepackage{listings} \lstset{language=C} ... \begin{document} \lstinputlisting{main.c} \end{document} \end{verbatim} \end{quote} These very simple examples may be decorated in a huge variety of ways, and of course there are other languages in the package's vocabulary than just \ProgName{C}\dots{} For a long time, advice on \AllTeX{} lists seemed to regard \Package{listings} as the be-all and end-all on this topic. In the last few years, viable alternatives have appeared \ProgName{Highlight} is attractive if you need more than one output format for your program: as well as \AllTeX{} output, \ProgName{highlight} will produce (\acro{X})\acro{HTML}, \acro{RTF} and \acro{XSL}-\acro{FO} representations of your program listing. The manual leads you through the details of defining a parameter file for a ``new'' language, as well as the presentation details of a language. The \Package{minted} package is another alternative that offers the means of creating new language definitions. It requires that code be processed using an external (\ProgName{python}) script, \href{http://pygments.org/}{\ProgName{Pygments}}. \ProgName{Pygments}, in turn, needs a ``lexer'' that knows the language you want to process; lots of these are available, for the more commonly-used languages, and there is advice on ``rolling your own'' on the % ! line break. \ProgName{Pygments} site Usage of \Package{minted} can be as simple as \begin{quote} \cmdinvoke{begin}{minted}{\meta{language}}\\ \dots{}\\ \cmdinvoke{end}{minted} \end{quote} which processes the program code dynamically, at typesetting time~--- though such usage is likely to require that % ! line break \Qref*{separate processing be enabled}{Q-spawnprog}. On a rather different path, the package \Package{showexpl} supports typesetting \alltex{} code and its typeset output, in parallel `panes'. (Thiscould provide support for \alltex{} instruction texts, or for papers in \tex{} user group publications. The package uses \Package{listings} for its \alltex{} pane, and typesets the result into a simple box, for the other pane. Longer-established, and variously less ``powerful'' systems include: \begin{itemize} \item The \ProgName{lgrind} system is a well-established pre-compiler, with all the facilities one might need and a wide repertoire of languages; it is derived from the even longer-established \ProgName{tgrind}, whose output is based on \plaintex{}. \item The \ProgName{tiny_c2l} system is slightly more recent: users are again encouraged to generate their own driver files for languages it doesn't already deal with, but its ``tiny'' name correctly hints that it's not a particularly elaborate system. \item The \ProgName{C++2LaTeX} system comes with strong recommendations for use with \acro{C} and \acro{C}++. \item An extremely simple system is \ProgName{c2latex}, for which you write \LaTeX{} source in your \acro{C} program comments. The program then converts your program into a \LaTeX{} document for processing. The program (implicitly) claims to be ``self-documenting''. \end{itemize} \begin{ctanrefs} \item[c2latex]\CTANref{c2latex} \item[C++2LaTeX]\CTANref{c++2latex} \item[highlight]\CTANref{highlight} \item[lgrind]\CTANref{lgrind} \item[listings.sty]\CTANref{listings} \item[minted.sty]\CTANref{minted} \item[showexpl.sty]\CTANref{showexpl} \item[tgrind]\CTANref{tgrind} \item[tiny\_c2l]\CTANref{tiny_c2l} \end{ctanrefs} \LastEdit{2013-03-28} \Question[Q-algorithms]{Typesetting pseudocode in \LaTeX{}} There is no consensus on the `right' way to typeset pseudocode. Consequently, there are a variety of \LaTeX{} packages to choose from for producing \ae{}sthetically pleasing pseudocode listings. Pseudocode differs from actual program listings in that it lacks strict syntax and semantics. Also, because pseudocode is supposed to be a clear expression of an algorithm it may need to incorporate mathematical notation, figures, tables, and other \LaTeX{} features that do not appear in conventional programming languages. \begin{wideversion} % hyper? \Qref{Typesetting program listings}{Q-codelist} is described elsewhere. \end{wideversion} \begin{narrowversion} % non-hyper Typesetting program listings is described elsewhere (\Qref{}{Q-codelist}). \end{narrowversion} You can certainly create your own environment for typesetting pseudocode using, for example, the \environment{tabbing} or \environment{list} environments~--- it's not difficult, but it may prove boring. So it's worth trying the following packages, all designed specifically for typesetting pseudocode. The \Package{algorithms} bundle (which contains packages \Package{algorithm} and \Package{algorithmic}, both of which are needed for ordinary use) has a simple interface and produces fairly nice output. It provides primitives for statements, which can contain arbitrary \LaTeX{} commands, comments, and a set of iterative and conditional constructs. These primitives can easily be redefined to produce different text in the output. However, there is no support for adding new primitives. Typesetting the pseudocode itself is performed in \Package{algorithmic}; the \Package{algorithms} package uses the facilities of the \Package{float} package to number algorithms sequentially, enable algorithms to float like figures or tables, and support including a List of Algorithms in a document's front matter. Packages in the \Package{algorithmicx} bundle are similar both in concept and output form to \Package{algorithmic} but additionally provide support for adding new keywords and altering the formatting. It provides the \Package{algpseudocode} package which is (almost) a drop-in replacement for \Package{algorithmic}. Another package in the bundle, \Package{algpascal}, uses Pascal-like keywords, indents differently from \Package{algpseudocode}, and puts command arguments in maths mode instead of text mode. There is no floating environment but \Package{algorithmicx}, like \Package{algorithmic}, is compatible with the \Package{algorithm} package. (There have been reports of difficulty defining new commands to fit with the package; unfortunately, the author is not available to comment.) The \Package{alg} package, like \Package{algorithms}, offers a floating algorithm environment with all of the ensuing niceties. \Package{alg}, however, can caption its floats in a variety of (natural) languages. In addition, \Package{alg} unlike \Package{algorithms}, makes it easy to add new constructs. The \Package{newalg} package has a somewhat similar interface to \Package{algorithms}, but its output is designed to mimic the rather pleasant typesetting used in the book ``\emph{Introduction to Algorithms}'' by Corman, Leiserson, Rivest and Stein. Unfortunately, \Package{newalg} does not support a floating environment or any customisation of the output. ``\emph{Bona fide}'' use of the style of ``Introduction to Algorithms'' may be achieved with Cormen's own \Package{clrscode}: this is the package as used in the second edition of the book. Similarly, the style of % ! line break ``\emph{Combinatorial Algorithms: Generation, Enumeration and Search}'' is supported by the \Package{pseudocode} package, written by the authors of the book. It has the common `Pascal-like' style, and has some interesting constructs for what one thinks of as Pascal blocks. The \Package{algorithm2e} is of very long standing, and is widely used and recommended. It loads the \Package{float} package to provide the option of floating algorithm descriptions, but you can always use the ``\texttt{H}'' option of \Package{float} to have the algorithm appear ``where you write it''. The usage of the \Package{program} package is a little different from that of the other packages. It typesets programs in maths mode instead of text mode; and linebreaks are significant. \Package{program} lacks a floating environment but does number algorithms like \Package{alg} and \Package{algorithms}. Customisation and extension are not supported. Documentation of the \Package{program} package (such as it is) appears in a file \File{program.msg} in the distribution. None of the above are perfect. The factors that should influence your choice of package include the output style you prefer, how much you need to extend or modify the set of keywords, and whether you require algorithms to float like figures and tables. %% %% Documentation availability: %% \begin{description} %% \item[\Package{algorithms} bundle] is provided in \File{algorithms.ps} %% (also available as LaTeX{} source). The documentation speaks as if %% the two packages of the bundle were indeed one, called %% \Package{algorithms}. %% \item[\Package{program} package] (such as it is) appears in a file %% \File{program.msg}. %% \item[\Package{clrscode} package] is to be found in %% \File{clrscode.pdf} in the distribution. %% \item[\Package{algorithm2e} package] is to be found in %% \File{algorithm2e.tex} in the distribution (it needs the package %% itself when you process it). %% \end{description} \begin{ctanrefs} \item[algorithm2e.sty]\CTANref{algorithm2e} \item[algorithmicx\nothtml{\rmfamily} bundle]\CTANref{algorithmicx} \item[algorithms\nothtml{\rmfamily} bundle]\CTANref{algorithms} \item[alg.sty]\CTANref{alg} \item[clrscode.sty]\CTANref{clrscode} \item[float.sty]\CTANref{float} \item[newalg.sty]\CTANref{newalg} \item[program.sty]\CTANref{program} \item[pseudocode.sty]\CTANref{pseudocode} \end{ctanrefs} \LastEdit{2011-10-12} \Question[Q-makeindex]{Generating an index in \AllTeX{}} Making an index is not trivial; what to index, and how to index it, is difficult to decide, and uniform implementation is difficult to achieve. You will need to mark all items to be indexed in your text (typically with \csx{index} commands). It is not practical to sort a large index within \TeX{}, so a post-processing program is used to sort the output of one \TeX{} run, to be included into the document at the next run. The following programs are available: \begin{description} \item[makeindex] Comes with most distributions~--- a good workhorse, but is not well-arranged to deal with other sort orders than the canonical \acro{ASCII} ordering. The \Package{makeindex} documentation is a good source of information on how to create your own index. \Package{Makeindex} can be used with some \TeX{} macro packages other than \LaTeX{}, such as \nothtml{\Eplain\ (}% \Qref{Eplain}{Q-eplain}\nothtml{)}, and \TeX{} (whose macros can be used independently with \plaintex{}). \item[idxtex] for \LaTeX{} under \acro{VMS}; \ProgName{idxtex} comes with a glossary-maker \ProgName{glotex}. \item[texindex(1)] A witty little shell-script using \ProgName{sed} and \ProgName{awk}; designed for \LaTeX{} under Unix. \item[texindex(2)] The \Qref*{Texinfo}{Q-texinfo} system also offers a program \ProgName{texindex}, whose source is to be found in the \ProgName{texinfo} distribution. The \Package{ltxindex} package provides macros that enable \LaTeX{} users to use this \ProgName{texindex}. \item[xindy] arose from frustration at the difficulty of making a multi-language version of \ProgName{makeindex}. It is designed to be a successor to \ProgName{makeindex}, by a team that included the then-current maintainer of \ProgName{makeindex}. It successfully addresses many of \ProgName{makeindex}'s shortcomings, including difficulties with collation order in different languages, and it is highly flexible. \ProgName{Xindy} itself will work with Unicode (UTF-8) encoded \latex{} input. A separate application (\ProgName{texindy}) deals with `standard' \latex{} source, processes it and passes `sanitised' text to \ProgName{Xindy}. \end{description} \begin{ctanrefs} \item[idxtex]\CTANref{glo+idxtex} \item[ltxindex.sty]\CTANref{ltxindex} \item[makeindex]\CTANref{makeindex} \item[makeindex (Macintosh)]\CTANref{macmakeindex} \item[texindex \nothtml{\upshape\rmfamily}(the script)]\CTANref{texindex} \item[texindex \nothtml{\upshape\rmfamily}(the program)]Distributed with \CTANref{texinfo} \item[texsis (system)]\CTANref{texsis} \item[texsis (makeindex support)]\CTANref{texsis-index} \item[xindy]\CTANref{xindy} \end{ctanrefs} \Question[Q-setURL]{Typesetting \acro{URL}s} \acro{URL}s tend to be very long, and contain characters that would naturally prevent them being hyphenated even if they weren't typically set in \csx{ttfamily}, verbatim. Therefore, without special treatment, they often produce wildly overfull \csx{hbox}es, and their typeset representation is awful. There are three packages that help solve this problem: \begin{itemize} \item The \Package{path} package, which defines a \csx{path} command. The command defines each potential break character as a \csx{discretionary}, and offers the user the opportunity of specifying a personal list of potential break characters. Its chief disadvantage is fragility in \LaTeX{} moving arguments. The % beware line breaks \Qref*{\Eplain{} macros}{Q-eplain}~--- define a similar \csx{path} command. \Package{Path}, though it works in simple situations, makes no attempt to work with \LaTeX{} (it is irremediably fragile). Despite its long and honourable history, it is no longer recommended for \LaTeX{} use. \item The \Package{url} package, which defines an \csx{url} command (among others, including its own \csx{path} command). The command gives each potential break character a maths-mode `personality', and then sets the \acro{URL} itself (in the user's choice of font) in maths mode. It can produce (\LaTeX{}-style) `robust' commands % beware line break within paren (\htmlonly{see }\Qref{use of \csx{protect}}{Q-protect}) for use within moving arguments. The package ordinarily ignores spaces in the \acro{URL}, but unfortunately \acro{URL}s that contain spaces do exist; to typeset them, call the package with the \pkgoption{obeyspaces} option. Two other useful options allow line breaks in the \acro{URL} in places where they are ordinarily suppressed to avoid confusion: \pkgoption{spaces} to allow breaks at spaces (note, this requires \pkgoption{obeyspaces} as well, and \pkgoption{hyphens} to allow breaks after hyphens. (Note that the package \emph{never} does ``ordinary'' hyphenation of names inside an \acro{URL}.) It is possible to use the \Package{url} package in \plaintex{}, with the assistance of the \Package{miniltx} package (which was originally developed for using the \LaTeX{} graphics package in \plaintex{}). A small patch is also necessary: the required sequence is therefore: \begin{quote} \begin{narrowversion} \begin{verbatim} \input miniltx \expandafter\def\expandafter\+% \expandafter{\+} \input url.sty \end{verbatim} \end{narrowversion} \begin{wideversion} \begin{verbatim} \input miniltx \expandafter\def\expandafter\+\expandafter{\+} \input url.sty \end{verbatim} \end{wideversion} \end{quote} \item The \Package{hyperref} package, which uses the typesetting code of \Package{url}, in a context where the typeset text forms the anchor of a link. \end{itemize} The author of this answer prefers the (rather newer) \Package{url} package (directly or indirectly); both \Package{path} and \Package{url} work well with \plaintex{} (though of course, the fancy \LaTeX{} facilities of \Package{url} don't have much place there). (\Package{hyperref} isn't available in a version for use with \plaintex{}.) Note that neither \csx{path} (from package \Package{path}) nor \csx{url} (from package \Package{url}) is robust (in the \LaTeX{} sense). If you need a \acro{URL} to go in a moving argument, you need the command \csx{urldef} from the \Package{url} package. So one might write: \begin{quote} \begin{verbatim} \urldef\faqhome\url{http://www.tex.ac.uk/faq} \end{verbatim} \end{quote} after which, \csx{faqhome} is robust. Documentation of both package \Package{path} and package \Package{url} is in the package files. \begin{ctanrefs} \item[hyperref.sty]\CTANref{hyperref} \item[miniltx.tex]Distributed as part of \CTANref{graphics-plain}[miniltx] \item[path.sty]\CTANref{path} \item[url.sty]\CTANref{url} \end{ctanrefs} \Question[Q-music]{Typesetting music in \tex{}} The current best bet for music typesetting is to use \Package{musixtex}. \Package{Musixtex} is a three-pass system that has a \tex{}-based pass, a processing pass and then a further \tex{} pass. The middle pass, a program called \ProgName{musixflx}, optimises the spacing and sorts out slurs and ties. \Package{Musixtex} is demanding of \tex{} resources, and any significant score requires that typesetting is done using \etex{}, whose expanded variable- and box-register ranges allow for more of the ``parallel'' activities that abound in a music score. Of course, \Package{musixtex} also requires music fonts; those are available in a separate package on the archive. \Package{Musixtex} requires pretty arcane input; most people using it actually prepare (less obscure) input for \ProgName{pmx}, whose output is \tex{} input suitable for \Package{musixtex}. A further preprocessor, \ProgName{M-Tx}, allows preparation of music with lyrics; \ProgName{M-Tx}'s output is fed into \ProgName{pmx}, and thence to \Package{musixtex}. An alternative path to music examples within a \alltex{} document is \href{http://www.lilypond.org}{\ProgName{Lilypond}}. \ProgName{Lilypond} is (at heart) a batch music typesetting system with plain text input that does most of its work without \tex{}. \ProgName{Lilypond}'s input syntax is less cryptic than is MusiX\TeX{}'s, though similar quality is achieved. The \ProgName{lilypond} \href{http://lilypond.org/web/about/faq}{\acro{FAQ}} mentions programs with graphical user interfaces, that export lilypond output. For occasional music references (sharp and flat signs, notes, clefs and so on, there is a (\latex{}) package (with associated font) called \Package{lilyglyphs}. This uses \progname{lilypond}'s fonts (which are included in the package), and also provides the means to add stuff from other sources. Another alternative in the production of music is the \acro{ABC} notation, which was developed to notate the traditional music of Western Europe (which can be written on a single stave), though it can be used much more widely. A front end to \Package{musictex} (see below), \ProgName{abc2mtex}, makes \acro{ABC} typesetting possible. The program \ProgName{midi2tex} can also generate \Package{musictex} output, from \acro{MIDI} files. The history of music in \tex{} goes back some time; the earliest ``working'' macros were Mu\tex{}, by Angelika Schofer and Andrea Steinbach. Mu\tex{} was very limited, but it was some time before Daniel Taupin took up the baton, and developed Music\TeX{}, which allows the typesetting of polyphonic and other multiple-stave music; Music\TeX{} remains available, but is no longer recommended. The first version of Musix\tex{} was developed by Andreas Egler, but he withdrew from the project to work on another package, Opus\tex{}. That never reached the mainstream, and is no longer maintained. The current recommended way of doing Opus\tex{}'s job is \href{http://home.gna.org/gregorio/}{\ProgName{gregorio}}, which can in principle feed into a \tex{}-based document. Once Andreas Egler had withdrawn (his last version of \Package{musixtex} is preserved on the archive), Daniel Taupin took up the development, leading to the \Package{musixtex} used today. \begin{ctanrefs} \item[abc2mtex]\CTANref{abc2mtex} \item[lilyglyphs]\CTANref{lilyglyphs} \item[M-Tx]\CTANref{m-tx} \item[midi2tex]\CTANref{midi2tex} \item[musictex]\CTANref{musictex} % ! line breaks \item[musixtex \nothtml{\rmfamily}(Taupin's version)]\CTANref{musixtex} \item[musixtex \nothtml{\rmfamily}(Egler's version)]\CTANref{musixtex-egler} \item[musixtex \nothtml{\rmfamily}fonts]\CTANref{musixtex-fonts} \item[mutex]\CTANref{mutex} \item[pmx]\CTANref{pmx} \end{ctanrefs} \LastEdit{2013-09-27} \Question[Q-parskip]{Zero paragraph indent} The conventional way of typesetting running text has no separation between paragraphs, and the first line of each paragraph in a block of text indented. In contrast, one common convention for typewritten text was to have no indentation of paragraphs; such a style is often required for ``brutalist'' publications such as technical manuals, and in styles that hanker after typewritten manuscripts, such as officially-specified dissertation formats. Anyone can see, after no more than a moment's thought, that if the paragraph indent is zero, the paragraphs must be separated by blank space: otherwise it is sometimes going to be impossible to see the breaks between paragraphs. The simple-minded approach to zero paragraph indentation is thus: \begin{quote} \begin{verbatim} \setlength{\parindent}{0pt} \setlength{\parskip}{\baselineskip} \end{verbatim} \end{quote} and in the very simplest text, it's a fine solution. However, the non-zero \csx{parskip} interferes with lists and the like, and the result looks pretty awful. The \Package{parskip} package patches things up to look reasonable; it's not perfect, but it deals with most problems. The Netherlands Users' Group's set of classes includes an \Class{article} equivalent (\Class{artikel3}) and a \Class{report} equivalent (\Class{rapport3}) whose design incorporates zero paragraph indent and non-zero paragraph skip. \begin{ctanrefs} \item[\nothtml{\rmfamily}\acro{NTG} classes]\CTANref{ntgclass} \item[parskip.sty]\CTANref{parskip} \end{ctanrefs} \LastEdit{2011-04-01} % yes, really \Question[Q-dropping]{Big letters at the start of a paragraph} A common style of typesetting, now seldom seen except in newspapers, is to start a paragraph (in books, usually the first of a chapter) with its first letter set large enough to span several lines. This style is known as ``dropped capitals'', or (in French) \latexhtml{``lettrines''}{\htmlentity{laquo}lettrines\htmlentity{raquo}}, and \TeX{}'s primitive facilities for hanging indentation make its (simple) implementation pretty straightforward. The \Package{dropping} package does the job simply, but has a curious attitude to the calculation of the size of the font to be used for the big letters. Examples appear in the package documentation, so before you process the \extension{dtx}, the package itself must already be installed. Unfortunately, \Package{dropping} has an intimate relation to the set of device drivers available in an early version of the \LaTeX{} graphics package, and it cannot be trusted to work with modern offerings such as \PDFTeX{} or \acro{DVI}pdfm, let alone such modernisms as \xetex{}. As a result, the package is widely deprecated, nowadays. The more recent \Package{lettrine} package is generally more reliable. It has a well-constructed array of options, and an impressive set of examples adds to the package's document. \begin{ctanrefs} \item[dropping]\CTANref{dropping} \item[lettrine]\CTANref{lettrine} \end{ctanrefs} \LastEdit{2014-01-22} \Question[Q-dec_comma]{The comma as a decimal separator} \TeX{} embodies the British/American cultural convention of using a period as the separator between the whole number and the decimal fraction part of a decimal number. Other cultures use a comma as separator, but if you use a comma in maths mode you get a small space after it; this space makes a comma that is used as a decimal separator look untidy. A simple solution to this problem, in maths mode, is to type \texttt{3}\marg{,}\texttt{14} in place of \texttt{3,14}. While such a technique may produce the right results, it is plainly not a comfortable way to undertake any but the most trivial amounts of typing numbers. Therefore, if you need to use commas as decimal separator, you will probably welcome macro support. There are two packages that can help relieve the tedium: \Package{icomma} and \Package{ziffer}. \Package{Icomma} ensures that there will be no extra space after a comma, unless you type a space after it (as in \texttt{f(x, y)}~--- in the absence of the package, you don't need that space), in which case the usual small space after the comma appears. \Package{Ziffer} is specifically targeted at the needs of those typesetting German, but covers the present need, as well as providing the double-minus sign used in German (and other languages) for the empty `cents' part of an amount of currency. The \Package{numprint} package provides a command \cmdinvoke*{numprint}{number} that prints its argument according to settings you give it, or according to settings chosen to match the language you have selected in \Package{babel}. The formatting works equally well in text or maths. The command is very flexible (it can also group the digits of very `long' numbers), but is inevitably less convenient than \Package{icomma} or \Package{ziffer} if you are typing a lot of numbers. \begin{ctanrefs} \item[icomma.sty]Distributed as part of \CTANref{was}[icomma] \item[numprint.sty]\CTANref{numprint} \item[ziffer.sty]\CTANref{ziffer} \end{ctanrefs} \Question[Q-breakbox]{Breaking boxes of text} \AllTeX{} boxes may not be broken, in ordinary usage: once you've typeset something into a box, it will stay there, and the box will jut out beyond the side or the bottom of the page if it doesn't fit in the typeset area. If you want a substantial portion of your text to be framed (or coloured), the restriction imposes a serious restriction. Fortunately, there are ways around the problem. The \Package{framed} package provides \environment{framed} and \environment{shaded} environments; both put their content into something which looks like a framed (or coloured) box, but which breaks as necessary at page end. The environments ``lose'' footnotes, marginpars and head-line entries, and will not work with \Package{multicol} or other column-balancing macros. The \Class{memoir} class includes the functionality of the \Package{framed} package. The \Package{mdframed} package does the same job, using a different algorithm. The package also provides means of defining `private' framed environments, whose parameters are set at definition time, thus saving considerable effort in documents with many framed boxes. Its restrictions seem much the same as those of \Package{framed}; this is as one would expect, but the list is noticeably different in the two packages' documentation. The \Package{boites} package provides a \environment{breakbox} environment; examples of its use may be found in the distribution, and the package's \File{README} file contains terse documentation. The environments may be nested, and may appear inside \environment{multicols} environments; however, floats, footnotes and marginpars will be lost. For \plaintex{} users, the facilities of the \Package{backgrnd} package may be useful; this package subverts the output routine to provide vertical bars to mark text, and the macros are clearly marked to show where coloured backgrounds may be introduced (this requires \Package{shade}, which is distributed as tex macros and device-independent \MF{} for the shading). The author of \Package{backgrnd} claims that the package works with \LaTeXo{}, but there are reasons to suspect that it may be unstable working with current \LaTeX{}. \begin{ctanrefs} \item[backgrnd.tex]\CTANref{backgrnd} \item[boites.sty]\CTANref{boites} \item[framed.sty]\CTANref{framed} \item[mdframed.sty]\CTANref{mdframed} \item[memoir.cls]\CTANref{memoir} \item[shade.tex]\CTANref{shade} \end{ctanrefs} \LastEdit{2012-02-14} \Question[Q-overstrike]{Overstriking characters} This may be used, for example, to indicate text deleted in the course of editing. Both the \Package{ulem} and the \Package{soul} packages provide the necessary facilities. Overstriking with an ``attached'' comment may be achieved using the \Package{pdfcomment} package, to which you can give optional arguments with all sorts of detail. The comment text is encoded using an Adobe `annotation'; unfortunately, support for these annotations is not a common feature of \acro{PDF} viewers, but if you can safely assume that your audience will use \ProgName{Acrobat Reader}, the facility provides that extra ``shine'' that business users so love. Overstriking for % beware line break \Qref*{cancellation in maths expressions}{Q-cancellation} is achieved by a different mechanism. Documentation of \Package{ulem} is in the package file. \begin{ctanrefs} \item[pdfcomment.sty]\CTANref{pdfcomment} \item[soul.sty]\CTANref{soul} \item[ulem.sty]\CTANref{ulem} \end{ctanrefs} \LastEdit{2013-08-29} \Question[Q-upquot]{Realistic quotes for verbatim listings} The \texttt{cmtt} font has ``curly'' quotes\nothtml{ (\texttt{`thus'})}, which are pleasing on the eye, but don't really tally with what one sees on a modern % beware line break \ProgName{xterm}\nothtml{ (which look like \texttt{\textasciigrave this\textquotesingle})}. The appearance of these quotes is critical in program listings, particularly in those of Unix-like shell scripts. The \Package{upquote} package modifies the behaviour of the \environment{verbatim} environment so that the output is a clearer representation of what the user must type. \begin{ctanrefs} \item[upquote.sty]\CTANref{upquote} \end{ctanrefs} \Question[Q-time]{Printing the time} \TeX{} has a primitive register that contains ``the number of minutes since midnight''; with this knowledge it's a moderately simple programming job to print the time (one that no self-respecting \plaintex{} user would bother with anyone else's code for). However, \LaTeX{} provides no primitive for ``time'', so the non-programming \LaTeX{} user needs help. Two packages are available, both providing ranges of ways of printing the date, as well as of the time: this question will concentrate on the time-printing capabilities, and interested users can investigate the documentation for details about dates. The \Package{datetime} package defines two time-printing functions: \csx{xxivtime} (for 24-hour time), \csx{ampmtime} (for 12-hour time) and \csx{oclock} (for time-as-words, albeit a slightly eccentric set of words). The \Package{scrtime} package (part of the compendious \Class{KOMA-Script} bundle) takes a package option (\pkgoption{12h} or \pkgoption{24h}) to specify how times are to be printed. The command \csx{thistime} then prints the time appropriately (though there's no \emph{am} or \emph{pm} in \pkgoption{12h} mode). The \csx{thistime} command also takes an optional argument, the character to separate the hours and minutes: the default is of course \texttt{:}. \begin{ctanrefs} \item[datetime.sty]\CTANref{datetime} \item[scrtime.sty]Distributed as part of \CTANref{koma-script} \end{ctanrefs} \Question[Q-the-commands]{Redefining counters' \csx{the-}commands} Whenever you request a new \LaTeX{} counter, \LaTeX{} creates a bunch of behind-the-scenes commands, as well as defining the counter itself. Among other things, \cmdinvoke*{newcounter}{fred} creates a command \csx{the}\texttt{\emph{fred}}, which expands to ``the value of \texttt{\emph{fred}}'' when you're typesetting. The definition of \csx{the}\texttt{\emph{fred}} should express the value of the counter: it is almost always always a mistake to use the command to produce anything else. The value may reasonably be expressed as an arabic, a roman or a greek number, as an alphabetic expression, or even as a sequence (or pattern of) symbols. If you need a decision process on whether to re-define \csx{the}\texttt{\emph{fred}}, consider what might happen when you do so. So, for example, if you want your section numbers to be terminated by a period, you could make \csx{thesection} expand with a terminating period. However, such a change to \csx{thesection} makes the definition of \csx{thesubsection} look distinctly odd: you are going to find yourself redefining things left, right and centre. Rather, use the standard techniques for % beware line break \Qref*{adjusting the presentation of section numbers}{Q-seccntfmt}. Or, suppose you want the page number to appear at the bottom of each page surrounded by dashes (as in ``\texttt{-}{}\texttt{-\textasciitilde}\texttt{nnn\textasciitilde-}{}\texttt{-}''). If you try to achieve this by redefining \csx{thepage}, problems will arise from the use of the page number in the table of contents (each number will have the dashes attached), and \csx{pageref} references will be oddly modified. In this case, the change of appearance is best done by redefining the page style itself, perhaps using \Qref*{package \Package{fancyhdr}}{Q-fancyhdr}. \subsection{Tables of contents and indexes} \Question[Q-tocloft]{The format of the Table of Contents, etc.} The formats of entries in the table of contents (\acro{TOC}) are controlled by a number of internal commands (discussed in section~2.3 of \Qref*{\emph{The \LaTeX{} Companion}}{Q-latex-books}. The commands \csx{@pnumwidth}, \csx{@tocrmarg} and \csx{@dotsep} control the space for page numbers, the indentation of the right-hand margin, and the separation of the dots in the dotted leaders, respectively. The series of commands named \csx{l@\emph{xxx}}, where \texttt{\emph{xxx}} is the name of a sectional heading (such as \texttt{chapter} or \texttt{section}, \dots{}\@) control the layout of the corresponding heading, including the space for section numbers. All these internal commands may be individually redefined to give the effect that you want. All that work may be avoided, using the package \Package{tocloft} which provides a set of user-level commands that may be used to change the \acro{TOC} formatting. Since exactly the same mechanisms are used for the List of Figures and List of Tables, the layout of these sections may be controlled in the same way. The \Package{etoc} package offers similar flexibility, together with multicolumn tables of contents and boxes around tables (and the like). The \Class{KOMA-Script} classes provides an optional variant structure for the table of contents, and calculates the space needed for the numbers automatically. The \Class{memoir} class includes the functionality of \Package{tocloft}. \begin{ctanrefs} \item[etoc.sty]\CTANref{etoc} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[tocloft.sty]\CTANref{tocloft} \end{ctanrefs} \LastEdit{2012-12-07} \Question[Q-secnumdep]{Unnumbered sections in the Table of Contents} The way the relevant parts of sectioning commands work is exemplified by the way the \csx{chapter} command uses the counter \texttt{secnumdepth} (described in Appendix~C of the \LaTeX{} manual): \begin{enumerate} \item put something in the \extension{aux} file, which will appear in the \extension{toc}; \htmlignore \item if \ensuremath{\texttt{secnumdepth} \geq 0}, \endhtmlignore \begin{htmlversion} \item if the \texttt{secnumdepth} counter is greater than or equal to zero, \end{htmlversion} increase the counter for the chapter and write it out. \item write the chapter title. \end{enumerate} Other sectioning commands are similar, but with other values used in the test. So a simple way to get headings of funny `sections' such as prefaces in the table of contents is to use the counter: \begin{quote} \begin{verbatim} \setcounter{secnumdepth}{-1} \chapter{Preface} \end{verbatim} \end{quote} Unfortunately, you have to set \texttt{secnumdepth} back to its usual value (which is~2 in the standard styles) before you do any `section' which you want to be numbered. Similar settings are made, automatically, in the \LaTeX{} book class by the \csx{frontmatter} and \csx{backmatter} commands. The value of the counter \texttt{tocdepth} controls which headings will be finally printed in the table of contents; it is normally set in the preamble and is a constant for the document. The package \Package{tocvsec2} package takes the tedium out of changing the \texttt{secnumdepth} and/or the \texttt{tocdepth} counter values at any point in the body of the document; the commands (respectively) \csx{setsecnumdepth} and \csx{settocdepth} make the changes based on the \emph{name} of the sectional unit (\texttt{chapter}, \texttt{section}, etc.\@). The package \Package{abstract} (see % line break! \Qref[question]{one-column abstracts}{Q-onecolabs}) includes an option to add the \texttt{abstract} to the table of contents, while the package \Package{tocbibind} has options to include the table of contents itself, the \texttt{bibliography}, \texttt{index}, etc., to the table of contents. The \Class{KOMA-Script} classes have commands \csx{addchap} and \csx{addled}, which work like \csx{chapter} and \csx{section} but aren't numbered. The \Class{memoir} class incorporates the facilities of all three of the \Package{abstract}, \Package{tocbibind} and \Package{tocvsec2} packages. \begin{ctanrefs} \item[abstract.sty]\CTANref{abstract} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[tocbibind.sty]\CTANref{tocbibind} \item[tocvsec2.sty]\CTANref{tocvsec2} \end{ctanrefs} \Question[Q-tocbibind]{Bibliography, index, etc., in \acro{TOC}} The standard \LaTeX{} classes (and many others) use \csx{section*} or \csx{chapter*} for auto-generated parts of the document (the tables of contents, lists of figures and tables, the bibliography and the index). As a result, these items aren't numbered (which most people don't mind), and (more importantly) they don't appear in the table of contents. The correct solution (as always) is to have a class of your own that formats your document according to your requirements. The macro to do the job (\csx{addcontentsline}) is fairly simple, but there is always an issue of ensuring that the contents entry quotes the correct page. Supposing that our the document is chapter-based (class \Class{report} or \Class{book}, for example), the text: \begin{quote} \begin{verbatim} \bibliography{frooble} \addcontentsline{toc}{chapter}{Bibliography} \end{verbatim} \end{quote} will produce the \emph{wrong} answer if the bibliography is more than one page long. Instead, one should say: \begin{quote} \begin{verbatim} \cleardoublepage \addcontentsline{toc}{chapter}{Bibliography} \bibliography{frooble} \end{verbatim} \end{quote} (Note that \csx{cleardoublepage} does the right thing, even if your document is single-sided~--- in that case, it's a synonym for \csx{clearpage}). Ensuring that the entry refers to the right place is trickier still in a \csx{section}-based class. If you are using \Package{hyperref} (which will link entries in the table of contents to the relevant place in the file), a slight adjustment is necessary: \begin{quote} \begin{verbatim} \cleardoublepage \phantomsection \addcontentsline{toc}{chapter}{Bibliography} \bibliography{frooble} \end{verbatim} \end{quote} The extra command (\csx{phantomsection}) gives \Package{hyperref} something to ``hold on to'' when making the link. The common solution, therefore, is to use the \Package{tocbibind} package, which provides many facilities to control the way these entries appear in the table of contents. Classes of the \Class{KOMA-script} bundle provide this functionality as a set of class options (e.g., \pkgoption{bibtotoc} to add the bibliography to the table of contents); the \Class{memoir} class includes \Package{tocbibind} itself. \begin{ctanrefs} \item[hyperref.sty]\CTANref{hyperref} \item[\nothtml{\rmfamily}KOMA script bundle]\CTANref{koma-script} \item[memoir.cls]\CTANref{memoir} \item[tocbibind.sty]\CTANref{tocbibind} \end{ctanrefs} \Question[Q-minitoc]{Table of contents, etc., per chapter} The common style, of a ``small'' table of contents for each part, chapter, or even section, is supported by the \Package{minitoc} package. The package also supports mini-lists of tables and figures; but, as the documentation observes, mini-bibliographies present a different problem~--- see \Qref[question]{bibliographies per chapter}{Q-chapbib}. The package's basic scheme is to generate a little \extension{aux} file for each chapter, and to process that within the chapter. Simple usage would be: \begin{quote} \begin{verbatim} \usepackage{minitoc} ... \begin{document} ... \dominitoc \tableofcontents \dominilof \listoffigures ... \chapter{blah blah} \minitoc \mtcskip \minilof ... \end{verbatim} \end{quote} though a lot of elaborations are possible (for example, you don't need a \csx{minitoc} for every chapter). \Package{Babel} doesn't know about \Package{minitoc}, but \Package{minitoc} makes provision for other document languages than English~--- a wide variety is available. Fortunately, the current version of the \Package{hyperref} package does know about \Package{minitoc} and treats \csx{minitoc} tables in the same way as ``real'' tables of contents. \begin{ctanrefs} \item[babel.sty]\CTANref{babel} \item[hyperref.sty]\CTANref{hyperref} \item[minitoc.sty]\CTANref{minitoc} \end{ctanrefs} \LastEdit{2013-03-05} \Question[Q-multind]{Multiple indexes} \LaTeX{}'s standard indexing capabilities (those provided by the \Package{makeidx} package) only provide for one index in your document; even quite modest documents can be improved by indexes for separate topics. The \Package{multind} package provides simple and straightforward multiple indexing. You tag each \csx{makeindex}, \csx{index} and \csx{printindex} command with a file name, and indexing commands are written to (or read from) the name with the appropriate (\extension{idx} or \extension{ind}) extension appended. The \csx{printindex} command is modified from an old version of the \LaTeXo{} standard so that it doesn't create its own chapter or section heading; you therefore decide what names (or sectioning level, even) to use for the indexes, and \Qref*{\csx{indexname}}{Q-fixnam} is completely ignored. To create a ``general'' and an ``authors'' index, one might write: \begin{quote} \begin{verbatim} \usepackage{multind} \makeindex{general} \makeindex{authors} ... \index{authors}{Eccentric Professor} ... \index{general}{FAQs} ... \printindex{general}{General index} \printindex{authors}{Author index} \end{verbatim} \end{quote} To complete the job, run \LaTeX{} on your file enough times that labels, etc., are stable, and then execute the commands \begin{quote} \begin{verbatim} makeindex general makeindex authors \end{verbatim} \end{quote} before running \LaTeX{} again. Note that the names of the index files to process are not necessarily related to the name of the \LaTeX{} file you're processing, at all. (There's no documentation that comes with the package: what you see above is as good as you will get\dots{}) The \Package{multind} package doesn't work with the % ! line break \Qref*{\amslatex{} classes}{Q-AMSpkg}, but the \acro{AMS} provide a substitute, the \Package{amsmidx} package. You use the \Package{amsmidx} package pretty much the same as you would \Package{multind}, but if things aren't clear, there \emph{is} documentation (unlike \Package{multind}). The \Package{index} package provides a comprehensive set of indexing facilities, including a \csx{newindex} command that allows the definition of new styles of index. \csx{newindex} takes a `tag' (for use in indexing commands), replacements for the \extension{idx} and \extension{ind} file extensions, and a title for the index when it's finally printed; it can also change the item that's being indexed against (for example, one might have an index of artists referenced by the figure number where their work is shown). Using \Package{index}, to create an author index together with a ``normal'' index, one would start with preamble commands: \begin{quote} \begin{verbatim} \usepackage{index} \makeindex \newindex{aut}{adx}{and}{Name Index} \end{verbatim} \end{quote} which load the package, define a ``main'' (original-style) index, and then define an author index. Then, in the body of the document, we might find commands like: \begin{quote} \begin{verbatim} \index[aut]{Another Idiot} ... \index{FAQs} \end{verbatim} \end{quote} Which place an entry in the author index, and then one in the main index. At the end of the document, we have two commands: \begin{quote} \begin{verbatim} \printindex \printindex[aut] \end{verbatim} \end{quote} Which will print the main index and then the author index. Supposing this lot to be in \File{myfile.tex}, after enough runs through \LaTeX{} that labels are stable, execute the following commands (Unix-style shell commands shown here, but the principle is the same whatever system you're using): \begin{quote} \begin{verbatim} makeindex myfile makeindex myfile.adx -o myfile.and \end{verbatim} \end{quote} and rerun \LaTeX{}. The \ProgName{makeindex} commands process \File{myfile.idx} to \File{myfile.ind} (the default action), and then \File{myfile.adx} to \File{myfile.and}, the two files needed as input by the two \csx{printindex} commands in \File{myfile.tex}. The \Package{splitidx} package can operate in the same way as the others: load the package with the \pkgoption{split} option, and declare each index with a \csx{newindex} command: \begin{quote} \cmdinvoke{newindex}[\meta{index name}]{\meta{shortcut}} \end{quote} and \Package{splitidx} will generate a file \csx{jobname}\texttt{.\meta{shortcut}} to receive index entries generated by commands like \cmdinvoke{sindex}[\meta{shortcut}]{\meta{item}}. As with the other packages, this method is limited by \TeX{}'s total number of output files. However, \Package{splitindex} also comes with a small executable \ProgName{splitindex} (available for a variety of operating systems); if you use this auxiliary program (and don't use \pkgoption{split}), there's no limit to the number of indexes. Apart from this trick, \Package{splitidx} supports the same sorts of things as does \Package{index}. An example of use appears in the documentation. The \Package{imakeidx} package can do a wide range of things (in particular, it can run an index-builder~--- via % ! line break \Qref*{\csx{write18} commands}{Q-spawnprog}~--- so as to simplify business of making the final copy of a document). The package can also make multiple indexes; it can do the job in the conventional (\Package{multind}) way, or by using the external \ProgName{splitindex} script provided with the \Package{splitindex} package. (This arrangement allows efficient operation with small numbers of indexes, while retaining the flexibility of permitting large numbers of indexes without hitting the restriction of numbers of active output streams.) The \Class{memoir} class has its own multiple-index functionality (as well as its own index layout options, which other packages delegate to the index style used by \ProgName{makeindex}). \begin{ctanrefs} \item[amsmidx.sty]Part of the \acro{AMS} class distribution \CTANref{amscls}[amsmidx] \item[imakeidx.sty]\CTANref{imakeidx} \item[index.sty]\CTANref{index} \item[makeidx.sty]Part of the \LaTeX{} distribution \item[memoir.cls]\CTANref{memoir} \item[multind.sty]\CTANref{multind} \item[splitidx.sty \bgroup\nothtml{\normalfont}and \egroup splitindex]% \CTANref{splitindex} \end{ctanrefs}