%% @texfile{ %% filename = "tbcont.def", %% version = "see below \fileversion" %% date = "see below \filedate", %% filetype = "Plain TeX macros for TUGboat tables of contents", %% copyright = "Copyright 1993-2016 TeX Users Group. %% Unlimited copying and redistribution of this file %% are permitted as long as this file is not %% modified. Modifications (and redistribution of %% modified versions) are also permitted, but only if %% the resulting file is renamed." %% author = "TeX Users Group", %% email = "tugboat@tug.org", %% codetable = "ISO/ASCII", %% keywords = "tex users group, tugboat, tables of contents", %% abstract = "This file contains the plain-based macros %% for preparing tables of contents for TUGboat, %% the Communications of the TeX Users Group.", %% } %% %% ********************************************************* %% %% TeXing with this file also requires the following files: %% TUGBOAT.STY (version 1.10+) %% TUGBOAT.CMN (version 1.08+) %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TBCONT.DEF \def\fileversion{v1.10} \def\filedate{2016/11/22} \input tugboat.sty % Make @ signs act like letters, for use in internal control sequences. \makeatletter % Define additional fonts. \StretchyNinePointSpacing % % Reset -- this font defaults to cmssbx10 in TUGBOT.STY. % \font\manual=manfnt % font used for the METAFONT logo \font\manualsl=logosl10 \font\twelverm=cmr10 scaled \magstep1 \font\twelvebf=cmbx10 scaled \magstep1 \font\twelvesl=cmsl10 scaled \magstep1 \font\twelveit=cmti10 scaled \magstep1 \let\twelvei=\twelveit \font\twelvesy=cmsy10 scaled \magstep1 \font\twelvett=cmtt10 scaled \magstep1 \def\twelvepoint{\baselineskip 14pt \def\rm{\fam0\twelverm}% \textfont0=\twelverm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm \textfont1=\twelvei \scriptfont1=\eighti \scriptscriptfont1=\sixi \textfont2=\twelvesy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \def\it{\fam\itfam\twelveit}% \textfont\itfam=\twelveit \def\sl{\fam\slfam\twelvesl}% \textfont\slfam=\twelvesl \def\bf{\fam\bffam\twelvebf}% \textfont\bffam=\twelvebf \scriptfont\bffam=\eightbf \scriptscriptfont\bffam=\sixbf \def\smc{\tenrm}% \def\tt{\twelvett}% \rm } % \font\elevenrm=cmr10 scaled \magstephalf \let\eleveni=\teni \let\elevensy=\tensy \font\fourteenrm=cmr10 scaled \magstep2 \font\fourteenit=cmti10 scaled \magstep2 \let\fourteeni=\fourteenit \let\fourteensy=\tensy \def\fourteenpoint{\baselineskip 16pt \def\rm{\fam0\fourteenrm}% \textfont0=\fourteenrm \scriptfont0=\elevenrm \scriptscriptfont0=\sevenrm \textfont1=\fourteenit \scriptfont1=\eleveni \scriptscriptfont1=\seveni \textfont2=\fourteensy \scriptfont2=\elevensy \scriptscriptfont2=\sevensy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \def\smc{\elevenrm}% \rm } \font\sixteenrm=cmr10 scaled \magstep3 \font\sixteenbf=cmbx10 scaled \magstep3 \def\bigfont{\def\rm{\sixteenrm}\def\smc{\twelverm}% \def\bf{\sixteenbf \def\smc{\twelvebf}}\rm } \def\comment#1\endcomment{} % AMS-TeX not loaded % Increase page length to accommodate long contents pages. \normalcollgt=60pc \collgt=\normalcollgt \rheadlgt=0pt \def\runhead{\hrule height 0pt depth 0pt width 10pt \vskip-2.5pc } \rfootlgt=0pt \def\runfoot{} \resetpagelgt \onecol % % control sequences for contents page \newskip\normalsecskip \newskip\normalsecskipb \newskip\secskipa \newskip\secskipb \normalsecskip=5pt \normalsecskipb=1pt \secskipa=\normalsecskip \secskipb=\normalsecskipb \newdimen\secht \newdimen\secwd \newif\ifnewsec \newif\ifFirstR@nin \FirstR@nintrue \newbox\SecBox \def\sec #1<{\def\\{\unskip\cr}% \setbox\SecBox=\vbox to \secht {\bf\halign{\hfil ##\cr\strut#1\cr}\vss}% \newsectrue \FirstR@nintrue } \def\secsec #1\\#2<{\sec #1<% \subsecnn {}\\#2<} \newdimen\@secwd \@secwd=1.5in \newdimen\@hangindwd % 2in \newdimen\hangindif \hangindif=.3in \@hangindwd=\@secwd \advance\@hangindwd by 2\hangindif \newdimen\digitwidth \def\setdigitwidth #1{\setbox\TestBox=\hbox{#1}% \global\digitwidth=\wd\TestBox } \setdigitwidth{99} % Permit page ranges separated by hyphen (to support Nelson Beebe's % citation builder), but print only the starting page number. \def\strippageno#1-#2<{#1\unskip} \def\newsubs@c#1#2{% \ifnewsec \vskip\secskipa \newsecfalse \else \vskip\secskipb \fi \noindent \hangindent=\@hangindwd \leavevmode \hbox to \@secwd{\hss\box\SecBox \quad \hbox to \digitwidth{\hss\strippageno#1-<}\quad}% {\ignorespaces #2\unskip}} % If either author or title absent, omit / separator. % If this is a proceedings issue, reverse order of author / title. \def\subsec #1\\#2\\#3<{\par \TestCount=0 % case to set / \setbox\TestBox=\hbox{#1\unskip}% \ifdim\wd\TestBox < .2em \TestCount=1 % case to omit / \else \setbox\TestBox=\hbox{#2\unskip}% \ifdim\wd\TestBox < .2em \TestCount=1 \fi \fi \newsubs@c{\ignorespaces#3}{\ifprocissue#1\else\ignorespaces#2\fi}% \ifcase\TestCount \hskip.5em\raise.3ex\hbox{\sevenrm/}\penalty-10\hskip.4em\fi {\sl\let\acro\slacro \let\MF\slMF \let\MP\slMP \ifprocissue\ignorespaces#2\else#1\fi\unskip}\endgraf} % \def\subseca #1\\#2<{\subsec #1\\#2\\ <} \def\subsecnn #1\\#2<{\subsec \ifprocissue#1\fi\\% \ifprocissue\else#1\fi\\#2<} \def\subseci #1\\#2<{\subsecnn \hbox to \hangindif{}#1\\#2<} \def\subsecii #1\\#2<{\subsecnn \hbox to 2\hangindif{}#1\\#2<} \newdimen\subsecchang \subsecchang=\@hangindwd \advance\subsecchang by-\hangindif \def\subsecc #1<{\noindent \kern\subsecchang \hangindent=\subsecchang #1\unskip\endgraf } \def\subsite #1<{\ifdim\wd\SecBox > .2em \subsec {}\\ \\ <% \else \setbox\SecBox=\hbox{\eightrm$\cdot$\kern.25em#1}\fi } \def\subsub #1<{\subsecnn #1\\ <} \def\subquery #1\\#2\\#3<{% \ifFirstR@nin \FirstR@ninfalse \newsubs@c{#3}{#2}% \hangindent=\@secwd \else \unskip ;\penalty-50\hskip.6em \ignorespaces #2\unskip \fi \setbox\TestBox=\hbox{#1\unskip}% \ifdim\wd\TestBox > .2em \penalty-10\ ({\sl #1\/})\fi } \def\and{\unskip{\rm\penalty 20\hskip.4em and\kern.06em}~} \def\SetupContents{\onecol % % page size may be reset in tbcv*.tex \raggedstretch=.5\colwd % usual 5em isn't enough here \raggedright \hyphenpenalty=10000 % no hyphenation, none at all \exhyphenpenalty=10000 \uchyph=0 } \SetupContents % To support cumulative contents, initialize size-specific % features after type size has been chosen. \def\looset@padjust{\topglue 1pc \relax} \def\loosetopadjust{\let\t@padjust=\looset@padjust} \def\tighttopadjust{\def\t@padjust{\relax\loosetopadjust}} \let\t@padjust=\looset@padjust % allow additional information for special issues \newif\ifprocissue \let\postissno\empty %% 2002/10/21 added "date slashes" to handle double issues \def\dateslash{/} \def\TUBheaddateslash{\raise.25ex\hbox{\ninebf/}} \def\TUBhead #1, #2, #3<{\setbox\TestBox=\hbox{()}\secht=\ht\TestBox \sec \null <\newsecfalse % initialize section box \procissuefalse \t@padjust \subsub{\bigfont\bf TUG{\smc BOAT}}<% \vskip 10pt \begingroup \twelverm\baselineskip=15pt \subsub {\let\dateslash=\TUBheaddateslash % \twelverm\baselineskip=15pt Volume #1, Number #2% Volume #1, Number #2% \hskip.5em\raise.25ex\hbox{\ninebf/}\hskip.4em #3}<% \ifx\postissno\empty \global\procissuefalse \else \subsub \postissno<% \global\procissuetrue \fi \endgroup \vskip 20pt } % Restore @ to normal status. \makeatother \addto\tenpoint{\def\slSMC{\ninesl}} \addto\ninepoint{\def\slSMC{\eightsl}} \def\slacro#1{{\slSMC #1}\spacefactor1000 } \def\slMF{{\manualsl META}\-{\manualsl FONT}\spacefactor1000 } \def\slMP{{\manualsl META}\-{\manualsl POST}\spacefactor1000 } % This is "camera copy". \PrelimDraftfalse \pageno=1 % Allow overlong lines. \NoBlackBoxes \endinput