diff options
Diffstat (limited to 'Master/texmf-dist/source/plain/pdcmac/pdcfsel.dtx')
-rw-r--r-- | Master/texmf-dist/source/plain/pdcmac/pdcfsel.dtx | 607 |
1 files changed, 0 insertions, 607 deletions
diff --git a/Master/texmf-dist/source/plain/pdcmac/pdcfsel.dtx b/Master/texmf-dist/source/plain/pdcmac/pdcfsel.dtx deleted file mode 100644 index a7010f20a09..00000000000 --- a/Master/texmf-dist/source/plain/pdcmac/pdcfsel.dtx +++ /dev/null @@ -1,607 +0,0 @@ -% pdcfsel.dtx -- documentation & source for pdcfsel.tex -*-tex-*- - -%%%@TeX-document-file { -%%% title = "PDCFSEL, a font selection scheme for TeX", -%%% filename = "$texmf/doc/plain/pdcmac/pdcfsel.dtx", -%%% version = "$Revision: 3.5 $", -%%% package = "pdcmac 1.0", -%%% date = "$Date: 1995/03/28 19:05:54 $", -%%% author = "P. Damian Cugley", -%%% email = "damian.cugley@comlab.ox.ac.uk", -%%% address = "Oxford University Computing Laboratory," -%%% Parks Road, Oxford OX1 3QD, UK", -%%% abstract = "This document describes and defines pdcfsel.tex, -%%% a file of definitions for managing font selection in -%%% documents based on the plain TeX macros. -%%% Running plain TeX on this file produces both the -%%% definitions file and the printed documentation.", -%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley", -%%% copying = "This program is free software; you can redistribute -%%% it and/or modify it under the terms of the GNU -%%% General Public License as published by the Free -%%% Software Foundation; either version 2 of the License, -%%% or (at your option) any later version.", -%%% notice = "This program is distributed in the hope that it will -%%% be useful, but WITHOUT ANY WARRANTY; without even the -%%% implied warranty of MERCHANTABILITY or FITNESS FOR A -%%% PARTICULAR PURPOSE. See the GNU General Public -%%% License for more details.", -%%% notice = "You should have received a copy of the GNU General -%%% Public License along with this program; if not, write -%%% to the Free Software Foundation, Inc., 675 Mass Ave, -%%% Cambridge, MA 02139, USA.", -%%% codetable = "USASCII", -%%% dependencies = "pdccode.tex" -%%%} - -%{{{ pdcfsel -%{{{ premable - -\relax -\input pdccode - -\document -\rcs$Id: pdcfsel.dtx,v 3.5 1995/03/28 19:05:54 pdc Exp $\endrcs - -\codefile{pdcfsel.tex} - -%}}} premable -%{{{ intro - -\author{P. Damian Cugley} -\title{PDCFSEL, a font-selection scheme for \TeX} -\section{Introduction} - - This document describes PDCFSEL, a file of font selection macros - designed to be used with documents using the plain \TeX\ format - (rather than \LaTeX, for example). - - The PDCFSEL macros perform a similar function to the so-called - New Font Selection Scheme~2 (used in \LaTeX~2e). PDCFSEL uses a - simpler model of font selection, and so is a smaller - package---about 110~lines of code---which is just as well as a - copy of it will probably need to be included with documents - using it. The description of which fonts are used in a document - can be relatively compact, despite not using any special - database files. - -\subsec{Organizing fonts into fontsets} - - We can arrange the fonts used in an imaginary \TeX\ document in - a table like so (with an asterisk marking fonts that have to be - scaled to fit): - $$\def\*{{\rm*}} -\vbox{\halign{\strut#\hfil&\quad\vrule#&&\quad\tt#\hfil\cr - && |\rm|&|\it|&|\bf|&|\bi|&|\mi|&|\sy|\cr -\noalign{\nointerlineskip}\omit& height \jot\cr -\noalign{\hrule}\omit& height 1\jot\cr -\noalign{\nointerlineskip}% - body text&& cmr10& cmti10& cmbx10& cmbxti10& cmmi10& cmsy10\cr - footnotes&& cmr8& cmti8& cmbx8& cmbxti10\*& cmmi8& cmsy8\cr - script&& cmr7& cmti7& cmbx7& cmbxti10\*& cmmi7& cmsy7\cr - scriptscript&& cmr5& cmti7\*& cmbx5& cmbxti10\*& cmmi5& cmsy5\cr -\noalign{\nointerlineskip}\omit& height\jot depth\jot&\multispan6\dotfill\cr -\noalign{\nointerlineskip}% - heading&& cmss12& cmssi12& -&-&-&-\cr - subheading&& cmss10& cmssi10& -&-&-&-\cr -}} - $$ - The column headings are {\it font nicknames}. These nicknames - are used as described in the {\it\TeX book} to switch between - fonts in the same row. Each has a corresponding {\it fam} - used in maths mode, with symbolic names like |\itfam| and - |\bffam| (we define $\hbox{|\rmfam|}=0 $ for consistency). - I~have added nicknames |\mi| and |\sy| for maths italic and - maths symbol respectively. - - Each row of the table is a {\it fontset}. Plain \TeX\ defines a - single fontset (which is like the `body text' row of this - table); in Appendix~E, Knuth discusses formats that switch - between different fontsets with macros like |\ninepoint| and - |\eightpoint|. \LaTeX~2.09 uses many fontsets, called - |\normalsize|, |\large|, and so on. (NFSS~2 uses a more complex - system, where size, weight, and slant may be changed - independently of each other.) - - In this table, subheadings and body text have different fontsets - in the above, even though the fonts are the same size. Also, - there are no |\sf| fonts; the headings are printed in sanserif - by using a fontset with |\rm| mapped on to a sanserif font. - This is more logical and flexible than the \LaTeX\ approach. - - We can call font families which allow this table to work tidily - `regular', and families (like Computer Modern) that require - exceptions `irregular'. The above table has one exception - (|\it| in scriptscript must use a scaled font); the CM Bold - Extended Text Italic fonts can be described as regular if we - think of the `body text' entry as being `|cmbxti10 at 10pt|', so - that the fonts in that column are scaled fonts without - exception. To make font specification compact, we want to take - advantage of regular families as much as possible, while not - making it difficult to include exceptions. - -\subsec{Introduction to using PCDFSEL} - - PDCFSEL uses no databases of font families, and loads no fonts - by default. This makes it more flexible, but also requires - document designers to write a `mini-database' of those fonts - used in the document. The above scheme might be defined as - follows: -\smallskip -\halign{\indent#\hfil\cr - |\input pdcfsel|\cr -\noalign{\smallbreak}% - |\newfam\bifam|\cr -\noalign{\smallbreak}% - |\def\texttemplate{%|\cr - | \m{rm}{cmr}\m{it}{cmti}\m{bf}{cmbx}\@\m{bi}{cmbxti10}%|\cr - | \M{mi}{cmmi}\M{sy}{cmsy}%|\cr - |}|\cr - |\loadfont\scriptscriptit{cmti7 at 5pt }|\cr - |\xfontset{scriptscript}\texttemplate{5}|\cr - |\xfontset{script}\texttemplate{7}|\cr - |\fontset{note}\texttemplate{8}{10pt}{scriptscript}{scriptscript}|\cr - |\fontset{body}\texttemplate{10}{12pt}{script}{scriptscript}|\cr -\noalign{\smallbreak}% - |\def\headingtemplate{%|\cr - | \f{rm}{cmss}\f{it}{cmssi}%|\cr - |}|\cr - |\fontset{subheading}\headingtemplate{10}{12pt}{subheading}{subheading}|\cr - |\fontset{heading}\headingtemplate{12}{14pt}{subheading}{subheading}|\cr -\noalign{\smallbreak}% - |\bodyfonts|\cr -} -\smallbreak -\noindent - This defines commands |\bodyfonts|, |\notefonts|, - |\headingfonts| and |\subheadingfonts| which switch between - fontsets. (The {\it script} and {\it scriptscript} fontsets, - which are defined with |\xfontset|, are used only in maths - mode and don't need `-|fonts|' commands.) These -|fonts| - commands are not usually used directly in documents; - |\notefonts| will be used in some |\footnote| command, - |\headingfonts| in some heading-generating command, and so on. - - Changes of fontset are accompanied by changes in parameters like - |\baselineskip| and pseudo-parameters like |\smallskipamount|, - and give definitions to the {\it maths font tables} - |\textfont\rmfam|, \dots, |\scriptscriptfont\syfam| (for those - fonts that will be used in maths mode). - - We want font nickname commands to be efficient, because they - are expected to be more common than changes between rows in - the table. In this implementation, after an invocation of - |\bodyfonts|, the macro |\rm| expands to exactly `|\fam\rmfam - \bodyrm|'. - -\subsec{How the rest of this document is organized} - - The remainder of this document is a description of all of - |pdcfsel.tex|, including more details of how the commands it - defines are used. - - Running this document (|pdcfsel.dtx|) through plain \TeX\ - creates the definitions file (|pdcfsel.tex|) in addition to - the usual |dvi| and |log| files. This way the macros and - their documentation may be kept together in one file. The - definition lines are numbered. - - The definitions start with macros for loading individual - fonts, followed by the macros used to group fonts into - fontsets. -%}}} intro -%{{{ getting started - -\section{Getting started} - -\subsec{File identification} - - We start with some comments indentifying the file. -\code - |% pdcfsel.tex -- macros for loading fonts -*-tex-*- - | - |%%%@TeX-document-file { - |%%% title = "PDC Font Selection Scheme", - |%%% filename = "$texmf/tex/plain/pdcmac/pdcfsel.tex", - \|\%\%\% version \space\space\space= "\fileversion", - \|\%\%\% Date \space\space\space\space\space\space= "\filedate", - \|\%\%\% creator\space\space\space\space= "\filename", - |%%% package = "pdcmac 1.0", - |%%% author = "P. Damian Cugley", - |%%% email = "damian.cugley@comlab.ox.ac.uk", - |%%% address = "Oxford University Computing Laboratory," - |%%% Parks Road, Oxford OX1 3QD, UK", - |%%% abstract = "A file of definitions for managing font - |%%% selection in documents based on the plain - |%%% TeX macros. - |%%% This file was generated by running - |%%% plain TeX on pdcfsel.dtx.", - |%%% dependencies = "" - |%%%} - | - \|\string\message\{\fileversion\space\string<% - \fileauthor\space\filedate\string>\} -\endcode - -\subsec{Private names} - - Macros internal to FSEL all have names starting `|\FSEL|'. - -\subsec{Macros for edefs} - - These save typing |\expandafter| a lot. The expression - `|\expcs|\<token>\arg{\<tokens>}', creates a csname from - \<tokens> and applies \<token> to the result. In the body of an - |\edef|, The expression `|\noexpcs|\arg{\<tokens>}' converts - \<tokens> to a csname without expanding the result. -\code - |\def\expcs#1#2{\expandafter#1\csname#2\endcsname} - |\def\noexpcs{\expcs\noexpand} -\endcode -%}}} getting started -%{{{ selecting demand-loading - -\section{Selecting auto-loading mode} - - The flag |\ifFSELautoload| is true, fonts are auto-loaded when - they first used instead of all at the start. This is useful - when not all the fonts described by the fontsets will be - needed. The flag is set with the user command - |\autoloadfonts|. - - When demand-loading, the fonts used - are written to a file named after the document with a |.fnt| - suffix. This checklist might - be used to decide which fonts need to be sent with the - document if it is being sent to someone to compile on a - different \TeX\ system. -\code - |\newif\ifFSELautoload - |\def\autoloadfonts{ - | \FSELautoloadtrue - | \csname newwrite\endcsname \FSELfile - | \immediate\openout\FSELfile=\jobname.fnt - |} -\endcode -%}}} selecting demand-loading -%{{{ making csname for one font - -\section{How to set up the csname for one font} - - The macro |\loadfont| is used to load individual fonts, defining - a control sequence name (csname) which may be used later to - switch to that font. When not demand-loading fonts, this is - just like |\global\font| followed by expanding the - |\everyloadfont| macro. - - If the csname is already defined, then this command does - nothing. This is so that irregularities in the font scheme for - the document can be allowed for. Parameter |#1| is the csname, - for example `|\bodyrm|', and |#2| is the external name, for - example `|cmr10|' or `|cmr10 at 12pt|'. -\code - |\def\loadfont#1#2{% - | \ifx#1\relax - | \FSELloadfont#1{#2}% - | \else\ifx#1\UNDEFINED - | \FSELloadfont#1{#2}% - | \fi\fi - |} -\endcode - (We have to compare |#1| against both |\relax|, which is - produced by |\csname|--|\endcsname|, and a completely undefined - csname.) The macro |\FSELloadfont| doesa the actual work of - loading the font. -\code - |\def\FSELloadfont#1#2{% - | \ifFSELautoload -\endcode -\begingroup \leftskip=\parindent \advance\leftskip4\fontdimen6\tentt -\noindent{\it Demand-loading}. We don't load the font, instead we - define a csname as a macro. When expanded this new macro will - (a)~write the font name to the |fnt| file; (b)~define the macro - |\subfont| to load |cmr10| instead (in case \TeX\ stops with a - `font not loadable' message); (c)~load the font for real (this - overwrites the macro); (d)~call |\everyloadfont| for per-font - customization and (e)~switch to the new font. -\par\endgroup -\code - | \edef#1{% - | \write\FSELfile{#2}% - | \def\noexpand\subfont{\global\font\noexpand#1cmr10 }% - | \global\font\noexpand#1#2\relax - | \noexpand\everyloadfont\noexpand#1{#2}% - | \noexpand#1% - | }% - | \else -\endcode -\leftline{\hskip4\fontdimen6\tentt \indent{\it Immediate loading}.} -\code - | \global\font#1#2\relax \everyloadfont#1{#2}% - | \fi - |} -\endcode - - The macro |\everyloadfont| is expanded immediately after - actually loading a font. (The definition used is that one - current when the font is actually loaded, not the one current - when |\loadfont| was executed.) Its |#1| parameter is always a - \<fontdef token>, i.e., it can be to used as a parameter to - |\fontdimen1|. The |#2| parameter is the external name of the - font. -\code - |\def\everyloadfont#1#2{} -\endcode - For example, in a document with a ragged-right margin, this - might be used to suppress the stretch and - shrink of interword spaces by being defined as follows - $$ -\vbox{\halign{#\hfil\cr - |\def\everyloadfont#1#2{%|\cr - | \fontdimen3#1=0pt \fontdimen4#1=0pt|\cr - |}|\cr -}} - $$ -%}}} making csname for one font -%{{{ making a fontset - -\section{How to set up a fontset} - - Now that we know how to define individual font csnames, we - need the mechanism for grouping them in to fontsets. A - fontset is defined by a template macro which says what font - nicknames are defined and gives part of the external font - name. The template macro takes no parameters and expands to - a list each of whose elements are of the form - $$ -\vbox{\halign{$#$\hfil&\quad#\hfil\cr - \<type> \arg{\<nickname>} \arg{\<partial name>}& - or\cr - \cs{@} \<type> \arg{\<nickname>} \arg{\<external name>}& - for a scaled font.\cr -}} - $$ - where a \<type> is one of the control sequences |\f|, |\m| or - |\M|, and \<nickname> is the two- or three-letter nickname - used for the font (without any leading backslash), for example - |rm|, |it|, |bf|. There must be a font fam called - |\|\<nickname>|fam| (|\rmfam|, |\itfam| etc.\ are already - defined). - - If there is no |\@|, then the \<partial name> is a font name - sans the size specification, such as |cmr|. The size in - points will be appended to this (|cmr| + $10\pt$ = |cmr10|). - If |\@| is included then the \<external name> is the complete - font name, such as |cmr10| or |ptmr|. This will be followed - by `{\tt\char32 at\char32 10pt\char32 }', say. - - The \<type> specifies how much support for mathematics this font - requires. This is because maths mode requires that all fonts - that might be used in a formula be loaded (because the font - tables |\textfont|, |\scriptfont| and |\scriptscriptfont| must - be set). The code |\f| means that the font is not used in - maths, |\m| means that |\textfont| and |\scriptfont| will be set - correctly for this fam, and |\M| means that |\scriptscriptfont| - will also be set. In these cases there must be a corresponding - token ending in `-|fam|' that expands to the fam number. - - The fontset name is a sequence of \<letter>s, like `|body|', - `|note|', `|script|', `|heading|'. This is turned into a - fontset selection macro by adding `|\|' to the front and - `|fonts|' to the end (e.g., |\bodyfonts|). The csnames for - loaded fonts are formed from the fontset name + the nickname - (e.g., |\bodyrm|). - -\subsec{Defining the csnames for a fontset} - - The macro |\xfontset| defines all the csnames for the fonts in a - fontset, without defining a `-|fonts|' macro. This is used to - define a fontset that is never selected in its own right (e.g., - its fonts are used only as subscripts and superscripts), and - also used internally by the |\fontset| command. Its arguments - are |#1| the fontset name, |#2| the csname of a template macro, - and |#3| a \<number> that specifies the font size (sans the - `|pt|'). -\code - |\def\xfontset#1#2#3{ - | \def\f##1##2{\expcs\loadfont{#1##1}{##2#3}} - | \let\m=\f \let\M=\f - | \def\@##1##2##3{\expcs\loadfont{#1##2}{##3 at #3pt }} - | #2 - |} -\endcode - -\subsec{Defining a complete fontset} - - The user command |\fontset| is used to define a complete - fontset. Its parameters are - |#1| (a string of letters) is the fontset name, - |#2| (a csname) is a template macro, - |#3| (a \<number>) is size in points, - |#4| (a \<skip>) is baseline skip, - |#5| (a fontset name) is the scriptstyle fontset, and - |#6| (a fontset name) is the scriptscriptstyle fontset. -\code - |% Set up a fontset -- define \#1fonts - |\def\fontset#1#2#3#4#5#6{% - | \xfontset{#1}{#2}{#3}% -\endcode -\begingroup\leftskip=\parindent \advance\leftskip2\fontdimen6\tentt -\noindent - Now to define the |\#1fonts| macro. When demand-loading, this - macro will call |\#1mathfonts| (to ensure the fonts needed for - maths are loaded). Then it will call |\FSELnicknames| to - define |\rm|, |\it|, etc., and to define |\textfont\rmfam|, etc. - Finally it will set the baseline skip and related parameters and - switch to the new |\rm| font. -\par\endgroup -\code - | \expcs\edef{#1fonts}{% - | \ifFSELautoload \noexpcs{#1mathsfonts}\fi - | \noexpand\FSELnicknames{#1}{#5}{#6}\noexpand#2% - | \noexpand\setbaselineskip{#4}% - | \noexpand\rm - | }% -\endcode -\begingroup\leftskip=\parindent \advance\leftskip2\fontdimen6\tentt -\noindent - If we are demand-loading, we must define |\#1mathsfonts| as well. -\par\endgroup -\code - | \ifFSELautoload - | \expcs\def{#1mathsfonts}{\FSELloadmaths{#1}{#5}{#6}#2}% - | \fi - |} -\endcode - -\subsec{Setting font nicknames} - - |\FSELnicknames| - gives definitions to |\f|, |\m| and |\M| so that expanding the - template macro defines |\rm| and the like. If the fontset name - is |ffff|, and a nickname |xx| is introduced with |\f|, the - macro |\xx| is defined to |\ffffxx|. If it is introduced with - |\m|, then the font table entries |\textfont\xxfam| and |\scriptfont\xxfam| are also - set, and |\xx| expands to `|\fam\xxfam \ffffxx|'. If it is - introduced with |\M| then |\scriptscriptfont\xxfam| is also set. - - The parameters are |#1| the fontset name, |#2| the fontset name - for scriptstyle, and |#3| the fontset name for - scriptscriptstyle. The implicit fourth parameter is the - template macro. -\code - |\def\FSELnicknames#1#2#3{% - | \let\@\relax - | \def\f##1##2{% - | \expcs\edef{##1}{\noexpcs{#1##1}}% - | }% - | \def\m##1##2{% - | \expcs\textfont{##1fam}\csname#1##1\endcsname - | \expcs\scriptfont{##1fam}\csname#2##1\endcsname - | \expcs\edef{##1}{% - | \fam\expcs\noexpand{##1fam}% - | \expcs\noexpand{#1##1}% - | }% - | }% - | \def\M##1{% - | \expcs\scriptscriptfont{##1fam}\csname#3##1\endcsname - | \m{##1}% - | }% - |} -\endcode - -\subsec{Setting the baseline skip} - The second helper macro, |\setbaselineskip|, sets - |\baselineskip| and a bunch of related paramaters and - pseudo-parameters like |\smallskipamount|. It takes one - parameter, a \<skip>. -\notepar - My definitions for the skips that go before and after displays - put less white\-space around displays than is set in plain \TeX. - This can be changed by redefining this macro in a style file. -\endnotepar -\code - |\def\setbaselineskip#1{% - | \baselineskip#1\relax \normalbaselineskip\baselineskip - | \jot0.25\baselineskip - | \smallskipamount 0.25\baselineskip plus 0.083\baselineskip - | minus 0.083\baselineskip - | \medskipamount 0.5\baselineskip plus 0.167\baselineskip - | minus 0.167\baselineskip - | \bigskipamount 1\baselineskip plus 0.333\baselineskip - | minus 0.333\baselineskip - | \abovedisplayskip\medskipamount - | \abovedisplayshortskip\abovedisplayskip - | \advance\abovedisplayshortskip-1\abovedisplayskip - | \belowdisplayskip\medskipamount - | \belowdisplayshortskip\smallskipamount - |} -\endcode - -\subsec{Loading maths fonts} - Finally, we need to force the fonts used in maths at a given - size to be loaded. for |\f| fonts this does nothing; for |\m| - fonts it loads the text and script fonts; for |\M| fonts it also - loads the scriptscript font. - - This is done the first time this fontset is selected, even if no - formulas are used (rather than trying to do something - complicated like use |\everymath|\dots). Because this macro - only needs to be used once for each fontset, it finishes by - redefining |\#1mathfonts| to be the same as |\relax|. - - Its parameters are |#1| the fontset name, |#2| the fontset name - for scriptstyle, and |#3| the fontset name for scriptscriptstyle. -\code - |\def\FSELloadmaths#1#2#3{% - | \let\@\relax \def\f##1##2{}% - | \def\m##1##2{\csname#1##1\endcsname \csname#2##1\endcsname}% - | \def\M##1{\csname#3##1\endcsname \m{##1}}% - | \global\expcs\let{#1mathsfonts}\relax - |} -\endcode - -%}}} making a fontset -%{{{ finishing up - -\section{Finishing up} - - We define |\rmfam|, |\mifam| and |\syfam| as aliases for the - numbers $0$, $1$ and $2$. This is so that the maths fonts may - be included in the font templates without any special - arrangements. The names |\itfam|, |\bffam|, |\ttfam|, and |\slfam| are set in |plain.tex|. -\code - |\chardef\rmfam=0 \chardef\mifam=1 \chardef\syfam=2 -\endcode - Note that we do not include an alias for the the maths - extension font's fam number. This is because there is only - one maths extension font---|cmex10|---used for all sizes, so it - does not belong in any fontset. - -\section{Summary of user commands} - - The following lists the user commands provided by FSEL. A - \<fontset name> is a sequence of letters like |note|; - \<points> is a \TeX\ \<number> representing size in points - (without any final |pt|); an \<external name> is the external - name for a font (e.g., `|cmr12|'). - -\medskip\hrule\medskip - -\begingroup \parindent=0pt - - |\autoloadfonts| - - |\loadfont|\<csname>\arg{\<external name>} - - |\xfontset|\arg{\<fontset name>}\<csname>\arg{\<points>} - - |\fontset|\arg{\<fontset - name>}\<csname>\arg{\<points>}\arg{\<skip>}\arg{\<fontset - name>}\arg{\<fontset name>} - - |\def\everyloadfont#1#2{| \dots\ |}| - - |\def\setbaselineskip#1{| \dots\ |}| - -\medskip\hrule\medskip - -\endgroup - -%}}} finishing up -%{{{ bugs - -\section{Bugs} - - FSEL clobbers the macros |\f|, |\m|, |\M| and |\@|. -%}}} bugs -\endcodefile -\enddocument -\bye - -%}}} pdcfsel - -%Local variables: -%fold-folded-p: t -%fill-prefix: " " -%End: |