% \CheckSum{169} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % % % \changes{1.0} {1994/05/02}{initial version} % \changes{1.1} {1994/05/06}{corrected wording of example quotations} % \changes{1.1a}{1994/05/10}{revised documentation} % \changes{1.1b}{1994/05/12}{revised documentation} % \changes{1.1c}{1994/05/16}{fixed typo in example quotations} % \changes{1.1d}{1994/05/18}{revised documentation} % \changes{1.2} {1994/05/21}{clean-up for public release} % % % \title{The \texttt{ssqquote} Package for \LaTeXe} % % \author{Copyright (C) 1994 by Ulrik Vieth} % % \maketitle % ^^A\tableofcontents % % \def\file#1{\texttt{#1}} % \def\book#1{\textit{#1}} % \def\Lcs#1{\texttt{\bslash{}#1}} % % \def\NFSS{\textsf{NFSS}\@} % \def\DOCSTRIP{\textsc{Docstrip}\@} % % % \section{Introduction} % % This contributed package for \LaTeXe{} provides the necessary % font declarations needed to access the \file{cmssq} font family, % i.e.~Computer Modern Sans Serif Quotation Style, % in terms of \NFSS.^^A % \footnote{Throughout this document, the term \NFSS{} should be % understood to refer to release~2 of \NFSS, i.e.~the release % that's part of \LaTeXe{} and that's intended to become part % of \LaTeX3 in the future.} % It also provides a little example package file that shows how % to define some appropriate font changing commands. % % \DescribeMacro{\ssqfamily} % \DescribeMacro{\textssq} % Once you have installed the font definition files % \file{OT1cmssq.fd} and \file{T1cmssq.fd} provided here, you % can use low-level \NFSS{} commands to access the \file{cmssq} % font family in your documents, even if you do not plan to use % the example package \file{ssqquote.sty}. Apart from defining % the font changing commands |\ssqfamily| and |\textssq|, that % package file also provides an example application that uses % the \file{cmssq} font family. % % \DescribeEnv{chapterquotes} % The |chapterquotes| environment provided as an example is based % on ideas used in the |\endchapter| macro of the \file{manmac} % format that was used by DEK in the \TeX{} and \MF{} manuals. % Its purpose is to typeset a few nice quotations at the end % of chapters using the \file{cmssq} font family in a smaller % typesize than the regular text. While keeping the distinctive % ragged-left formatting from the |\endchapter| macro, we have % tried to make the |chapterquotes| environment more flexible, % optionally allowing quotations to be placed at the top of the % next page if there isn't enough room left at the bottom of the % current page. % % \StopEventually{} % % % \section{The \DOCSTRIP{} modules} % % The following \DOCSTRIP{} modules are used in this package: % \begin{quote} % \begin{tabular}{ll} % |driver| & produces the documentation driver\\ % |package| & produces the example package file\\ % |OT1cmssq| & produces the font definition file for the OT1 encoding\\ % |T1cmssq| & produces the font definition file for the T1 encoding % \end{tabular} % \end{quote} % % \noindent % Except for the documentation driver every module intended % for \TeX{} should contain the following information for % identification purposes. % \begin{macrocode} %<*package|OT1cmssq|T1cmssq> \def\filename{ssqquote.dtx} \def\filedate{1994/05/21} \def\fileversion{1.2} % % \end{macrocode} % % % \section[The font defintion files: % \file{OT1cmssq.fd} and \file{T1cmssq.fd}] % {The font defintion files:\\ % \file{OT1cmssq.fd} and \file{T1cmssq.fd}} % % Following the tradition of the standard \LaTeXe{} distribution, % we begin by identifying the latest version of these files in % the \file{log} file. % \begin{macrocode} %<*OT1cmssq|T1cmssq> \wlog{Fontdef\space file\space produced\space from\string:\space \string`ssqquote.dtx\string'\space \fileversion\space \string<\filedate\string>\space \string(Ulrik Vieth\string)} % % \end{macrocode} % % \subsection{The font definition file for the OT1 encoding} % % First, we will consider the font definition file for the old % encoding scheme~OT1 of the original Computer Modern Fonts % by DEK. We start by declaring the font family \file{cmssq}. % \begin{macrocode} %<*OT1cmssq> \DeclareFontFamily{OT1}{cmssq}{} % \end{macrocode} % % The fonts \file{cmssq} and \file{cmssqi} are only available % in 8-point design size. Therefore, we will make them available % only in rather unusual sizes based on magsteps of~8\,pt. However, % in the typical application of typesetting quotations in this % font family, you wouldn't want to use large magsteps anyway, % thus you needn't really worry about that. If you simply select % |\footnotesize|, an appropriate size for quotations will be % substituted automatically within the margin of |\fontsubfuzz| % allowed by~\NFSS. % % Since the `i' in \file{cmssqi} stands for `inclined' rather % than `italics', we allocate it to |\slshape| and add a silent % font substitution for |\itshape|. There are no other font % shapes currently available in the \file{cmssq} family, and % it is very unlikely that there will be any in the future. % \begin{macrocode} \DeclareFontShape{OT1}{cmssq}{m}{n}{ <8> <8.76> <9.6> <11.52> <13.82> <16.59> <19.91> cmssq8 }{} \DeclareFontShape{OT1}{cmssq}{m}{sl}{ <8> <8.76> <9.6> <11.52> <13.82> <16.59> <19.91> cmssqi8 }{} \DeclareFontShape{OT1}{cmssq}{m}{it}{ <-> ssub * cmssq/m/sl }{} % % \end{macrocode} % % \subsection{The font definition file for the T1 encoding} % % Next, here are the corresponding font shape declarations for % the new encoding scheme~T1 used in the DC~fonts. For some % unknown reason, Sans Serif Quotation Style was not supported % in the original version~1.0 of the DC~fonts. Support for this % style was added only in version~1.1, which was completed in % March~1992 but not released on CTAN before February~1994. % However, the fonts \file{dcssq} and \file{dcssqi} are still % commented out in the configuration file \file{dcstdedt.tex}, % thus you will not have them if you simply installed the % DC~fonts using the standard setup, but you can create them % if you like. In any case we will provide the font defintion % file here. % \begin{macrocode} %<*T1cmssq> \DeclareFontFamily{T1}{cmssq}{} % \end{macrocode} % % In the T1 encoding, we will use the same magsteps as in the OT1 % encoding. Using the scaling mechanism built into the DC fonts, % it would be possible to create different design sizes as well, % but providing a different choice of sizes in the OT1 and T1 % encodings would only cause confusion. Therefore, we prefer to % live with an unusual range of sizes in both cases. % \begin{macrocode} \DeclareFontShape{T1}{cmssq}{m}{n}{ <8> <8.76> <9.6> <11.52> <13.82> <16.59> <19.91> dcssq8 }{} \DeclareFontShape{T1}{cmssq}{m}{sl}{ <8> <8.76> <9.6> <11.52> <13.82> <16.59> <19.91> dcssqi8 }{} \DeclareFontShape{T1}{cmssq}{m}{it}{ <-> ssub * cmssq/m/sl }{} % % \end{macrocode} % % % \section{The package file: \file{ssqquote.sty}} % % After having discussed the font definition files, we now turn % to the example package that shows how to access the \file{cmssq} % font family using low-level \NFSS{} commands. % % As usual, we begin by identifying the package and its current % version. % \begin{macrocode} %<*package> \ProvidesPackage{ssqquote}[\filedate\space\fileversion\space Contributed LaTeX2e package] \typeout{Package: `ssqquote' \fileversion\space <\filedate> (Ulrik Vieth)} % \end{macrocode} % % \subsection{Accessing the \file{cmssq} font family in \NFSS} % % \begin{macro}{\ssqfamily} % First, we define the declarative font changing command |\ssqfamily|. % This is accomplished using the low-level \NFSS{} commands % |\fontencoding| and |\fontfamily| followed by |\selectfont|. % We assume that |\encodingdefault| is set to either OT1 or~T1. % Otherwise, you'll probably get an \NFSS{} error message. % \begin{macrocode} \def\ssqfamily{% \fontencoding{\encodingdefault}\fontfamily{cmssq}\selectfont} % \end{macrocode} % \end{macro} % % \begin{macro}{\textssq} % Next, we define a font changing command with one argument. Since % it is very unlikely that the \file{cmssq} font will be used in % math mode, we do not attempt to make a robust version, instead % the |\textssq| macro defined here simply selects |\ssqfamily| % within a group. However, we will protect it, so that it can be % used within moving arguments without problems. % \begin{macrocode} \def\textssq{\protect\ptextssq} \def\ptextssq#1{{\ssqfamily #1}} % \end{macrocode} % \end{macro} % % \subsection{An example application: % The \texttt{chapterquotes} environment} % % As an example application, we will define a |chapterquotes| % environment that is based on ideas used in the |\endchapter| % macro of the \file{manmac} format that was used in the \TeX{} % and \MF{} manuals. We have tried to make it more \LaTeX-like % and we have added some switches and parameters to customize its % behaviour. The purpose of this environment is to typeset a few % nice quotations at the end of chapters using the \file{cmssq} % font family. % % \begin{macro}{\ifbottomquotes} % We begin by defining a |\newif| that controls whether quotations % should always be placed at the bottom or if they are allowed to % appear at the top of the next page in case there isn't enough room % at the bottom of the current page. By default, |\ifbottomquotes| % is set to false. % \begin{macrocode} \newif\ifbottomquotes \bottomquotesfalse % \end{macrocode} % \end{macro} % % \begin{macro}{\prechapterquotes} % Next, we allocate a |\newskip| that controls the minimum amount % of space that should be left over on the current page when % the |chapterquotes| environment is called. More precisely, % |\prechapterquotes| is the amount of stretchable glue inserted % in an attempt to eject the current page before starting to % typeset the quotations. The default value of |\prechapterquotes| % is |10\baselineskip| in |\footnotesize|. If you have longer % quotations, you may wish to enlarge this parameter.^^A % \footnote{By the way, the name of the \Lcs{prechapterquotes} % parameter was inspired by the \Lcs{premulticols} parameter % in Frank Mittelbach's \file{multicol} package.} % \begin{macrocode} \newskip\prechapterquotes {\footnotesize \global\prechapterquotes=10\baselineskip\relax} % \end{macrocode} % \end{macro} % % \begin{environment}{chapterquotes} % Now, we are ready to discuss the |chapterquotes| environment % itself. We begin by leaving horizontal mode if we are not % already in vertical mode at the time when |chapterquotes| % is called. % \begin{macrocode} \newenvironment{chapterquotes}{% \ifvmode \else \unskip\par \fi % \end{macrocode} % % Next, we try to eject the current page by inserting an amount % of stretchable glue controlled by |\prechapterquotes|, followed % by the negative penalty |\@secpenalty|, followed by negative % stretchable glue to compensate the positive stretchable glue % in case the negative penalty fails to eject the page. If a % page break occurs, the last glue will disappear at the top % of the page. % \begin{macrocode} \vskip\z@\@plus+\prechapterquotes \penalty\@secpenalty \vskip\z@\@plus-\prechapterquotes % \end{macrocode} % % After these preliminaries we come to the central part of the % |chapterquotes| environment. If quotations are allowed only % at the bottom of the page, we insert an empty hbox to prevent % glue from disappearing at the top, followed by |\vfill|. % % We disallow floats at the bottom by setting |\@botnum| to zero. % In case quotations are allowed at the top as well, we also set % |\@topnum| to zero because we do not know where the quotations % will end up. If this causes problems with floats that are left % over at the end of the chapter, inserting a |\clearpage| before % the |chapterquotes| environment might help. % \begin{macrocode} \ifbottomquotes \null \fi \vfill \global\@botnum\z@ \ifbottomquotes \else \global\@topnum\z@ \fi % \end{macrocode} % % Now, we start a group to keep changes local. We switch to % |\footnotesize| and select the \file{cmssq} font family % using the declarative font changing command |\ssqfamily|. % \begin{macrocode} \begingroup \footnotesize \ssqfamily % \end{macrocode} % % We redefine |\bigskipskipamount|, |\medskipamount| and % |\smallskipamount| using multiples of |\baselineskip| % in |\footnotesize|. We will use these paramters for the % spacing in between multiple quotations. % \begin{macrocode} \bigskipamount=1.0\baselineskip \medskipamount=0.5\baselineskip \smallskipamount=0.25\baselineskip % \end{macrocode} % % Within the group started above, we set |\interlinepenalty| % to~10000 to disallow page breaks between quotations. Next, % we set up various parameters for ragged-left typesetting. % \begin{macrocode} \interlinepenalty\@M \parindent\z@ \parskip\z@ \parfillskip\z@ \leftskip\z@\@plus\linewidth \rightskip\z@ % \end{macrocode} % % We redefine |\par| in order to insert the italics correction % automatically at the end of lines and activate |\obeylines|, % which means that |\par| is added automatically at the end of % every input line. In \LaTeX, we can use |\@@par| to refer to % the original meaning of |\par|. Alternatively, we could use % |\endgraf| here instead. % \begin{macrocode} \def\par{\ifhmode\/\@@par\fi} \obeylines % \end{macrocode} % \end{environment} % % \begin{macro}{\nextquote} % Individual quotations should start with |\nextquote|. This will % insert a |\bigskip| and switch to |\slshape| using the \file{cmssq} % family selected earlier at the beginning of the environment. % Users might regard |\nextquote| as a special case of |\item| % that is only available within the |chapterquotes| environment. % However, technically speaking, |\item| is quite different from % |\nextquote| and much more complicated. % \begin{macrocode} \def\nextquote{\bigskip\slshape} % \end{macrocode} % \end{macro} % % \begin{macro}{\author} % \begin{macro}{\title} % The source of a quotation can be formatted using the macros % |\author| and |\title|. The |\author| macro expects two % arguments which will be typeset in upright shape. The first % one is meant to be the name of the author or the work that % is quoted, while the second one (enclosed in parantheses) is % meant to be the date of the quotation. Within the arguments % of the |\author| macro, the |\title| macro can be used to % typeset the title of the quoted work in slanted shape. We use % |\textsl| here, i.e.~the font switching macro with one argument, % because this will automatically insert the italics correction % if necessary. % \begin{macrocode} \def\author##1(##2){\medskip\upshape\noindent --- \ignorespaces ##1 \unskip\thinspace (##2)\par} \def\title##1{\textsl{##1}} % \end{macrocode} % \end{macro} % \end{macro} % % At the end of the |chapterquotes| environment, there is not much % left to do. We simply close the group started at the beginning % of the environment to restore the paragraphing parameters. % In case quotations are placed at the top of the page, we insert % |\vfil| to avoid an underfull page. If quotations are placed at % the bottom, the |\vfill| at the top is infinitely larger than % the |\vfil| at the bottom, thus the last |\vfil| won't have any % effect. The very last thing to do is to call a |\pagebreak|. % \begin{macrocode} }{% \endgroup \vfil \pagebreak} % % \end{macrocode} % % % \section{The documentation driver file} % % We have our own document class to format the \LaTeXe{} % documentation. We also use the \file{mflogo} package % that defines the \MF{} logo in terms of a \NFSS{} font % family and the \file{ssqquote} package to typeset some % example quotations at the end of this file. % \begin{macrocode} %<*driver> \documentclass{ltxdoc} \usepackage{mflogo} \usepackage{ssqquote} % \end{macrocode} % We do not need an index. % \begin{macrocode} \DisableCrossrefs % \end{macrocode} % We do want the full details. % \begin{macrocode} \begin{document} \DocInput{ssqquote.dtx} % \PrintIndex % \PrintChanges \end{document} % % \end{macrocode} % % % \section{An example of the \texttt{chapterquotes} environment} % % Finally, here's an example of the |chapterquotes| environment % and how it was specified. Note that line breaks in the input % file are obeyed, thus when long input lines have to be broken % across lines, the end of the line has to be commented out. % If a quotation consists of multiple paragraphs, |\smallskip| % can be used to insert space in between them. As explained % earlier, |\medskip| is inserted by the |\author| macro and % |\bigskip| is inserted by |\nextquote|. % \begin{macrocode} %<*example> \begin{chapterquotes} \nextquote I've finally learned what `backwards compatibility' means: It means we've got to keep all our old mistakes. \author RAINER SCH\"OPF, \title{\LaTeXe{} Announcement} (TUG `1993) \nextquote \emph{Compatibility:} \LaTeXe{} will, as far as possible, adhere to the following principles: \smallskip 1. Unmodified version 2.09 document files will produce the same output with \LaTeXe{} as with version 2.09. \smallskip 2. All new features will conform to the conventions of version 2.09 \dots \author \LaTeX3 PROJECT, % \title{\LaTeXe{} -- A new version of \LaTeX{}} (TTN~2;4, 1993) \end{chapterquotes} % % \end{macrocode} % % \begin{chapterquotes} % \nextquote % I've finally learned what `backwards compatibility' means: % It means we've got to keep all our old mistakes. % % \author RAINER SCH\"OPF, \title{\LaTeXe{} Announcement} (TUG `1993) % % \nextquote % \emph{Compatibility:} \LaTeXe{} will, as far as possible, % adhere to the following principles: % \smallskip % 1. Unmodified version 2.09 document files will produce % the same output with \LaTeXe{} as with version 2.09. % \smallskip % 2. All new features will conform to the conventions % of version 2.09 \dots % % \author \LaTeX3 PROJECT, ^^A % \title{\LaTeXe{} -- A new version of \LaTeX{}} (TTN~2;4, 1993) % % \nextquote % \emph{I didn't change anything!} An aggrieved cry often heard % as bugs manifest during a regression test \dots % \smallskip % This is also heard from applications programmers % trying to blame an obvious applications problem % on an unrelated systems software change \dots % \smallskip % Usually, their statement is found to be false. % Upon close questioning, they will admit % some major restructuring of the program % that shouldn't have broken anything, in their opinion, % but which hosed the code completely. % % \author THE NEW HACKER'S DICTIONARY (1993) % \end{chapterquotes} % % \Finale % \endinput