(even more!) BUGS: 1.9.15's omx.etx and mathex.mtx

schlegel@vossnet.de schlegel@vossnet.de
Wed, 22 Nov 2000 06:32:14 -0500



Lars Hellström schrieb:
> 
> Please excuse my cross-posting this, but I felt that this matter should
> probably be discussed on a wider forum than merely the fontinst mailing
> list.
> 
> At 14.00 +0100 2000-11-18, Alejandro Lopez-Valencia wrote:
> >I have found a couple of bugs in the math etx and mtx files recently
> >uploaded to CTAN.
> >
> >Comparing omx.etx and texmext.enc, there are three misnamed glyphs in oms.etx:
> >
> >oms.etx              texmext.enc
> >
> >arrowdblvertex       arrowvertexdbl
> >hatwideerr           hatwidest
> >tildewiderr          tildewidest
> 
> I changed those glyph names around 16.00 2000-11-20. At 23.33 +0100
> 2000-11-20, Alejandro Lopez-Valencia wrote:
> >I probably reported the bugs too soon because I found a few more jewels. This
> >time, to be really sure, I compared the AFMs of MathTime, Adobe
> >Lucida and Lucida New Math.
> >
> >       should be
> >oms.etx        texmext.enc
> >barex          vertextendsingle
> >bardblex       vertextendouble
> >angle*         angbracket*
> >
> >all these changes broke oms.mtx, and I had to do some heavy editing and
> >comment out the references to ``bar'' I couldn't resolve to real glyphs.
> >
> >Checking Adobe's UNICODE 2.1 to postscript names and Adobe's corporate use
> >block, it seems that the math encoding files were created to work with
> >Adobe  Symbol instead of CMEX/MathTime/Lucida's. Those Adobe Symbol names
> >should probably go in a renaming hack file (for mathptm and such)? I
> >haven't fiddled with oms and oml just yet, but they are probably a can of
> >worms too... I continued fiddling with omx last weekend and...
> 
> Now I've compared the glyph names of all three old math encodings OML /
.... etc etc

The original mathex was made to substitute characters from Symbol (in a
setup for Times with "free" fonts). Therefore one finds some strangers
here.
To get this name convention working with MathTime fonts one has to
supply some fakes to catch all what is necessary.
I attach a working mathex.etx where some (perhaps not all) things are
corrected.
I don't think there is a "correct" name: there are different schemes
used.
- MathTime/BSR cm fonts
- Bakoma
- original CM has no naming defined
- Adobe Lucida fonts
- Symbol font names

The question is if fontinst should at all follow a specific scheme
implemented in one font set. This could have the advantage to avoid
faked characters. On the other side it could lead to confusion about the
difference of the names which a vendor specific encoding supplies and
the identifier Fontinst uses for its character remapping.

I suggest either to choose a strict definition or follow a strategy of
minimal modification of a working scheme...

BTW, the inconsistency in the braces seems to be important to be
resolved.

Hilmar Schlegel

%%%========================================================================
%%% @TeX-font-metrics-file{
%%%    author              = "Alan Jeffrey",
%%%    version             = "1.307",
%%%    date                = "15 January 1993",
%%%    time                = "17:36:29 BST",
%%%    filename            = "mathsym.mtx",
%%%    address             = "School of Cognitive and Computing Sciences
%%%                           University of Sussex
%%%                           Brighton BN1 9QH
%%%                           UK",
%%%    telephone           = "+44 273 606755 x 3238",
%%%    FAX                 = "+44 273 678188",
%%%    checksum            = "???",
%%%    email               = "alanje@cogs.sussex.ac.uk",
%%%    codetable           = "ISO/ASCII",
%%%    keywords            = "encoding, math, TeX, PostScript",
%%%    supported           = "yes",
%%%    abstract            = "These are the extra glyphs needed for TeX 
%%%                           math fonts, used by the fontinst package.",
%%%    docstring           = "The checksum field above contains a CRC-16
%%%                           checksum as the first value, followed by the
%%%                           equivalent of the standard UNIX wc (word
%%%                           count) utility output of lines, words, and
%%%                           characters.  This is produced by Robert
%%%                           Solovay's checksum utility.",
%%%    package             = "fontinst",
%%%    dependencies        = "fontinst.sty, ltugboat.sty",
%%% }
%%%========================================================================
%
% 29 Dec 1993, v1.30: Created file.
%
% 3 Jan 1994, v1.301: Renamed some of the glyphs, added fakes for 
%    arrowverttp and friends.
%
% 8 Jan 1994, v1.304: Renamed similareq to similarequal.
%
% 9 Jan 1994, v1.305: Renamed some glyphs to use the same names as Lucida 
%    New Math.

\relax

\documentstyle[fontinst]{ltugboat}

\title{The {\tt fontinst} math symbol glyphs}
\author{Alan Jeffrey}
\address{School of Cognitive and Computing Sciences \\
   University of Sussex \\
   Falmer \\
   Brighton \\
   BN1 9QH \\
   UK}
