[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

Comments on the Typography

The book was written in Plain TeX in order to maximize control over the output.

The fonts are from the Lucida Bright family which I like better than TeX's default Computer Modern fonts. The Lucida Bright fonts have a few defects from my point of view, e.g., the arrows need to be magnified to look right, and the blackboard bold symbols are only a slight improvement on the AMS blackboard bold, but overall I'm pleased with the results. Keeping the fonts working properly as the underlying system software has changed has sometimes been a headache, however.

The drawings in the book were created using Adobe Illustrator and inserted as eps files. Adobe Illustrator is a powerful commercial graphics software package which could be used for all sorts of fancy effects, but I prefer just simple line drawings so as not to create distractions from the underlying mathematics. When I was writing the book Adobe Illustrator was reasonably priced, but it has since become quite expensive as well as bloated with unneeded features, so I probably would not use it again if I were starting from scratch now.

The commutative diagrams (with all the horizontal, vertical, and diagonal arrows) were also done using Adobe Illustrator. This is a tedious process involving positioning everything by hand, but it seemed to be the only way I could get complete control over the appearance of these diagrams at the time. Nowadays there are other viable alternatives such as Tikz.

The chapter and section headings were also created with Adobe Illustrator.

TeX Details

I am certainly not a master of TeX, and it has taken me quite a bit of trial and error to achieve some particular effects that I wanted. I'm sure there are more elegant ways of doing some of these things.

1. Insetting Figures. Insetting figures into the text, rather than simply placing them between lines of text, can be done via the \parshape macro. To do this, insert lines like the following just before the paragraph:

\parshape=8 0pt\hsize 0pt\hsize 0pt.7\hsize 0pt.7\hsize 0pt.7\hsize 0pt.7\hsize 0pt.7\hsize 0pt\hsize

This tells TeX to make the first two lines of the paragraph of normal length, then make the next five lines of length equal to .7 times the normal length, with the blank space at the right end of each line, then make all the remaining lines of normal length. This creates an empty rectangle into which a figure can be inserted by placing the following commands at the approximate point in the text where you want the figure to appear.

\vadjust{\hfill\smash{\lower 32pt\llap{\epsfbox{figurename.ps}}}}\ignorespaces

Here the number 32 will have to be adjusted to fit the particular diagram, as will the numbers in the previous \parshape command. I do these adjustments just by trial and error. (Your implementation of TeX may use a different macro than "\epsfbox" to insert eps files.)

With this rather naive method of inserting figures there can be problems with page breaks occurring in the middle of the inset. A more sophisticated approach would solve these problems automatically rather than by hand, but at the expense of losing some control over where the inset figure appears.

2. Subsection Headings. These headings which appear in a shaded box are done by superimposing TeX text on top of a shaded rectangle created with Adobe Illustrator. This is done using the TeX macro

\outer\def\subsect#1\par{\vskip0pt plus.07\vsize\penalty-250\vskip0pt plus-.07\vsize
\bigskip\vskip\parskip\message{#1}
\vbox{\smash{\lower5pt\hbox{\kern-8pt\epsfbox{shadedbox.ps}}}}\vskip-\baselineskip
\leftline{\subsectfont#1}\nobreak\medskip}

Here "shadedbox.ps" is the Adobe Illustrator file for the rectangle, and "\subsectfont" is the font you choose for the section heading. At the appropriate place in the text you then type "\subsect Heading" to get a shaded rectangle with the word "Heading" in it. You can delete the "\message{#1}" from the macro if you don't want a message appearing in the TeX log giving the name of the subsection. (I find this message useful in coordinating entries in the TeX log with the actual file.) The stuff at the beginning of the macro about vskips and penalties prevents TeX from starting a new subsection at the very bottom of a page.

3. Page Headers. These are a bit complicated, so let me explain the various components. First the fonts for the page numbers and the text in the header are specified (they were Lucida Bright fonts in the book, but here I'll give their Computer Modern equivalents):

\font\thickheaderfont=cmssbx10
\font\thinheaderfont=cmss10

Next is something to allow the header to be omitted on the first page of a chapter:

\newif\ifskipheader
\def\makeheaders{\skipheaderfalse}
\def\noheaders{\skipheadertrue}

To use this, type the noheaders command on the first page of the chapter and the makeheaders command somewhere on the second page of the chapter.

Now we come to the main ingredients:

\def\makeheadline{\ifskipheader{}\else\vbox to 0pt{\offinterlineskip
\vskip-33pt
\line{\vbox to 8.5pt{}\the\headline}
\vskip-2.8pt
\line{\vbox to 0pt{}\ifodd\pageno\hrulefill{\hskip66pt} \else\hss\hskip28pt\hrulefill{}\fi}\vss}\nointerlineskip\fi}
\headline={\ifodd\pageno\rightheadline \else\leftheadline\hss\fi}
\def\leftheadline{\vbox{\hbox{\vbox{\hbox{\thickheaderfont \folio\enskip\vrule height10pt depth6pt width1pt}\hrule depth.4pt}\vbox{\thinheaderfont\hbox to 5truein{ \hskip 12pt\leftheadnameone\hfil\leftheadnametwo \vphantom{p}\hfil}\vskip2pt\hrule\vskip2pt}} } }
\def\rightheadline{\hfill\hbox{\vbox{\thinheaderfont\hbox to 5truein{ \vphantom{p}\hfil\rightheadnameone\hfil\rightheadnametwo \hskip12pt}\vskip2pt\hrule\vskip2pt}\vbox{\hbox{\thickheaderfont \vrule height10pt depth6pt width1pt \enskip \folio}\hrule depth.4pt}}}

Finally, at the beginning of the chapter or section the text that goes in the header must be specified. This is broken into two parts, slightly different on the left-hand page and the right-hand page. For example:

\def\leftheadnameone{Chapter 1}
\def\leftheadnametwo{The Fundamental Group}
\def\rightheadnameone{Covering Spaces}
\def\rightheadnametwo{Section 1.3}

4. Vertical Bars. The double vertical bars alongside statements of Theorems, Lemmas, etc., are created by using a different \proclaim macro than the default in Plain TeX, namely:

\long\def\proclaim #1. #2\par{\bigbreak\vbox{\hbox {\vrule\kern1.5pt\vrule
\everypar{\leftskip 5pt\rightskip 4pt}\vbox{\noindent {\bf #1.\enspace}{\sl#2}}}}
\par\ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

If the statement of the theorem involves a list of items (a), (b), etc., then the usual \item command does not work with the preceding definition of \proclaim. Instead, I use more complicated macros which I'd be happy to tell you about by email.

5. Subscripts and Superscripts. To my eyes, TeX's default parameters do not move subscripts down far enough (unless superscripts are also present), and superscripts are not moved up far enough. To correct this I use the following definitions:

\fontdimen16\textfont2=2.5pt
\fontdimen17\textfont2=2.5pt
\fontdimen14\textfont2=4.5pt
\fontdimen13\textfont2=4.5pt

6. Double-Page Output. In order to get a Plain TeX document to print out with two pages side by side on a normal size piece of paper I use the macros below, together with changes to the printer settings which reduce the printout to about 75 per cent and rotate it 90 degrees. The same procedure works when "printing" as a postscript file.

\hoffset-.5truein
\voffset.3truein
\newdimen\fullhsize
\fullhsize=11.5in
\def\fullline{\hbox to\fullhsize}
\def\pagebody{\vbox to\vsize{\boxmaxdepth=\maxdepth \makeheadline\pagecontents}}
\let\lr=L \newbox\leftcolumn
\output={\if L\lr
\global\setbox\leftcolumn=\columnbox \global\let\lr=R
\else \doubleformat \global\let\lr=L\fi
\ifnum\outputpenalty>-20000 \else\dosupereject\fi}
\def\doubleformat{\shipout\vbox{
\fullline{\box\leftcolumn\advancepageno\hfil\columnbox\advancepageno} } }
\def\columnbox{\leftline{\pagebody}}
\supereject
\if R\lr \null\vfill\eject\fi

The values of \hoffset and \voffset should be adjusted to fit your situation.