Received: by nummer-3.proteosys id <01C19443.445C2724@nummer-3.proteosys>; Thu, 3 Jan 2002 11:41:57 +0100 Return-Path: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C19443.445C2724" x-vm-v5-data: ([nil nil nil nil nil nil nil nil nil][nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message Subject: This is what I meant to send to the list Date: Thu, 13 Jun 1991 09:36:01 +0100 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: From: Sender: "LaTeX-L Mailing list" To: "Rainer M. Schoepf" Reply-To: "LaTeX-L Mailing list" Status: R X-Status: X-Keywords: X-UID: 345 This is a multi-part message in MIME format. ------_=_NextPart_001_01C19443.445C2724 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable \documentstyle[a4,array,newdoc]{article} \title{Scaled font loading within the NFSS\\ and some other upgrades (version 2)} \author{Frank Mittelbach\\ with comments and additions by\\ Chris Rowley} \date{10 June 1991} \addtolength\oddsidemargin{1.5cm} \MakeShortVerb\| % Defn changed by Chris so he can use it in maths-mode: \def\m#1{\mbox{$\langle${\rm\it#1}$\rangle$}} % layout changes by Chris \marginparpush 2pt \advance \topmargin -2cm \def\nonterminal#1>{\m{#1}} {\catcode`\<\active \catcode`\|\active \gdef\bnf{% \let<\nonterminal \def|{$\vert$\penalty-501 }% \MakeShortVerb{\"}% \catcode`\<\active \catcode`\|\active \small\tt \vskip-\topsep \flushright \tabular{@{}p{.25\linewidth}% @{\,::=3D\,\ }% >{\rightskip0pt plus 2em\relax}p{.65\linewidth}@{}}% }} \def\endbnf{\endtabular\endflushright} \def\comment#1{\marginpar{\sl\small\raggedright #1}} \def\ccc#1{\comment{{\bf CAR: 91/06/01 } #1}} \begin{document} \maketitle \begin{abstract} This document describes the syntax for the |\newfont@shape| command and gives additional information on its usage with automatically scaled fonts. It also contains some discussion of open questions about math fonts handling. Suggestions for a |\normalfont| command form the last section. \end{abstract} \section{A formal syntax for \protect\\ the {\tt\string\newfont@shape} command} This section deals with the new syntax for the |\newfont@shape| command. It is suitable for integrating specification of fonts scaled by the output device such as {\sc PostScript} printer and also allows for arbitrary extensions for mapping internal and external fonts. One of the aims was to provide a readable interface for the major applications, i.e.\ fixed size mapping and scaling within a range, without loosing the ability to define mappings that depend on the |\time| of the \TeX-run, if somebody cares for something like this. The general syntax for the command |\newfont@shape| is: \begin{bnf} & "\newfont@shape" "{" "} {" "}" "{" "}" "{" "} {" "}" \end{bnf} The first three arguments are used by the |\family|, |\series|, and |\shape| commands to access this particular font shape. \begin{bnf} & \\ & \\ & \\ \end{bnf} The \m{font-prop} argument is an extension argument that is currently unused. It is supposed to contain code that is executed either every time the font is accessed, or when the font is loaded, thereby being an extension to the |\extra@def| function that implements such a concept for the whole family. This decision still has to be made. \begin{bnf} & \end{bnf} The \m{font-maps} argument describes the mapping from individual sizes to external fonts. \begin{bnf} & \\ \end{bnf} There is the possibility to describe that an \m{external-font} is \begin{enumerate} \item tightly bound to a specific size (\m{size-maps}) \item is supposed to be scaled if it lies within a specified range of sizes (\m{range-maps}) \item is used in a particular way if the current size (|\f@size|) passed a particular test (\m{function-maps}). Both the test and the use of the \m{external-font} are defined by the function given through \m{function-name}. \end{enumerate} \begin{bnf} & | \\ & \string< > = \\ & | \\ & \string< > = \\ & | \\ & \string< > = \end{bnf} The \m{simple-size} is internally interpreted in units of points ({\tt pt}). For fraction of points a decimal number can be used although the syntax doesn't allow to use `{\tt,}' as a decimal point. The use of different units of measure could be accomplished by providing a special style designer interface that turns the description into the syntax of the |\newfont@shape| command. The syntax of this command was kept simple to make sure that processing time is reasonably fast. Note, that this syntax doesn't allow any longer the use of arbitrary strings as \m{simple-size}s. As a special rule, the size specifications (\m{simpe-size}) within the \m{size-maps} must be given in increasing order to allow for efficient implementation of substitution algorithms. \begin{bnf} & | . \end{bnf} The\ccc{I thought we were not allowing just a {\tt *} so that a fontdef designer is forced to think about a sensible range for scaling each `master font' (but it is probably just my prejudice).} \m{size-range} is either a single `{\tt*}' standing for an arbitrary range or a star followed by a lower and upper boundary separated by a minus sign. Both the upper and the lower boundary are considered to lie within the range. If overlapping ranges are specified the one that comes first within \m{size-ranges} is used. To exclude one or both of the boundaries \m{simple-size} specification can be used. \begin{bnf} & "*" | "*" "-" \\ \end{bnf} The \m{function-name} of a \m{size-function} is converted\comment{Conversion could be done by adding a prefix.} to some \TeX{} function with two arguments that has to be defined. The arguments given to this function are the requested size (to perform some tests on it) and the \m{font-name} given in the \m{size-spec}. \begin{bnf} & "**" \\ & \\ \end{bnf} Possible variants of the syntax for \m{size-function} could be the use of a |\| catcoded to $12$ or a single star in front. \begin{bnf} & "\" \\ \end{bnf} The advantage of using the same starting character as in \m{size-range} would be that one could interpret the single star in the syntax rule for \m{size-range} as a \m{size-function} with an empty name. \begin{bnf} & "*" \\ & | \end{bnf} The \m{map-type} describes the nature of the mapping between internal and external font. \comment{Having a more general size specification available it should be considered to specify the mapping type in a different way. {\bf CAR added:} not sure I see any reason to change.} The empty \m{map-type} is equivalent to the \m{map-type} `0'. Currently, the following types are defined: \begin{enumerate} \item[0] The mapping is the desired one. \item[1] The mapping uses a substitution font instead of the desired font in the wanted size. \item[2] The mapping uses a substitution font instead of the desired font in a different size. \end{enumerate} Further types could be added. \begin{bnf} & | \end{bnf} The \m{external-font} comes in three variants but the second and third one can be used only within a \m{simple-size}. Note, that the \m{font-name} cannot start with a \m{digit} to avoid confusion with the \m{map-type}. \begin{bnf} & | "at" | "scaled" \\ & \end{bnf} \subsection{Processing} If a new font has to be loaded (because |\|\m{family}|/|\m{series}|/|\m{shape}|/|\m{size} is undefined) then the corresponding |\new@fontshape| definition is looked up. Then a suitable external font is searched for in the following way: \begin{enumerate} \item A size specification (\m{simple-size}) is searched that exactly match the requested \m{size}. \item If this fails, a range specification (\m{range-map}) is searched for that contain the requested \m{size}. This search is carried out sequentially in the order of the \m{range-map}s given in \m{range-maps}. \item \label{funct} If this fails, all the function specifications (\m{function-map}s) = are applied sequentially in the order they appear in \m{function-maps} until a font is loaded or no further functions are available. \item If no font was loaded during this process an error occurs. \end{enumerate} The functions in step \ref{funct} are allowed to do arbitrary processing, there is no need to use the \m{external-font} at all. They have access to all known facts about the requested font (e.g.\ \m{family}, etc.) and can therefore even start a scan in other font shape definitions, or a re-scan of the current one for that matter. For example, a useful function could be a |**substnearby| that re-scans the current font shape and chooses the \m{simple-map} that is nearest to the requested \m{size}. \section{Math fonts at arbitrary sizes} If some arbitrary size is selected via the |\size| command, different strategies for handling corresponding math font sizes could be used: \begin{enumerate} \item One can interactively ask the user to supply a set of math sizes if = he hasn't suppressed math font settings before selecting the size. \begin{itemize} \item A command to declare math fonts suppression needs to be defined at user level. At the moment there exist only two possibilities at the style designer level. \item The interactive setting should allow the possibilities for 1) no math fonts and 2) a substitution setting, e.g.\ ``use 12pt math fonts for size 12.7pt''. \item One should also perhaps make the |\define@mathsizes| and |\define@nomathsize| available at user level for this purpose. Also a combination with the next variant should be considered. \end{itemize} \item Extend the syntax of |\define@mathsizes| to allow the specification of ranges (similar to \m{size-range}) together with computing = functions in the second and third argument. \begin{itemize} \item This means that math size handling has to be redefined using an = internal list structure. Since the computation has to be redone every time = the size is selected (in contrast to the font loading mechanism) the processing time is critical. Computed math font sizes should = therefore be integrated at the beginning of the list to avoid recomputation. \item If the requested size lies outside of all ranges the ``no math = fonts'' switch should be turned on for this particular size. \end{itemize} \item One could allow only a fixed set of sizes to be used within math, i.e.\ the ones defined by |\define@mathsizes| and extend the NFSS to disable math fonts for all other sizes. \begin{itemize} \item This is probably the easiest way since only a test for = |\S@|\m{size} has to be added into one function of the NFSS. \end{itemize} \end{enumerate} In any case we need to define whether or not (and how) the NFSS handles the use of math within a nomath size. At the moment subscript etc.\ simply come out in the wrong size which is not very user friendly. However, we can not simply forbid math within such a size since a lot of internal functions make use of some math features (like |\vcenter|) which are independent of the font in use (what Chris call `hidden maths', below). \subsubsection{Chris' comments on this section} One thing that needs to be sorted out before any decision can be taken on the above is the issue of `hidden maths'. In {\tt plain} and, even more so, in current \LaTeX{} there are a lot of implicit uses of = maths. Examples are: \begin{itemize} \item things produced with |\mathhexbox| and eg |$\bullet$|: here it is easy to remove the `hidden maths'; \item various fills and |\ldots|: these may need a little thought but can be removed; \item |\underline{}|, |\underbar{}|: only the former is documented in \LaTeX{} and it is only here that it becomes an example of `hidden maths'; these two do not actually typeset anything in maths mode (they thus are similar to the = uses of |\vcenter|) but use |\fontdimen8| for the size of rule and space around it (so perhaps the effect could be emulated by directly building up such a box); \item the major problem is the impossibility of preventing user/designer created macros from using hidden maths (eg I have written lots of such macros!); this may even be undesirable as it is the only sensible way to produce such things as raised footnote marks. \end{itemize} Only if hidden-maths (a concept introduced and classified as a deficiency of \TeX{} by SPQR) were outlawed, would it make sense to have `nomathsizes': sizes in which any attempt to use maths produces an error. I think that it would then be sensible for any size to be a `nomathsize' unless it is listed as the first parameter of a `definemathsizes' command. At present we have no maths-typesetting system using scalable fonts (despite my heavy lobbying to persuade someone to pay Richard Southall to help provide one), therefore I can see no point in providing `calculated math sizes' unless they are essential on account of the `hidden-maths' problem described above. [Which raises the question: what happens to the |\fontdimen|s when the info from a {\tt TFM} file is scaled?---answer is on p433: and I suspect it will give undesirable results thus perhaps there never should be a (linearly-)scalable maths-typesetting system.] If `calculated math sizes' are essential, then the calculation should be done only if there is not already an entry in the `math-sizes table' (the table created by the `definemathsizes' commands). Also, whenever such a calculation is done, a new entry should be created in the `math-sizes table' to store the answers so that they need not be recalculated. \section{Reconsidering the `default' font concepts} \comment{%to be written (Some suggestions by Chris!)} The major aim of these suggestions is to introduce the idea that each document (or, better, class of documents) has a `normal font': this is, inter alia, what the current font should be set to at the beginning of the document and anywhere that the visual context is not to be inherited from the surrounding logical entity (typically in floats, footnotes, marginals, table of contents, etc). Of course, each class of documents should specify the font to be used in specific entities, such as footnotes, but it should not be necessary to do this explicitly if this normal font is intended. I therefore suggest providing the following groups of user/designer commands. \begin{description} \item [Minor changes plus additions to the current commands.]\mbox{} |\normal|\m{param}\quad expands to\quad |\normal|\m{param}|default \selectfont| \comment{This provides a synonym for the current `mediumseriesdefault} where $\m{param} \ \,::=3D\,\ ${\tt family $\vert$ series $\vert$ shape} but |\normalfont|\quad expands to\\\mbox{\qquad} |\normalfamilydefault \normalseriesdefault|\\\mbox{\qquad} |\normalshapedefault \selectfont| \comment{I am not very happy about the syntax for `setnormalfont: is just three parameters OK? Any other suggestions?\\ Also, the names `set\ldots\ may not be the best but I think that these are a new type of command at the user level so we have a certain amount of freedom in choosing the name---and `set\ldots\ commands are present in \LaTeX.} \item [Extra user/designer commands.] (For the preamble only, probably.) |\setdefault{|\m{param}|}{|\m{value}|}|\quad expands to\quad |\def \normal|\m{param}|default {|\m{value}|}| |\setnormalfont{|\m{family}|}{|\m{series}|}{|\m{shape}|}|\quad makes each of its three parameters the replacement texts of the corresponding |\normal|\m{param}|default| command and hence defines the font which is called up by |\normalfont|. \end{description} For my purposes it seemed best to make this `normal font' not include \comment{An alternative is to extend the above ideas to `normalsizedefault.} a specific size, but it could do so by including a call to |\normalsize|. A pragmatic reason for not including size is in this way is to avoid sequences such as |\normalfont\small| making two size-changes.\footnote{Recall that, in general, size-changes involve changes to all math font assignments.} Note that these |\normal...| commands are completely independent of the |\default@|\ldots\ commands. My reason for making this a clear distinction is that that these latter are clearly intended to be set once in a fontdef file to provide fall-backs when the requested font is not available. They should therefore be kept under the control of whoever provides that fontdef file (since she/he can then ensure that they are fonts which exist externally) and should not be = subsequently changeable. For this reason, perhaps their names should be far more bizarre and this unchangeability enforced somehow. \end{document} ------_=_NextPart_001_01C19443.445C2724 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This is what I meant to send to the list