\netaddress{alanje@cogs.susx.ac.uk}

\begin{document}

\maketitle

\section{Introduction}

This document describes the glyphs used by the {\tt fontinst} 
package when generating math symbol fonts.

\raggedright

\metrics

% Uses the fontinst package.

\needsfontinstversion{1.307}

\resetint{letterspacing}{0}
\setint{fontdimen(8)}{\int{underlinethickness}}

% \unfakable is a glyph which can't be faked.

\setcommand\unfakable#1{
   \setglyph{#1}
      \glyphrule{500}{500}
      \glyphwarning{missing glyph `#1'}
   \endsetglyph
}

% \extensible and \vextensible define a number of extensible glyphs.

\setcommand\extensible#1{
   \unfakable{#1}
   \unfakable{#1tp}
   \unfakable{#1mid}
   \unfakable{#1bt}
   \unfakable{#1ex}
   \setglyph{#1big} \glyph{#1}{1000} \endsetglyph
   \setglyph{#1Big} \glyph{#1big}{1000} \endsetglyph
   \setglyph{#1bigg} \glyph{#1Big}{1000} \endsetglyph
   \setglyph{#1Bigg} \glyph{#1bigg}{1000} \endsetglyph
}

\setcommand\vextensible#1{
   \unfakable{#1}
   \unfakable{#1tp}
   \unfakable{#1mid}
   \unfakable{#1bt}
   \unfakable{#1vertex}
   \setglyph{#1big} \glyph{#1}{1000} \endsetglyph
   \setglyph{#1Big} \glyph{#1big}{1000} \endsetglyph
   \setglyph{#1bigg} \glyph{#1Big}{1000} \endsetglyph
   \setglyph{#1Bigg} \glyph{#1bigg}{1000} \endsetglyph
}

% \wideaccent defines a wide accent.

\setcommand\wideaccent#1{
   \unfakable{#1}
   \setglyph{#1wide} \glyph{#1}{1000} \endsetglyph
   \setglyph{#1wider} \glyph{#1wide}{1000} \endsetglyph
   \setglyph{#1widerr} \glyph{#1wider}{1000} \endsetglyph
   \setglyph{#1widerrr} \glyph{#1widerr}{1000} \endsetglyph
}

% displayoperatorscale is the difference in scale between a big and a display 
% operator, exept for integrals, which have their own scale.

\setint{displayoperatorscale}{1200}
\setint{integralscale}{1728}

% bigoperatorsize is the size of a big operator.

\setint{textoperatorsize}{
   \add{\height{product}}{\depth{product}}
}

% \integral, \bigoperator and \biggoperator define operators.

\setcommand\integral#1{
   \unfakable{#1}
   \setglyph{#1text} \glyph{#1}{1000} \endsetglyph
   \setglyph{#1display} \glyph{#1text}{\int{integralscale}} \endsetglyph
}

\setcommand\bigoperator#1{
   \unfakable{#1}
   \setglyph{#1text} \glyph{#1}{1000} \endsetglyph
   \setglyph{#1display} \glyph{#1text}{\int{displayoperatorscale}} \endsetglyph
}

\setcommand\biggoperator#1{
   \unfakable{#1}
   \setglyph{#1text} 
      \glyph{#1}{
         \div{\mul{1000}{\int{textoperatorsize}}}
             {\add{\height{#1}}{\depth{#1}}}
      }
   \endsetglyph
   \setglyph{#1display} 
      \glyph{#1text}{\int{displayoperatorscale}} 
   \endsetglyph
}

\comment{\section{Math extension glyphs}}

\unfakable{bracketleftbt}
\unfakable{bracketrightbt}
\unfakable{bracketlefttp}
\unfakable{bracketrighttp}

\setglyph{floorleft}
   \glyph{bracketleftbt}{1000}
\endsetglyph

\setglyph{floorright}
   \glyph{bracketrightbt}{1000}
\endsetglyph

\setglyph{ceilingleft}
   \glyph{bracketlefttp}{1000}
\endsetglyph

\setglyph{ceilingright}
   \glyph{bracketrighttp}{1000}
\endsetglyph

\setglyph{bardbl}
   \glyph{bar}{1000}
   \glyph{bar}{1000}
\endsetglyph
   
\setglyph{barex}
   \glyph{vextendsingle}{1000}
%   \glyph{bar}{1000}
\endsetglyph

\setglyph{bardblex}
   \glyph{vextenddouble}{1000}
%   \glyph{bardbl}{1000}
\endsetglyph

\setglyph{arrowtp}
   \glyph{arrowup}{1000}
\endsetglyph

\setglyph{arrowbt}
   \glyph{arrowdown}{1000}
\endsetglyph

\setglyph{arrowdbltp}
   \glyph{arrowdblup}{1000}
\endsetglyph

\setglyph{arrowdblbt}
   \glyph{arrowdbldown}{1000}
\endsetglyph

\setglyph{arrowdblvertex}
   \glyph{arrowvertexdbl}{1000}
\endsetglyph

\unfakable{tilde}

\setglyph{hat}
   \glyph{circumflex}{1000}
\endsetglyph

\setglyph{integralvartext}
   \glyph{integraltext}{1000}
\endsetglyph

\setglyph{integralvardisplay}
   \glyph{integraltext}{\int{integralscale}}
\endsetglyph

\setglyph{integralvarlarge}
   \glyph{integral}{2500}
\endsetglyph

\setglyph{integralvarlarger}
   \glyph{integraltext}{2500}
\endsetglyph

\resetglyph{integraltp}
   \glyph{integraltp}{2000}
\endsetglyph

\resetglyph{integralbt}
   \glyph{integralbt}{2000}
\endsetglyph

\resetglyph{integralex}
   \moveup{\neg{\div{\add{\height{integralex}}
                         {\depth{integralex}}}{2}}}
   \glyph{integralex}{2000}
   \moveup{\div{\add{\height{integralex}}
                         {\depth{integralex}}}{2}}
   \resetheight{\height{integralex}}
%   \resetheight{\sub{\height{integralex}}
%                    {\div{\add{\height{integralex}}
%                              {\depth{integralex}}}{2}}}
   \resetdepth{\depth{integralex}}
\endsetglyph

\ifisglyph{L10440}\then

\setglyph{or1small}
   \push
     \glyph{L10443}{1000}
   \pop
   \moveup{\height{L10443}}
   \glyph{L10442}{1000}
   \moveup{\neg{\height{L10443}}}
   \resetdepth{\depth{L10443}}
\endsetglyph

\setglyph{or1large}
   \push
     \glyph{L10443}{1000}
   \pop
   \push
     \moveup{\add{\height{L10443}}{\depth{L10458}}}
     \glyph{L10458}{1000}
   \pop
   \moveup{\add{\height{L10443}}{\add{\height{L10458}}{\depth{L10458}}}}
   \glyph{L10442}{1000}
   \moveup{\neg{\add{\height{L10443}}{\add{\height{L10458}}{\depth{L10458}}}}}
   \resetdepth{\depth{L10443}}
\endsetglyph

\fi %end if is L10440

\setglyph{varsummation}
   \glyph{Sigma}{1000}
\endsetglyph

\setglyph{varproduct}
   \glyph{Pi}{1000}
\endsetglyph

\biggoperator{varproduct}
\biggoperator{varsummation}

\setglyph{tildewiderrr}
   \moveup{\scale{\height{tildewiderr}}{\sub{1100}{\int{integralscale}}}}
   \glyph{tildewiderr}{\int{integralscale}}
   \moveup{\scale{\height{tildewiderr}}{\sub{\int{integralscale}}{1100}}}
   \resetdepth{0}
\endsetglyph

%\ifnum\depth{tildewider}=0\relax
% \resetglyph{tildewider}
%   \resetdepth{0}
% \endsetglyph
%\fi

\setglyph{hatwiderrr}
   \moveup{\scale{\height{hatwiderr}}{\sub{1100}{\int{integralscale}}}}
   \glyph{hatwiderr}{\int{integralscale}}
   \moveup{\scale{\height{hatwiderr}}{\sub{\int{integralscale}}{1100}}}
   \resetdepth{0}
\endsetglyph


\unfakable{plus}
\unfakable{union}

\setglyph{unionmulti}
   \push
      \movert{\div{\sub{\width{union}}{\scale{\width{plus}}{700}}}{2}}
      \moveup{\div{\width{plus}}{4}}
      \glyph{plus}{700}
   \pop
   \glyph{union}{1000}
\endsetglyph


\extensible{parenleft}
\extensible{parenright}
\extensible{bracketleft}
\extensible{bracketright}
\extensible{braceleft}
\extensible{braceright}
\extensible{floorleft}
\extensible{floorright}
\extensible{ceilingleft}
\extensible{ceilingright}
\extensible{slash}
\extensible{backslash}
\extensible{angleleft}
\extensible{angleright}

\wideaccent{hat}
\wideaccent{tilde}

\vextensible{radical}
\vextensible{arrow}
\vextensible{arrowdbl}

\biggoperator{unionsq}
\biggoperator{circledot}
\biggoperator{circleplus}
\biggoperator{circlemultiply}
\biggoperator{unionmulti}
\biggoperator{intersection}
\biggoperator{union}
\biggoperator{logicaland}
\biggoperator{logicalor}

\bigoperator{product}
\bigoperator{summation}
\bigoperator{coproduct}

\integral{integral}
\integral{contintegral}
\extensible{integral}

\unfakable{bracehtipdownleft}
\unfakable{bracehtipdownright}
\unfakable{bracehtipupleft}
\unfakable{bracehtipupright}

\endmetrics

\end{document}

\endmetrics

\end{document}