[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

cmex: a draft.



I hope this will wake you up !
------------------------------


\section{What is in \texttt{cmex}?}
  \subsection{Delimiters}
  \begin{itemize}
  \item Four different sizes of () and extensible versions. Left and right
    extensible modules are '102 and '103.
  \item Four different sizes of [] and extensible versions. The extensible
    modules, one for the right bracket, and one for the left
    bracket are: '066, '067.
  \item Same for \{ and \}\,; the extensible module is: '076.
    \note{The extensible module here is very small, because it is
      added twice: once above the middle piece, and once below the
      middle piece. Its height is half that of the parentheses'
      extensible module. Interesting to see that there is only one
      extensible module for both the left and the right curly brace.
      This is because the left-right extension of a curly
      brace is symmetrical, unlike the parentheses for example.}
  \item Four different sizes of $<$ and $>$. No extensible version.
  \item Same for $\backslash$ and $/$. No extensible version.
  \item Four different sizes of $\lfloor$ and $\rfloor$ and an
    extensible version. Extensible modules: '066, and '067.
  \item Same for $\lceil$ and $\rceil$. Same extensible modules as the
    previous one.
  \item Glyphs in positions '014 and '015 are the extensible versions
    of the vertical bar and the double vertical bar. They are their
    own extensible modules.
  \end{itemize}

  \subsection{Large operators}
  Large operators come in pairs:
  \begin{itemize}
    \item The sqcup
% bb -- although the sqcap isn't here, might want to note that it
%       isn't but could be added
    \item The circled integral
    \item The circled dot
    \item The circled plus
    \item The circled times
    \item The sums
    \item The prods
    \item The normal integrals
    \item The bigcups
    \item The bigcaps
    \item The U plus
    \item The wedges
    \item The vees
    \item The coprods
  \end{itemize}

  \subsection{Wide accents}
  \begin{itemize}
    \item 3 sizes for the hat
    \item 3 sizes for the tilde
  \end{itemize}

  \subsection{Radicals}
  \begin{itemize}
    \item Five radical signs
    \item The vertical bit needed to construct the big radical: '165
    \item The top bit of the constructed radical: '166
  \end{itemize}

  \subsection{Arrows}
  \begin{itemize}
  \item The three pieces for the construction of the vertical double
    arrow: '167 '176 '177
  \item The three pieces of the vertical single arrow: '077, '170,
    '171
  \end{itemize}

  \subsection{Horizontal curly braces}
  \begin{itemize}
  \item The four pieces for the construction of horizontal curly
    braces: '172 -- '175
  \end{itemize}







\section{\TeX's behavior with \texttt{cmex} glyphs}
  \subsection{Large operators}
  \begin{itemize}
  \item A large operator is vertically centered with respect to the
    math axis. This means that, whatever the surrounding glyph size,
    things will not look too bad.
  \item With the following definition of a large operator:
    \cn{mathchardef} \cn{sum} \texttt{= "1xyy}, if \TeX\ is in \textem
    {display style}, it looks to see if the character in position
    \texttt{"yy} of family \texttt{x} has a successor. If it does then
    the successor is taken. When not in \textem {display style}, \TeX\ 
    just takes character \texttt{"yy} from family \texttt{x}. Thus in
    text style, in script style and in scriptscript style the same
    glyph is used.
  \end{itemize}

  \subsection{Vertical delimiters, and friends}
  Radicals are delimiters, and vertical arrows also, so I shall only
  speak about delimiters. Here is a quote from Victor Eijkhout's book:
  \begin{quote}
    A delimiter has two codes: a small variant, and a large variant.
    \TeX\ first tries the small variant, and if that is not
    satisfactory (or if the left part of the delimiter code is 000) it
    tries the large variant. If trying the large variant does not meet
    with success \TeX\ takes the largest delimiter encountered in this
    search. If no delimiter at all is found, (which can happen if the
    right hand part is also 000), an empty box of width
    \texttt{\string\nulldelimiterspace} is taken.

    Investigating a variant means in sequence:
    \begin{itemize}
    \item If the current style is scriptscript style, the scriptscript
      font of the family is tried.
    \item If the current style is script style or smaller the script
      font of the family is tried.
    \item Otherwise the text font of the family is tried.
    \end{itemize}

    Looking for a delimiter at a certain position in a certain font
    means:
    \begin{itemize}
    \item If the character is large enough, accept it.
    \item If the character is extendible accept it.
    \item Otherwise, if the character has a successor (the same but
      bigger), try the successor.
    \end{itemize}
  \end{quote}
  Using the three size mechanism probably did not seem necessary to
  Knuth.  Generally large delimiters are used in display style, and not
  in script or scriptscript style. However, they can also be used in
  the small styles.

  \subsection{Wide accents}
  For the choice of accents, \TeX\ only considers one font, but looks
  to see if the current accent has a successor. Unlike the delimiter
  choice mechanism, the accent choice mechanism does not go through all
  three sizes. \TeX\ chooses the accent in such a way that the accent
  width is as close as possible but smaller than the width of the box
  to cover.

  \subsection{First conclusion} 
  For operators, a distinction in size is made between text style and
  display style, whereas with the usual automatic size choosing
  mechanism, glyphs in text style and in display style are taken from
  the text size font, and are therefore the same size.









\section{Consequences of loading \texttt{cmex} in 3 different sizes}

  \subsection{Consequences for operators}
  For operators, I shall consider two completely separate policies. In
  one case I will consider that \texttt{cmex} is unchanged, and 
  loaded in three sizes. The other policy is to consider that if
  \texttt{cmex} is loaded in three sizes, we no longer need to have
  two sizes of operators in \texttt{cmex}, thus \cn{bigcup} would not
  have a successor in its font. For better distinction, I shall call
  the latter (and nonexistent) version \texttt{cmex}$'$. \textem {All
    the following supposes that no new macros have been written. I'm
    just trying to see what \TeX's automatic behavior would be.}
  \begin{description}
  \item[If \texttt{cmex}$'$ is loaded in three sizes.] In
    such a situation \TeX\ has a large version of \cn{bigcup} (and
    other operators) in text size, a small version in script size, and
    yet a smaller version in scriptscript size.

    The operators can be centered: no problem.

% jz -- change:
    In script and scriptscript style the resulting `big operators' would
    be smaller than if they were produced with today's standard \TeX, and
    todays standard \texttt{cmex}.  What is more, one would be smaller
    than the other, which is also not the case with today's standard
    \TeX, and todays standard \texttt{cmex}.
% ----

    In display style one would get big operators from the text size
    font: that's all right.  \textem {But one would also get a big
      operator in text style,} and that is not conform with today's 
    standard \TeX\ behavior.


% jz -- I added encoding:
  \item[If the existing \texttt{cmex} encoding is loaded in three sizes.]
    The operators can be centered: no problem.

    In script style, one would get the smallest version of a large
    operator. But coming from a small size font, that will produce
    something very small. In scriptscript style, same behavior as in
    script style, but the result would be even smaller. 
% jz -- Added this:
    Thus in script, and in scriptscript style, the large `big
    operators' would never automatically be used. That is why I
    thought up the \texttt{cmex}$'$ encoding.
% -- maybe should have said that earlier :-)

    In text style, \TeX\ would produce the small version taken from
    the text size font. In display style \TeX\ would produce the big
    version of operators taken from the text size font.

    So in text style and in display style, there would be no change
    compared to what today's standard \TeX\ produces.
% jz -- changed the phrasing here:
    But script and scriptscript style would produce different
    results. 
% --

  \end{description}

  In both cases, things could be improved if macros were written to
  override the present behavior of \cn{bigsqcup}. I would think of
  things like \cn{mathchoice}, but $\ldots$



  \subsection{For vertical delimiters, radicals, vertical arrows}
  Let's start by supposing \TeX\ is in scriptscript style, and it has
  to typeset a large delimiter. One should consider two cases:
  \begin{description}
  \item[The delimiter has an extensible variant.]  In this case the
    search will start in scriptscript size, and continue until \TeX\
    finds the extensible variant of scriptscript size. Then the search
    will stop, and the extensible will be used.  This extensible will
    come from scriptscript size, and therefore probably not look the
    same as it would in today's setup, where all extensibles come from
    text size.
  \item[The delimiter does not have an extensible variant.]  As
    previously, the search starts in scriptscript size. If nothing
    big enough is found in scriptscript size, the search continues in
    script size. If still nothing is found, the search then continues
    in text size. If necessary the biggest delimiter from text size
    will be used. If the search stops in text size, there is no
    difference with what \TeX\ produces today. But if the search stops
    before reaching text size, the chosen delimiter will be different
    from the one \TeX\ would use in the present configuration. Its
    strokes would be finer, and better adapted for use in script style.
  \end{description}

  If one supposes that \TeX\ is in script style, the previous two
  cases also apply, except that every occurrence of `scriptscript' must
  be replaced with `script'. If one supposes that \TeX\ is in text
  style, the result of loading three different sizes of \texttt{cmex}
  would be the same as it is in \TeX's current configuration.

  \subsection{For horizontal curly braces}
  If they are automatically taken from script size, or from script
  script size when necessary, the spacing changes a little,
  because the dimensions in the \texttt {.tfm} files would be
  different. A consequence of this could be different line and page
  breaks.

  However, I think that it would be nice if curly braces did come out
  of the correctly sized fonts. Then their boldness would match the
  surrounding text. But I have been told that on a macro programming
  point of view things could be difficult, even if the glyphs are
  available and loaded.

  \subsection{For wide accents}
  See first paragraph of previous section.

% jz -- 
%  I guess that in actual fact, the wide accents were put in
%  \texttt{cmex} because they could not fit any where else.
% jz -- I don't want to start any discussion on that topic so i'm
% taking it out

  To my taste if accents were taken from the current size, things
  could only look better. The accent's width would be closer to that
  of the material under the accent, and the accent's boldness would be
  better adjusted.

  \note {Unlike the delimiter choice mechanism, the accent choice
    mechanism is restricted to one font, and one size.  It will thus
    not look in text size when it is in script size for instance. So
    in script style, accents will always come out of the script size
    font, and in scriptscript style, accents will always come out of
    the scriptscript size font, etc.$\ldots$}
  
  \subsection{Conclusion}
% jz -- Changed the conclusion
  Nearly everything in \texttt{cmex} could have lived in a normal three
  sized math font, and that would maybe have been better. The only
  problems would have come from the specific ``big operator'' behavior
  that Knuth wanted.

  Also one must not forget that Knuth did not want to leave any empty
  slots. 
% jz -- added this:

  The reduced amount of memory that was available on the machines with
  which \TeX\ was first used could have been another reason for loading 
  \texttt{cmex} in one size only.






% jz -- This section has been changed a bit, and extended.

\section{What could be added to \texttt{cmex}?}
I am now considering possible evolutions of \texttt{cmex}, although I
use the terminology ``adding to \texttt{cmex}'', the font resulting
from these evolutions would have a different name.
  \subsection{If the \texttt{cmex} encoded font is loaded in three sizes}
  In this case big operators will not produce the usual results, and
  the rest will be slightly different, as stated above.
    \begin{itemize}

    \item One can add wide accents, but one will get slightly
      different (better) results. Thus wide accents will match the
      script and scriptscript styles. Macros could be made (available
      as a style option) to keep the old behavior, if necessary.

    \item One can increase the number of different sizes for accents.

    \item One can add big delimiters and their extensible versions,
      without any problem! Accepting that things will be slightly
      better adjusted in script and scriptscript style. Macros could
      be made (available as a style option) to keep the old behavior,
      if necessary.

    \item One can increase the number of different sizes for
      delimiters, and one can probably reduce the height of the
      extensible module in order to make the growing of delimiters
      more gradual.

    \item One can add some vertical extensible arrows! Accepting that
      things will be slightly better adjusted in script and script
      script style.

    \item One can add small and large `big operators' without any
      problem! 

    \item Big improvement: one can add loads of other stuff (symbols,
      etc.$\ldots$) that would come in all three sizes.

    \end{itemize}

  \subsection{If the \texttt{cmex} encoded font is only loaded in one size}
    \begin{itemize}
    \item One can add big delimiters and their extensible versions
      without any problem!

    \item One can increase the number of different sizes for
      delimiters, and one could reduce the height of the extensible
      module in order to make the growing of delimiters more gradual.

    \item One can add some vertical extensible arrows!

    \item One can add large operators without any problem!

    \item One can add wide accents without any problem, and the present
      behavior of wide accents will not change. But if wide accents are
      meant to match the script and scriptscript styles, then wide
      accents must go in another font that would be loaded in different
      sizes.

    \item One can increase the number of different sizes for accents.

    \item One could add other stuff, but it would only come in one
      size.

    \end{itemize}

  \subsection {If a \texttt{cmex}$'$ encoded font is loaded in three
      sizes}
  I am considering here the imaginary \texttt{cmex}$'$ encoded font,
  that I described previously.

  One can add the same things as when \texttt{cmex} is loaded in three
  sizes. The only difference is: if no macro programming is done, the
  text style and display style will produce the same `big operators'.
  In script and scriptscript style the `big operators' would be in
  different sizes from one another and smaller from those in text
  style.






\section{Conclusions}
If one loads \texttt{cmex} in three different sizes, many things are
improved, and with a \cn{mathchoice} the initial behavior of large
operators could be kept, or available as a style option.

If \texttt{cmex} is kept in a single size, we must decide whether to
put wide accents in or not.







\section{The beginning of my \texttt{cmex10.pl} file}

\begin{verbatim}
(FAMILY CMEX)
(FACE O 352)
(CODINGSCHEME TEX MATH EXTENSION)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 37254272422)
(FONTDIMEN
   (SLANT R 0.0)
   (SPACE R 0.0)
   (STRETCH R 0.0)
   (SHRINK R 0.0)
   (XHEIGHT R 0.430555)
   (QUAD R 1.000003)
   (EXTRASPACE R 0.0)
   (DEFAULTRULETHICKNESS R 0.039999)
   (BIGOPSPACING1 R 0.111112)
   (BIGOPSPACING2 R 0.166667)
   (BIGOPSPACING3 R 0.2)
   (BIGOPSPACING4 R 0.6)
   (BIGOPSPACING5 R 0.1)
   )
(CHARACTER O 0 ...
\end{verbatim}



\subsection{Comments about the \texttt{cmex10.pl} file}
\begin{itemize}
\item The xheight is not null. 
\item The space is.

\item With the following:
\begin{verbatim}
(CHARACTER O 100
   (CHARWD R 0.875003)
   (CHARHT R 0.039999)
   (CHARDP R 1.760019)
   (VARCHAR
      (TOP O 70)
      (BOT O 73)
      (REP O 76)
      )
   )
\end{verbatim}
that is in the \texttt{.pl} file, one can produce something that looks
like a growing integral:
$$ \left\lmoustache \frac{3.q}{\frac{3\pi.r^2}{3.q.b.c}} \right.$$

\item The pieces used to construct the horizontal curly braces are not
linked in any way.

\item The bottom pieces of the extensible parentheses are overloaded
  for \cn{rmoustache} and \cn{lmoustache}. One of these could be linked
  (charlisted) with the integrals, so that \cn{left}\cn{bigint} could
  produce a growing integral like the delimiters.

\item The bottom pieces of the curly braces ('072 and '073) are also
  overloaded for \cn{lgroup} and \cn{rgroup}.

\item The middle pieces of the braces are overloaded for \cn{arrowvert}
  and \cn{Arrowvert}.

\item The extensible module of the braces is overloaded for \cn{bracevert}.

\item For the wide accents and the curly braces the depth is null.

\item All the delimiter glyphs in \texttt{cmex} are set with a very
  small height and a big depth. This is because the radical
  primitive is also used for delimiters. For radicals, the \texttt
  {.tfm} height of the glyph is used to determine the size of the
  hrule.

\item The extension modules do not have any height at all. Same for
  the arrow heads.

\item The four integrals have italic corrections.

\item Small versions of operators have a null height, whereas
  big versions have a small height and a big depth:
  \begin{verbatim}
  (CHARACTER O 116
   (COMMENT This is the small \bigotimes)
   (CHARWD R 1.1111145)
   (CHARDP R 1.000013)
   (NEXTLARGER O 117)
   )
(CHARACTER O 117
   (COMMENT This is the big \bigotimes)
   (CHARWD R 1.511116)
   (CHARHT R 0.100001)
   (CHARDP R 1.500012)
   )
  \end{verbatim}
  I have no explanation for this!

\item There are no kerns or ligatures in \texttt{cmex}.


\end{itemize}

\section{General comments}





\end{document} 
% Local Variables: 
% mode: latex 
% TeX-master: t 
% TeX-command-default: "LaTeX2+" 
% End:

---------------------------------------
mynfss.tex:

%\newcommand{\texttt}[1]{{\tt#1}}
%\newcommand{\textbf}[1]{{\bf#1}}
%\newcommand{\textem}[1]{{\em#1}}
%\newcommand{\textsl}[1]{{\sl#1}}
%\newcommand{\textit}[1]{{\it#1}}
\newcommand{\note}[1]{\par \vskip .25cm \textbf{Note:\ }#1 \par \vskip .25cm}
\chardef\bslash=`\\
%    Command name
\newcommand{\cn}[1]{{\tt\bslash#1}}
%    File name
\newcommand{\fn}[1]{{\tt#1}}