\documentstyle[a4,array,newdoc]{article}

\title{Scaled font loading within the NFSS\\
       and some other = upgrades (version 2)}
\author{Frank Mittelbach\\
with comments and additions by\\
Chris Rowley}
\date{10 June 1991}

\addtolength\oddsidemargin{1.5cm}
\MakeShortVerb\|
% Defn changed by Chris so he can use it in = maths-mode:
\def\m#1{\mbox{$\langle${\rm\it#1}$\rangle$}}

% layout changes by Chris
\marginparpush 2pt
\advance \topmargin -2cm

\def\nonterminal#1>{\m{#1}}
{\catcode`\<\active
 \catcode`\|\active
\gdef\bnf{%
  \let<\nonterminal
  \def|{$\vert$\penalty-501 }%
  \MakeShortVerb{\"}%
  \catcode`\<\active
  \catcode`\|\active
  \small\tt
  \vskip-\topsep
  \flushright
  \tabular{@{}p{.25\linewidth}%
           = @{\,::=3D\,\ }%
           = >{\rightskip0pt plus 2em\relax}p{.65\linewidth}@{}}%
}}
\def\endbnf{\endtabular\endflushright}

\def\comment#1{\marginpar{\sl\small\raggedright = #1}}
\def\ccc#1{\comment{{\bf CAR: 91/06/01 } #1}}

\begin{document}

\maketitle

\begin{abstract}
 This document describes the syntax for the = |\newfont@shape| command
and gives additional information on its usage with = automatically scaled
fonts. It also contains some discussion of open = questions about math
fonts handling.

Suggestions for a |\normalfont| command form the last = section.
 \end{abstract}

\section{A formal syntax for \protect\\
         the = {\tt\string\newfont@shape} command}

 This section deals with the new syntax for the = |\newfont@shape|
command. It is suitable for integrating specification = of fonts scaled
by the output device such as {\sc PostScript} printer = and also allows
for arbitrary extensions for mapping internal and = external fonts. One
of the aims was to provide a readable interface for = the major
applications, i.e.\ fixed size mapping and scaling = within a range,
without loosing the ability to define mappings that = depend on the
|\time| of the \TeX-run, if somebody cares for = something like this.


 The general syntax for the command = |\newfont@shape| is:
 \begin{bnf}
  <shape-spec>    & = "\newfont@shape"
          &nbs= p;           = "{" <fam-name> "} {" <series-name> = "}"
          &nbs= p;           = "{" <shape-name> "}"
          &nbs= p;           = "{" <font-maps> "} {" <font-prop> = "}"
\end{bnf}

 The first three arguments are used by the = |\family|, |\series|, and
|\shape| commands to access this particular font = shape.
 \begin{bnf}
  <fam-name>      = & <letter-string> \\
  <series-name>   & = <letter-string> \\
  <shape-name>    & = <letter-string> \\
\end{bnf}

 The \m{font-prop} argument is an extension = argument that is currently
unused. It is supposed to contain code that is = executed either every
time the font is accessed, or when the font is = loaded, thereby being an
extension to the |\extra@def| function that = implements such a concept
for the whole family. This decision still has to be = made.
 \begin{bnf}
  <font-prop>     = & <empty>
\end{bnf}

 The \m{font-maps} argument describes the mapping = from individual sizes
to external fonts.
 \begin{bnf}
  <font-maps>     = & <size-maps> <range-maps> <function-maps> = \\
\end{bnf}

 There is the possibility to describe that an = \m{external-font}
is
 \begin{enumerate}
 \item
   tightly bound to a specific size = (\m{size-maps})
 \item
   is supposed to be scaled if it lies = within a specified range of sizes
   (\m{range-maps})
 \item
   is used in a particular way if the = current size (|\f@size|) passed a
   particular  test = (\m{function-maps}). Both the test and the use of
   the \m{external-font} are defined by the = function given through
   \m{function-name}.
 \end{enumerate}
 \begin{bnf}
  <size-maps>     = & <empty> | <size-map> <size-maps> \\
  <size-map>      = & \string< <simple-size> > <map-type> = <external-font> \\
  <range-maps>     = & <empty> | <range-map> <range-maps> \\
  = <range-map>      & \string< = <size-range> > <map-type> <external-font> \\
  <function-maps>     = & <empty> | <function-map> <function-maps> = \\
  = <function-map>      & \string< = <size-function> > <map-type> <external-font>
\end{bnf}

 The \m{simple-size} is internally interpreted in = units of points ({\tt
pt}).  For fraction of points a decimal number = can be used although the
syntax doesn't allow to use `{\tt,}' as a decimal = point. The use of
different units of measure could be accomplished by = providing a special
style designer interface that turns the description = into the syntax of
the |\newfont@shape| command. The syntax of this = command was kept
simple to make sure that processing time is = reasonably fast. Note, that
this syntax doesn't allow any longer the use of = arbitrary strings as
\m{simple-size}s.

As a  special rule, the size specifications = (\m{simpe-size}) within the
\m{size-maps} must be given in increasing order to = allow for efficient
implementation of substitution algorithms.
 \begin{bnf}
  <simple-size>   & = <unsigned-integer> |
          &nbs= p;           = <unsigned-integer>.<unsigned-integer>
\end{bnf}

 The\ccc{I thought we were not allowing just a = {\tt *} so that a
 fontdef designer is forced to think about a = sensible range for
 scaling each `master font' (but it is probably = just
my prejudice).}
 \m{size-range} is either a single `{\tt*}' = standing for an
arbitrary range or a star followed by a lower and = upper boundary
separated by a minus sign. Both the upper and the = lower boundary are
considered to lie within the range. If overlapping = ranges are specified
the one that comes first within \m{size-ranges} is = used. To exclude one
or both of the boundaries \m{simple-size} = specification can be used.
 \begin{bnf}
  <size-range>    & = "*" | "*" <simple-size> "-" = <simple-size> \\
\end{bnf}

 The \m{function-name} of a \m{size-function} = is
converted\comment{Conversion could be done by adding = a prefix.} to some
\TeX{} function with two arguments that has to be = defined. The
arguments given to this function are the requested = size (to perform
some tests on it) and the \m{font-name} given in the = \m{size-spec}.
 \begin{bnf}
  <size-function> & "**" = <function-name> \\
  <function-name> & = <letter-string> \\
\end{bnf}
 Possible variants of the syntax for = \m{size-function} could be the use
of a |\| catcoded to $12$ or a single star in = front.
 \begin{bnf}
  <size-function> & "\" = <function-name> \\
\end{bnf}
 The advantage of using the same starting = character as in
\m{size-range} would be that one could interpret the = single star in the
syntax rule for \m{size-range} as a \m{size-function} = with an empty
name.
 \begin{bnf}
  <size-function> & "*" = <function-name> \\
  <function-name> & <empty> | = <letter-string>
\end{bnf}

 The \m{map-type} describes the nature of the = mapping between internal
and external font. \comment{Having a more general = size specification
available it should be considered to specify the = mapping type in a
different way. {\bf CAR added:} not sure I see any = reason to change.}
The empty \m{map-type} is equivalent to the
\m{map-type} `0'. Currently, the following types are = defined:
 \begin{enumerate}
 \item[0]
   The mapping is the desired one.
 \item[1]
   The mapping uses a substitution font = instead of the desired font in
   the  wanted size.
 \item[2]
   The mapping uses a substitution font = instead of the desired font in
   a different size.
 \end{enumerate}
 Further types could be added.
 \begin{bnf}
  <map-type>      = & <empty> | <unsigned-integer>
\end{bnf}

 The \m{external-font} comes in three variants = but the second and third
one can be used only within a \m{simple-size}. Note, = that the
\m{font-name} cannot start with a \m{digit} to avoid = confusion with the
\m{map-type}.
 \begin{bnf}
  <external-font> & <font-name> = | <font-name> "at" <dimen> |
          &nbs= p;           = <font-name> "scaled" <unsigned-integer> \\
  <font-name>     = & <letter><string>
\end{bnf}


\subsection{Processing}

If a new font has to be loaded (because
|\|\m{family}|/|\m{series}|/|\m{shape}|/|\m{size} is = undefined) then the
corresponding |\new@fontshape| definition is looked = up. Then a suitable
external font is searched for in the following = way:
 \begin{enumerate}
 \item
   A size specification (\m{simple-size}) = is searched that exactly match
the requested \m{size}.
 \item
   If this fails, a range specification = (\m{range-map}) is searched for
that contain the requested \m{size}. This search is = carried out
sequentially in the order of the \m{range-map}s given = in \m{range-maps}.
 \item
 \label{funct}
   If this fails, all the function = specifications (\m{function-map}s) are
applied sequentially in  the order they appear = in \m{function-maps}
until a font is loaded or no further functions are = available.
 \item
   If no font was loaded during this = process an error occurs.
 \end{enumerate}

The functions in step \ref{funct} are allowed to do = arbitrary
processing, there is no need to use the = \m{external-font} at all. They
have access to all known facts about the requested = font (e.g.\
\m{family}, etc.) and can therefore even start a scan = in other font
shape definitions, or a re-scan of the current one = for that matter. For
example, a useful function could be a |**substnearby| = that re-scans the
current font shape and chooses the \m{simple-map} = that is nearest to the
requested \m{size}.



\section{Math fonts at arbitrary sizes}

If some arbitrary size is selected via the |\size| = command, different
strategies for handling corresponding math font sizes = could be used:
 \begin{enumerate}
 \item
   One can interactively ask the user to = supply a set of math sizes if he
   hasn't suppressed math font settings = before selecting the size.
   \begin{itemize}
   \item
     A command to declare math = fonts suppression needs to be defined at
     user level. At the moment = there exist only two possibilities at
     the style designer = level.
   \item
     The interactive setting = should allow the possibilities for 1) no
     math fonts and 2) a = substitution setting, e.g.\ ``use 12pt math
     fonts for size = 12.7pt''.
   \item
     One should also perhaps make = the |\define@mathsizes| and
     |\define@nomathsize| = available at user level for this purpose.
     Also a combination with the = next variant should be considered.
   \end{itemize}
 \item
   Extend the syntax of |\define@mathsizes| = to allow the specification
   of ranges (similar to \m{size-range}) = together with computing functions
   in the second and third argument.
   \begin{itemize}
   \item
     This means that math size = handling has to be redefined using an internal
     list structure. Since the = computation has to be redone every time the
     size is selected (in = contrast to the font loading mechanism) the
     processing time is critical. = Computed math font sizes should therefore
     be integrated at the = beginning of the list to avoid recomputation.
   \item
     If the requested size lies = outside of all ranges the ``no math fonts''
     switch should be turned on = for this particular size.
   \end{itemize}
 \item
   One could allow only a fixed set of = sizes to be used within math,
   i.e.\ the ones defined by = |\define@mathsizes| and extend the NFSS to
   disable math fonts for all other = sizes.
   \begin{itemize}
   \item
     This is probably the easiest = way since only a test for |\S@|\m{size}
     has to be added into one = function of the NFSS.
   \end{itemize}
 \end{enumerate}
 In any case we need to define whether or not = (and how) the NFSS
handles the use of math within a nomath size. At the = moment subscript
etc.\ simply come out in the wrong size which is not = very user
friendly. However, we can not simply forbid math = within such a size
since a lot of internal functions make use of some = math features (like
|\vcenter|) which are independent of the font in use = (what Chris call
`hidden maths', below).

\subsubsection{Chris' comments on this section}
One thing that needs to be sorted out before any = decision can be taken
on the above is the issue of `hidden maths'.  In = {\tt plain} and,
even more so, in current \LaTeX{} there are a lot of = implicit uses of maths.
Examples are:

\begin{itemize}
\item things produced with |\mathhexbox| and eg = |$\bullet$|:
here it is easy to remove the `hidden maths';
\item various fills and |\ldots|: these may need a = little thought but
can be removed;
\item |\underline{}|, |\underbar{}|:
only the former is documented in \LaTeX{} and it is = only here that it
becomes an example of `hidden maths'; these two do = not
actually typeset anything in maths mode  (they = thus are similar to the uses of
|\vcenter|) but use |\fontdimen8| for the size = of
rule and space around it (so perhaps the effect could = be emulated by
directly building up such a box);
\item the major problem is the impossibility of = preventing
user/designer created macros from using hidden maths = (eg I have
written lots of such macros!);
this may even be undesirable as it is the only = sensible way to
produce such things as raised footnote marks.
\end{itemize}

Only if hidden-maths (a concept introduced and = classified as a
deficiency of \TeX{} by SPQR) were outlawed, would it = make sense to
have `nomathsizes': sizes in which any attempt to use = maths produces
an error.

I think that it would then be sensible for any size to = be a
`nomathsize' unless it is listed as the first = parameter of a
`definemathsizes' command.

At present we have no maths-typesetting system using = scalable fonts
(despite my heavy lobbying to persuade someone to pay = Richard Southall
to help provide one), therefore I can see no point in = providing
`calculated math sizes' unless they are essential on = account of the
`hidden-maths' problem described above.

[Which raises the question: what happens to the = |\fontdimen|s when the
info from a {\tt TFM} file is scaled?---answer is on = p433: and I
suspect it will give undesirable results thus perhaps = there never
should be a (linearly-)scalable maths-typesetting = system.]

If `calculated math sizes' are essential, then the = calculation should
be done only if there is not already an entry in the = `math-sizes
table' (the table created by the `definemathsizes' = commands). Also,
whenever such a calculation is done, a new entry = should be
created in the `math-sizes table' to store the = answers so that they
need not be recalculated.


\section{Reconsidering the `default' font = concepts}

\comment{%to be written
(Some suggestions by Chris!)}

The major aim of these suggestions is to introduce the = idea that each
document (or, better, class of documents) has a = `normal font': this is,
inter alia, what the current font should be set to at = the beginning of
the document and anywhere that the visual context is = not to be
inherited from the surrounding logical entity = (typically in floats,
footnotes, marginals, table of contents, etc). Of = course, each class of
documents should specify the font to be used in = specific entities, such
as footnotes, but it should not be necessary to do = this explicitly if
this normal font is intended.

I therefore suggest providing the following groups of = user/designer
commands.
\begin{description}
\item [Minor changes plus additions to the current = commands.]\mbox{}

|\normal|\m{param}\quad expands to\quad
|\normal|\m{param}|default \selectfont|
\comment{This provides a synonym for the = current
`mediumseriesdefault}

where $\m{param} \ \,::=3D\,\ ${\tt family $\vert$ = series $\vert$ shape}

but

|\normalfont|\quad expands to\\\mbox{\qquad}
|\normalfamilydefault = \normalseriesdefault|\\\mbox{\qquad}
|\normalshapedefault \selectfont|
\comment{I am not very happy about the syntax for = `setnormalfont:
is just three
parameters OK?  Any other suggestions?\\
Also, the names `set\ldots\ may
not be the best but I think that these are a new type = of command at
the user level so we have a certain amount of freedom = in choosing the
name---and `set\ldots\ commands are present in = \LaTeX.}

\item [Extra user/designer commands.] (For the = preamble only,
probably.)

|\setdefault{|\m{param}|}{|\m{value}|}|\quad expands = to\quad
|\def \normal|\m{param}|default {|\m{value}|}|

|\setnormalfont{|\m{family}|}{|\m{series}|}{|\m{shape}|}|\quad
makes each of its three
parameters the replacement texts of the = corresponding
|\normal|\m{param}|default| command and hence defines = the font which
is called up by |\normalfont|.
\end{description}

For my purposes it seemed best to make this `normal = font' not include
\comment{An alternative is to extend the above ideas = to
`normalsizedefault.}
a specific size, but it could do so by including a = call to
|\normalsize|.
A pragmatic reason for not including size is in this = way is
to avoid sequences such
as |\normalfont\small| making two = size-changes.\footnote{Recall that,
in general, size-changes involve changes to all math = font
assignments.}

Note that these |\normal...| commands are completely = independent of
the |\default@|\ldots\
commands.  My reason for making this a clear = distinction is that
that these latter are clearly intended to be
set once in a fontdef file to provide fall-backs when = the requested
font is not available. They should therefore be kept = under the control
of whoever provides that fontdef file (since she/he = can then ensure
that they are fonts which exist externally) and = should not be subsequently
changeable.  For this reason, perhaps their = names should be far more
bizarre and
this unchangeability enforced somehow.

\end{document}

------_=_NextPart_001_01C19443.445C2724--