summaryrefslogtreecommitdiff
path: root/fonts/universa
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/universa
Initial commit
Diffstat (limited to 'fonts/universa')
-rw-r--r--fonts/universa/README.md100
-rw-r--r--fonts/universa/universa.dtx5898
-rw-r--r--fonts/universa/universa.ins182
-rw-r--r--fonts/universa/universa.pdfbin0 -> 820733 bytes
4 files changed, 6180 insertions, 0 deletions
diff --git a/fonts/universa/README.md b/fonts/universa/README.md
new file mode 100644
index 0000000000..e53971c41f
--- /dev/null
+++ b/fonts/universa/README.md
@@ -0,0 +1,100 @@
+# The Metafont Implementation of the Universal font
+
+## Version 2.1, 2019/08/26
+## by Christian Holm
+
+This is the universal package containing my implementation of Herbert
+Bayers `universal' font in Metafont, with LaTeX2e support.
+
+
+## Installation
+
+## Using Autotools
+
+ autoreconf -i -f
+ ./configure
+ make
+ make install
+
+## By hand
+
+To install the package do:
+
+1. Make sure you have created the following directories:
+
+ <TeX-base>/tex/latex/universa/
+ <TeX-base>/doc/latex/universa/
+ <TeX-base>/fonts/source/public/universa/
+
+ Where _TeX-base_ is the root of you TeX installation. The most
+ common values of _TeX-base_ is
+
+ /usr/local/lib/texmf (teTeX on Unix-like systems)
+ C:\EMTEX (emTeX on DOS-like systems)
+
+ but could also be something like:
+
+ /home/johndoe/lib/texmf (user installation on Unix-like systems)
+ D:\Program Files\TeX (Some wierd Windows95 installation)
+
+2. Put the files `universa.ins' and `universa.dtx' in some temporary
+ directory.
+
+3. Do
+ latex universa.ins
+
+ 1. If you `docstrip` program is set up correctly, that is,
+ `docstrip.cfg` exists and contains the line
+
+ \BaseDirectory{<TeX-base>}
+
+ then all files will be put in the right directories, and you
+ need to do nothing more.
+
+ 2. If no `docstrip.cfg' is present on the system, then you need to
+ move the files your self. You should move the files as
+ specified below:
+
+ *.mf => <TeX-base>/fonts/source/public/universa/
+ *.fd => <TeX-base>/tex/latex/universa/
+ uni.sty => <TeX-base>/tex/latex/universa/
+ unidoc.sty => <TeX-base>/doc/latex/universa/
+ copyright => <TeX-base>/doc/latex/universa/
+
+ 4. In any case you need to move the files below as specified
+ below:
+
+ universa.dtx => <TeX-base>/tex/latex/universa/
+ universa.ins => <TeX-base>/tex/latex/universa/
+ README.md => <TeX-base>/tex/latex/universa/
+
+ so that you can produce the documentation. You can of course
+ compress those file to save disk space.
+
+5. If you are using some TeX distribution that has a database (that is
+ proberly the case if your TeX distribution uses `kpathsea'), you
+ should update that database.
+
+6. To produce the documentation go to the directory where you put
+ `unidoc`, i.e., `<TeX-base>/doc/latex/universa/`, and do
+
+ latex universa.dtx
+ latex universa.dtx
+ makeindex -s gind -o uni.ind uni.idx
+ makeindex -s gglo -o uni.gls uni.glo
+ latex universa.dtx
+ latex universa.dtx
+
+ This should leave you with a file `uni.dvi` (or `uni.pdf`). You
+ can remove the files
+
+ uni.idx uni.glo uni.log uni.aux uni.toc uni.ilg uni.out
+
+ You may need to substitute `makeindex` with what is relevant for
+ your system, e.g., `makeindx` in emTeX.
+
+I hope you will enjoy this package.
+
+Please read the file `copyright` in the documentation directory, for
+the copyright notice.
+
diff --git a/fonts/universa/universa.dtx b/fonts/universa/universa.dtx
new file mode 100644
index 0000000000..b90c69e517
--- /dev/null
+++ b/fonts/universa/universa.dtx
@@ -0,0 +1,5898 @@
+% \iffalse
+%<*(package|oml|oms|ot1|t1|u)>
+\def\unifileversion{v2.1}
+\def\unifiledate{2019/08/26}
+%</(package|oml|oms|ot1|t1|u)>
+% \fi
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{unidoc,latexsym}
+\OnlyDescription %For short description of font and package.
+% \AlsoImplementation %For full description of font and package.
+\title{The \universal{} Font\\ \normalsize{Version \unifileversion}}
+\author{Christian Holm\thanks{E--mail: \texttt{<cholmcc@gmail.com>}}}
+\date{\unifiledate}
+\begin{document}
+\maketitle
+\begin{abstract}
+ This is my implementation of Herbert Bayer's ``universal'' font in
+ \MF{} for \TeX{} and \LaTeX{}. Extensive support for \LaTeX{} is
+ supplied. This font is in no way intended to be a correct, not to
+ mention a comlpete implementation of Herbert Bayer's original
+ design. This document describes how to use the font with \LaTeX{},
+ and also the source code for the characters of the font.
+\end{abstract}
+\tableofcontents
+\DocInput{universa.dtx}
+\appendix
+
+\section{Solution to the \Lcs{bauhausforms} problem}
+\label{app:solu}
+
+\subsection{The Problem}
+This I owe to Joseph Collins \texttt{<collins@ARL.MIL>}.
+
+During the preperation of version~1.0 of this font, I was loosing
+sleep over what I chose to call `The \Lcs{bauhausforms}
+problem', after the problems the symbol \textuni{\bauforms} gave
+me.
+
+As can be seen from the symbol, the idea is to make a figure out of
+a circle, a square, and a triangle. From these three figures you can
+ofcourse make infinitly many figures, even though the sizes are
+limited. The particular combination of the three figures I was
+looking, first seemed simple\footnote{And after having seen Mr.\
+Collins solution, it did again.}, but turned out to be
+difficult. What I wanted to do was (see also
+figure~\ref{fig:bauforms}):
+\begin{quote}
+ Take a circle of some radius (e.g., 1). Inside this circle draw a
+ isosceles triangle $\bigtriangleup ABC$, with all vertices on the
+ circle, The singular vertice $A$ placed on the horizontal line
+ traveling left from the center of the circle.
+
+ Now draw a square $\Box PQRS$ inside of the circle, having two
+ vertices on the circle, and two on the triangle.
+
+ The wanted triangle and square are such that, the opposing side of
+ the singular vertice $|BC|$ should divede the square into to equal
+ oblongs, i.e., intersect $|PQ|$ midway between $P$ and $Q$.
+\end{quote}
+
+\begin{figure}[htbp]
+ \centering
+ \beginillu
+ \setlength{\unitlength}{.05\textwidth}
+ \begin{picture}(10,10)
+ \thinlines
+ \put(-1,5){\line(1,0){12}}
+ \put(5,-1){\line(0,1){12}}
+ \thicklines
+ \put(5,5){\circle{10}}
+ \put(0,5){\line(100,74){6.521}}
+ \put(0,5){\line(100,-74){6.521}}
+ \put(6.4330,0.2097){\line(0,1){9.5805}}
+ \put(3.6873,7.7457){\line(1,0){5.4914}}
+ \put(3.6873,2.2543){\line(1,0){5.4914}}
+ \put(3.6873,2.2543){\line(0,1){5.4914}}
+ \put(9.1787,2.2543){\line(0,1){5.4914}}
+ \put(0,5){\mbox{$A$}}
+ \put(6.4330,0.2097){\mbox{$B$}}
+ \put(6.4330,5){\mbox{$B^\prime$}}
+ \put(6.4330,9.7903){\mbox{$C$}}
+ \put(3.6873,2.2543){\mbox{$P$}}
+ \put(3.6873,5){\mbox{$P^\prime$}}
+ \put(9.1787,2.2543){\mbox{$Q$}}
+ \put(9.1787,5){\mbox{$Q^\prime$}}
+ \put(9.1787,7.7457){\mbox{$R$}}
+ \put(3.6873,7.7457){\mbox{$S$}}
+ \put(5,5){\mbox{$O$}}
+ \put(0,5){\arc{1}{0}{0.6401}}
+ \put(0,4.5){\mbox{$\varphi$}}
+ \end{picture}
+ \illuother
+ \begin{tabular}{%
+ @{\vline\extracolsep{1em}\space}%
+ p{.8\textwidth}%
+ @{\space\vline}}
+ \hline
+ Since you are processing this document without the
+ \textsf{eepic} package, you will not see the illustration
+ otherwise here. To compensate, I will give you a short
+ description on how to draw the figure yourself.
+
+ Take out some paper, a pencil, compasses, and a ruler. Now
+ draw a circle of some radius $r$, with its center in origo of
+ a Cartisean coordinate system. In the next subsection, you
+ will find the coordinates for points $A,B,C,O,P,Q,R,$ and $S$
+ expressed in terms of $x,y,$ and $h$. You will also find the
+ correct values for $x,y,h$ in that section. Multiply those
+ values with $r$, and plot the points above in the coordinate
+ system. Draw the triangle $\bigtriangleup ABC$, and the square
+ $\Box PQRS$, and --- voila, you have the illustration.\\
+ \hline
+ \end{tabular}
+ \endillu
+ \caption{The \Lcs{bauforms} problem.}\label{fig:bauforms}
+\end{figure}
+
+This shouldn't be to difficult, should it. Well I didn't think so,
+but after many late evenings with pen, paper, ruler, compasses, and
+heavy use of trigonometric relations, I found out that the half
+$\varphi$ of the singular vertice should obey:
+\begin{eqnarray}
+0 &=& \sin \left( \cos^{-1} \left( \frac{\cos2\varphi}{\sqrt{2}}
+ \right) \right) - \frac{\cos2\varphi}{\sqrt{2}}\nonumber\\
+& & - 2\sqrt{2}
+ \frac{\cos\varphi^2\sin\varphi}{\cos\varphi+\sin\varphi}
+ \nonumber
+\end{eqnarray}
+Now I dare you to find the exact solution to that.
+
+Using numerical methodes (Newton's method), was ofcourse no
+problem, and gave satesfactory resualt. If the expression on the
+right above is labelled $f$, $f^\prime$ is:
+\begin{eqnarray}
+f^\prime &=& \frac{\sin4\varphi}{2\sqrt{\frac{3-\cos4\varphi}{4}}}
+ + \sqrt{2}\sin2\varphi\nonumber\\
+& & - \frac{2\sqrt{2}\cos\varphi}{\cos\varphi+\sin\varphi^2}
+ \left( \left( \cos\varphi+\sin\varphi \right)
+ \left( \cos^2\varphi-2\sin^22\varphi \right)\right. \nonumber\\
+& & - \quad \left.\left( \cos\varphi-\sin\varphi \right)
+ \cos^2\varphi\sin\varphi \right) \nonumber
+\end{eqnarray}
+Using these expressions for $f$ and $f^\prime$ in a \textsf{Fortran}
+program, I reached resaults close to what Mr.\ Collins found.
+
+\subsection{Joseph Collins' Solution}
+
+In Mr.\ Collins notation, the points on figure~\ref{fig:bauforms}
+has the following coordinates:
+\begin{eqnarray*}
+ A = (0,-1) & B^\prime = (x,0) & C = (x,y)\\
+ O = (0,0) & P^\prime = (x-h,0) & Q^\prime = (x+h,0)\\
+ R = (x+h,h) & S = (x-h,h) & \\
+\end{eqnarray*}
+Below is what Mr.\ Collins wrote me --- thank you very much.
+
+On the unit circle
+\begin{equation}\label{eq:uc}
+ x^2 + y^2 = 1
+\end{equation}
+we have the vertices of a triangle at $(-1,0)$, $(x,y)$, and
+$(x,-y)$. A square has four vertices $(x \pm h, \pm h)$, where the
+two points $(x-h, \pm h)$ lie on the triangle (constraint A) and the
+two points $(x+h, \pm h)$ lie on the circle (constraint B). Thus,
+the vertical side of the triangle bisects the square. From
+constraint A, upon consideration of similar triangles, we have
+$$\frac{y}{1+x} = \frac{h}{1+x-h}, \quad \mbox{so that}\quad
+ h = \frac{(1+x) y }{1+x+y}.$$
+By (\ref{eq:uc}), this is
+\begin{equation} \label{eq:b1}
+ h = \frac{(1+x)\sqrt{1-x^2}}{1+x+\sqrt{1-x^2}} .
+\end{equation}
+From constraint B, we get
+\begin{equation} \label{eq:b2}
+ (x+h)^2 + h^2 = 1 .
+\end{equation}
+Any simultaneous solution of (\ref{eq:b1}) and (\ref{eq:b2}) is also a
+solution of
+\begin{equation}\label{eq:eqn}
+ 8x^3 - 4x^2 - 3x + 1 = 0,
+\end{equation}
+the relevant solution being
+\begin{equation} \label{eq:sol}
+ x = \frac16 + \sqrt{\frac{11}{18}} \sin
+ \left[ \frac{\pi}{6}
+ - \frac13 \arctan\left(\frac{3\sqrt{237}}{23}\right) \right].
+\end{equation}
+Equation (\ref{eq:eqn}) and solution (\ref{eq:sol}) courtesy of
+Mathematica. We get $y$ and $h$ from (\ref{eq:uc}) and
+(\ref{eq:b1}), respectively. The angle at $(-1,0)$ is $\varphi = 2
+\arctan\bigl(y/(1+x)\bigr)$.
+
+Approximate values are
+\begin{eqnarray*}
+ x &\simeq& 0.2865914\\
+ y &\simeq& 0.9580529\\
+ h &\simeq& 0.5491394 \\
+ \varphi &\simeq& 1.280129 \ ( \simeq 73.346^o)
+\end{eqnarray*}
+
+\section{Copyrights --- GNU General Public Lisence}
+\label{app:ggpl}
+
+This \MF{} implementation of the ``universal'' font and the \LaTeX{}
+support package ``uni'' copyright \copyright{} 1998 Christian Holm.
+
+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.
+
+This program is distributed in the hope that it will be useful, but
+\textsc{without any warranty}; without even the implied warranty
+of \textsc{merchantability} or \textsc{fitness for a particular
+purpose}. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to
+\begin{quote}
+ The Free Software Foundation, Inc.\\
+ 675 Mass Ave\\
+ Cambridge\\
+ MA 02139\\
+ USA
+\end{quote}
+
+See the file \texttt{copyright} in the distribution for the complete
+GNU General Public License.
+
+\section{Wishlist}
+
+Below is a list of things I would like to do with the font and
+package. If anyone has any suggestions, ready--made code, or new
+ideas, please let me know.
+
+If you would like to take on one or more of the tasks presented
+below, please do so, but send me a note so that I may coordinate
+with my own efforts, and perhaps have a constructive dicourse.
+
+I should however instruct you to read the \emph{complete}
+documentation of the package and font, since this may give some
+reasons why I have chosen a particular approach.
+
+\begin{itemize}
+\item Make the font an 8--bit encoded (256 characters) font,
+ conforming somewhat to the \texttt{T1} encoding of the Cork fonts.
+\item Making a package (perhaps \textsf{mfdoc}), to make
+ documentation of \MF{} sources, just like \textsf{doc} is fore
+ \LaTeX{} sources. This is ofcourse a independent project, and I
+ will proberly not work on it.
+\end{itemize}
+\clearpage
+\section{Font Charts}
+\label{app:charts}
+
+Below are some charts of the \universal{} font in different series
+and shapes (medium upright, slanted, small-caps, and strict, as well
+as bold upright, slanted, small caps, and strict), all in size \texttt{8pt}.
+
+\FontChart{fulmr8.mf}{medium, upright}
+\FontChart{fulmo8.mf}{medium, oblique}
+\FontChart{fulmc8.mf}{medium, small-caps}
+\FontChart{fulmst8.mf}{medium, strict}
+\FontChart{fulbr8.mf}{bold, upright}
+\FontChart{fulbo8.mf}{bold, oblique}
+\FontChart{fulbc8.mf}{bold, small-caps}
+\FontChart{fulbst8.mf}{bold, strict}
+
+\clearpage
+\end{document}
+%</driver>
+%<*copyright>
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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.
+
+ 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.
+
+ 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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+%</copyright>
+%\fi
+% \def\fileversion{v2.1}
+% \def\filedate{2019/08/26}
+% \section{Introduction}
+% \changes{v1.0}{1997/17/24}{Creation of the \universal{} font}
+%
+% This package contains the \MF{} source and driver files for the
+% ``universal'' font, designed by Herbert Bayer, a teacher at the
+% Bauhaus school in Weimar\index{Bayer, Herbert}, plus a \LaTeX{}
+% package to utilize this font, along with a number of font definition
+% files, as required by the New Font Selection Scheme (\NFSS{}).
+%
+% \subsubsection*{About the Documantation}
+%
+% The full documentation of this font is rather large, more then 80
+% pages actually. Most of it is the programs for the characters for
+% this font, so if you don't know the \MF{} language, or don't care
+% how the charcters are created, you should insert
+% \Lcs{OnlyDescription} into the preamble of \texttt{universa.dtx}.
+%
+% Notice, that \MF{} macros are \emph{not} indexed in this
+% documentation. This is because it would take a \emph{major} rewrite
+% of the \textsf{doc} package to do so, and I really didn't want to do
+% that.
+%
+% Some of the macros of \textsf{doc} \emph{has} been redefined, and if
+% you want to see which, or how I generally did the documentation,
+% please refer to appendix~\ref{app:unidoc}.
+%
+% If you in some way are unsatisfied with some of the characters of
+% the font, do please read the documentation of that character. There
+% may be some notes on why the character looks the way it does. Some
+% of the comments, however are a bit silly and should be skipped at
+% high speed (pretend there is a conditional that says \texttt{if not
+% silly ... fi}).
+%
+% \subsubsection*{This Version}
+% \changes{v2.0}{98/08/01}{Bug corrections, new font
+% shapes, better font programs, new/improved macros for \LaTeX{}
+% support, better conformation to \NFSS{}, using \textsf{fontname}
+% filenaming scheme, etc.}
+%
+% This new version of the \universal{} font, provides a number
+% of new features and improvements, both to the font itself and to the
+% \LaTeX{} support macros. Also, a number of corrections has been made
+% to the font programs.
+%
+% The reason why I jumped one whole version number from 1.0 to 2.0, is
+% that I have taken a whole new approach to the font programs and
+% shapes of the \universal{} font, plus I decided to put some
+% more effort into the \LaTeX{} support.
+%
+% \subsubsection*{Thanks and Other Stuff}
+%
+% To those of you who have had the (mixed) pleasure of using version
+% 1.0 of this font, one of the most notaticable changes are to the
+% symbol \textuni{\bauforms}. In the old documenation, I complained
+% that I couldn't find the exact solution to the problem this symbol
+% possed. I also encourged people to send me any solution they may
+% have had --- and guess what --- somebody did! Therefore I would like
+% to thanck Joseph Collins for providing me with the solution. If you
+% like Joseph Collins and I like Mathematical puzzles take a look in
+% Appendix~\ref{app:solu} to learn more about this problem and it's
+% solution.
+%
+% I also direct your attention to Appendix~\ref{app:ggpl} for the
+% copyright notice on the \universal{} package (it's the
+% \textsl{Gnu General Public Lisence} to those of you who know it).
+%
+% If you in any way have gotten tempted to design your own font, or to
+% implement some font into \MF{}, I feel obligated to bring you a
+% warning, taken from the \MF{}book by Donald E.\ Knuth:
+% \begin{quote}
+% \uni
+% \textsc{Warning:} Type design can be hazardous to your other
+% interests. Once you get hooked, you will develop intense feelings
+% about letterforms; the medium will intrude the message that you
+% read. And you will perpetually be thincking of improvements to the
+% fonts that you see everywhere, especially those of your own
+% design.
+% \end{quote}
+%
+% \section{The Font and it's History}
+%
+% \subsubsection*{Bauhaus}
+% The Bauhaus school in germany originally located at Dessau, was a
+% school for any kind of design, ranging from potery to furniture,
+% from painting to --- what was considered the prime form of design
+% --- architecture. Many famous designers came from, or taught at
+% Bauhaus, for example Mies van der Rhoe\index{Rhoe, Mies van der},
+% Herbert Bayer\index{Bayer, Herbert}, Kandinsky\index{Kandinsky},
+% Walter Gropius\index{Gropius, Walter} and Gerrit
+% Rietveld\index{Rietveld, Gerrit}. The style ``die stiil''
+% \index{die stiil} was explored here, and painters like
+% Mondrian\index{Mondrian} made large contributions to what today is
+% known as
+% ``the Bauhaus style''\index{Bauhaus style=\textuni{Bauhaus style}}.
+%
+% The basic idea of the Bauhaus school, was to design items, which
+% along with it's aesthethic value, also had a high degree of
+% functionallity. Houses were meant to be suited for all kinds of
+% living, while still keeping the beauty that make people glad to see
+% thier house. Chairs should be comfortable for thier use, as well be
+% able to fit--in in a normal house. All this should be done at a
+% price that made it possible for everybody to own
+% designer--furniture, houses, etc.
+%
+% The political idea of Bauhaus, was that of a socialist one. Houses
+% are for the people --- they have to live in them, and that living
+% should be a good as possible. Therefore the Bauhaus school saw it
+% has its task to provide functional, beautiful everyday items that
+% anybody could affort. Paintings and tapestery shouldn't hang on
+% museums or art galleries, but in peoples homes, where they would
+% inrich thier everyday life.
+%
+% \subsubsection*{Herbert Bayer and the ``universal'' Font}
+%
+% At Bauhaus typography was also studied, not just how written text
+% should be typeset, and how printed characters should look like, but
+% also what the essence of writting is, in it's pratical and
+% design--wise sense. This led Herbert Bayer\index{Bayer, Herbert} to
+% formulate some principles of writting:
+%
+% \begin{quote}
+% {\uni experiment with simplified way of writing:
+% \begin{enumerate}
+% \item this way of writing is recommended by all typographic
+% designers as the future way of writing.
+% \item by writing in minuscules our writing looses nothing,
+% but is easier to read, considerably more economical.
+% \item why must you for one sound have two tokens, e.g.\
+% A and a? why two alphabets for one word, why this double
+% set of signs, when the half is enough.
+% \end{enumerate}
+% \begin{flushright}
+% herbert bayer 1925
+% \end{flushright}}
+% \end{quote}
+%
+% On this principles, Herbert Bayer designed a font, which should have
+% no majuscles (upper case letters), easy to print, and easy to read
+% since it didn't have any unusefull decoration, but communicated the
+% bare meaning of characters through the simplest forms needed to
+% reconigise a character. This font he called ``universal''.
+%
+% This font contained abolutly no majuscles, since Bayer believed them
+% to be superflous, as it is clear form the quote above.
+%
+% At the time Herbert Bayer formulated these principles and designed
+% the ``universal'' font, most printers used Gothic letters, which is
+% allmost overly decorated, so his font ofcourse made
+% contraversy.
+%
+% Later on, in the 1930'ies, the Bauhaus school drew the
+% attention of \emph{Gestapo}\footnote{Gehemligche Stats Polizi} of
+% Nazi\footnote{Nationalsocializmus} Germany. The school was finally
+% closed in 1936 by Gestapo, because they believed they were promoters
+% of Jewish and Communist culture and propaganda.
+%
+% In the aftermatch of the closing of the school, most of it's ideas
+% were shundend by other designers, and the Bauhaus way of thinking
+% died out. This is properly the reason why Herbert Bayers
+% ``universal'' font is so little known today.
+%
+% However, the ``universal'' font still stands as one of the most
+% compelling developments in font designing. It represents an approach
+% to designing where the functionallity is as vital as the expression,
+% and as such I believ it to be one of the most important fonts in the
+% world today.
+%
+% \section{This \MF{} Implementation}
+%
+% This implementation of Herbert Bayers ``universal'' font, is not
+% supposed to look \emph{exactly} like the original design. Ofcourse I
+% have tried to the best of my ability to mimic his design as far as I
+% could. However, it is not an easy matter to find a complete, not to
+% mention exact, sample or account of Bayers design.
+%
+% This implementation is bassed on the samples I \emph{could} find,
+% and other implementations of the ``universal'' font. Many of these
+% other implementations do differ from the original samples, and
+% include characters I couldn't find in any of the original. So
+% whenever I found disparities, I mainly leened on the original
+% samples and my understanding of the original design.
+%
+% \subsection{The \MF{} version versus the Original}
+%
+% As mentioned above, Bayer never did design any majuscles for this
+% font, but nonetheless, I have included them into this
+% implementation. This I did, because I think most people will have a
+% hard time writting in minuscles (lowercase letters) alone. Ofcorse,
+% if you agree with Bayer, you should simple not use them.
+%
+% There are also some other differences, mostly due to the fact, that
+% I never found a complete sample of the original font. The major
+% differences between the originalk font and this implementation is
+% summerized below:
+%
+% \begin{description}
+% \item[Majuscles:] Majuscles are present, even though they weren't
+% in the original design.
+% \item[Digigts:] These are based on other implementations, and my
+% general conception of the original design.
+% \item[Punctuations:] As above.
+% \item[Accents:] As above.
+% \item[Symbols:] As above.
+% \item[Bauhaus Symbols:] I have added some various symbols I have
+% found in connection with Bauhaus to the font. The reason is I
+% find them beautiful, and I had some space to fill.
+% \item[Numerous Shapes and Weights:] I don't think Bayer ever
+% design slanted characters, a bold face version of the font, and
+% he could never have design a small caps version of the
+% font. However, these are present in this implementation. I
+% included these features, because I believ them to be of general
+% utility, and it makes the font conform more to the Computer
+% Modern Roman font, and \NFSS{}.
+% \end{description}
+%
+% \subsection{Features of the font}
+%
+% Rather then using \texttt{cmbase.mf}\footnote{Computer Modern Roman
+% base file}, and then redefine some macros, I chose to make a new
+% base file myself, i.e.,
+% \texttt{unibase.mf}\index{unibase.mf=\texttt{unibase.mf}}. This file
+% contains a number of macros\footnote{A better name for `base' would
+% be `library', and then the file would be \texttt{libuni.mf}, but to
+% conform to CM, I used `base'.} I have used in the character
+% programs.
+%
+% The macros of \texttt{unibase.mf} actually reflects my conception of
+% the font. There are three basic drawing macroes:
+% \begin{description}
+% \item[\texttt{unicir}] which draws a circle,
+% \item[\texttt{uniarc}] which draws a segment (arc) of a circle, and
+% \item[\texttt{unilne}] which draws a straight line.
+% \end{description}
+% I believe, that Bayer intended the font to be made of these two
+% basic shapes: the arc, and the line. Also, to keep things simple,
+% and therefore easy to print, all shapes should be of the same
+% thickness, i.e.,as if drawn with a pen of equal thickness. I have
+% made one diviation from this, however. All majuscles are drawn with
+% a thicker `pen', which makes the output nicer, I think.
+%
+% Incidently, this made the programs of the characters much simpler,
+% and shorter.
+%
+% \subsubsection{Series, Shapes, Sizes, and Special Characters}
+%
+% \Newestchanges{v2.0}{98/08/01}{Added `small caps' shape to the font.}
+% \changes{v2.0}{98/08/01}{Added non--standard `strict' shape to the
+% font.}
+% \changes{v2.0}{98/08/01}{Added `slanted' shape to the font.}
+% \changes{v2.0}{98/08/01}{Default series is changed to `medium'
+% to the font, `bold face' support included.}
+%
+% Below is a sample of each series/shape combination avaliable in this
+% implementation of the font, along with the \LaTeX{} commands that
+% drive them:
+%
+% \begin{description}
+% \item[\rm Medium upright (\Lcs{textuni}):]
+% \textuni{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Medium slanted (\Lcs{textunisl}):]
+% \textunisl{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Medium small caps (\Lcs{textunisc}):]
+% \textunisc{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Medium strict (\Lcs{textunist}):]
+% \textunist{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Bold face upright (\Lcs{textunibf}):]
+% \textunibf{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Bold face slanted (\Lcs{textunibsl}):]
+% \textunibsl{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Bold face small caps (\Lcs{textunibsc}):]
+% \textunibsc{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \item[\rm Bold face strict (\Lcs{textunibst}):]
+% \textunibst{The dazed brown fox quickly gave 1234-567890 jumps!}
+% \end{description}
+%
+% Everyone of these shapes are avaliable in size 8, 9, 10, 12, 17
+% \texttt{pt}, and \MF{} can ofcourse create others.
+%
+% \Newestchanges{v2.0}{98/08/01}{Some of the \textunibf{bauhaus} symbols
+% that where avaliable in v1.0, has been taken out.}
+% Also a number of non--standard characters are avaliable in the
+% font. Below is a table of these characters along with the \LaTeX{}
+% commands that drive them.
+%
+% Notice that \textunibf{``} and \textunibf{''} is present in the
+% table. This is because these characters are not directly defined,
+% but is supplied as \emph{ligatures}. This can be done, because they
+% are simple doubles of \textunibf{`} and \textunibf{'}.
+%
+% A quick look on the table will also reveal some characters that
+% generally isn't present in the standard \texttt{OT1}
+% encoding\footnote{The \texttt{OT1} encoding is the 7 bit encoding of
+% the Computer Modern fonts by Donald E.\ Knuth. 7 bit means it
+% contain 128 ($=2^7$) characters.}, but generally present in the
+% \texttt{T1} encoding\footnote{The \texttt{T1} encoding is an
+% encoding especially designed for the (western) European
+% languages. It was founded by the \TeX{} User's Group, on a seminar
+% in Cork, and is the basis of the \texttt{dc} fonts. \texttt{T1} is
+% an 8 bit encoding, which means it has 256 ($=2^8$) characters.}. I
+% have done this, both to provide an (almost) complete font for the
+% European languages, but also because I anticipate the \universal{}
+% font some time in the future will shift, or a least be avaliable, in
+% the \texttt{T1} encoding\footnote{\texttt{T1} is generally
+% considered \emph{the} encoding of the future, and in the long term,
+% it is most likely the encoding of \LaTeX3.}.
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{%
+% @{\vline\extracolsep{1em}\space}ll%
+% @{\extracolsep{1em}}ll%
+% @{\space\vline\extracolsep{1em}}}\hline
+% \textuni{\bausquare}&\Lcs{bausquare}&
+% \textuni{\baucircle}&\Lcs{baucircle}\\
+% \textuni{\bautriangle}&\Lcs{bautriangle}&
+% \textuni{\bauhead}&\Lcs{bauhead}\\
+% \textuni{\bauforms}&\Lcs{bauforms}&
+% \textuni{\dh}&\Lcs{dh}\\
+% \textuni{\dj}&\Lcs{dj}&
+% \textuni{\ng}&\Lcs{ng}\\
+% \textuni{\th}&\Lcs{th}&
+% \textuni{\varQ}&\Lcs{varQ}\\
+% \textuni{\DH}&\Lcs{DH}&
+% \textuni{\DJ}&\Lcs{DJ}\\
+% \textuni{\NG}&\Lcs{NG}&
+% \textuni{\TH}&\Lcs{TH}\\
+% \textuni{\textsection}&\Lcs{textsection} or \Lcs{S}&
+% \textuni{\textbraceleft}&\Lcs{textbraceleft} or \Lcs{\char"7B}\\
+% \textuni{\textbraceright}&\Lcs{textbracerigth} or \Lcs{\char"7D}&
+% \textuni{\textbar}&\Lcs{textbar}\\
+% \textuni{\guilsinglleft}&\Lcs{guilsinglleft}&
+% \textuni{\guilsinglright}&\Lcs{guilsinglright}\\
+% \textuni{\guillemoleft}&\Lcs{guillemoleft}&
+% \textuni{\guillemoright}&\Lcs{guillemoright}\\
+% \textuni{\quotesinglbase}&\Lcs{quotesinglbase}&
+% \textuni{\quotedblbase}&\Lcs{quotedblbase}\\
+% \textuni{\textquotedblleft}&\Lcs{textquotedblleft}&
+% \textuni{\textquotedblright}&\Lcs{textquotedblright}\\
+% \textuni{\textogonek}&\Lcs{textogonek}&
+% \textuni{\textunderscore}&\Lcs{textunderscore}\\
+% \hline
+% \end{tabular}
+% \caption{Non--standard characters in the {universal} font}
+% \label{tab:characters}
+% \end{table}
+% Please note, that in the small caps shaped fonts, \Lcs{dh} does not
+% give {\small\textuni{\DH}}, but a \textunibsc{\dh}, that is a small
+% caps shaped version of \Lcs{varQ}. Also there is no command
+% \Lcs{varq} defined.
+%
+% In appendix~\ref{app:charts} is some charts showing the font in
+% different series and shapes.
+%
+% \subsubsection{File Names for the \MF{} files}
+%
+% \paragraph{Base File and Source Files}
+% The base file and the files containg the code for the characters of
+% the \universal{} font, all starts with \texttt{uni}, to reflect the
+% connection of the files. The next five possible letters reflects
+% what kind of code is contained within the file, e.g., the base file
+% ends in \texttt{base}, the file containing the code for the
+% minuscles (lower case letters) end in \texttt{lower}, and so forth.
+%
+% \paragraph{Font Driver Files}
+% The font driver filenames has been chosen to conform to the
+% \texttt{fontname} scheme, because this scheme is used by most
+% \TeX{}, \LaTeX{}, and \MF{} systems (anyway those that use
+% \texttt{kpathsea}, which is the most).
+%
+% The filename all contain the three characters \texttt{ful}, where
+% the \texttt{f} stands for \textit{public} and \texttt{ul} for
+% \textit{universal}.
+%
+% Next comes a letter which is one of \texttt{m} (\textit{medium}) or
+% \texttt{b} (\textit{bold}), which represents the series of the
+% font.
+%
+% Then comes one or two letters, which are \texttt{r}
+% (\textit{upright} or roman), \texttt{o} (\textit{slanted}, or
+% oblique), \texttt{c} (\textit{small caps}), or \texttt{st}
+% (\textit{strict}), which represent the shape of the font.
+%
+% Finally the filename ends with the designsize in points.
+%
+% Thus the complete syntax for the font driver file names is:
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{rcl}
+% \meta{filename}&:=&
+% \meta{supplier}\meta{face}\meta{series}\meta{shape}\meta{size}\texttt{.mf}\\
+% \meta{supplier}&:=&\texttt{f}\\
+% \meta{face}&:=&\texttt{ul}\\
+% \meta{series}&:=&\texttt{m \char"7C\ b}\\
+% \meta{shape}&:=&\texttt{r \char"7C o \char"7C c \char"7C st}\\
+% \meta{size}&:=&\texttt{\char"7C\ 8 \char"7C\ 9 \char"7C\ 10
+% \char"7C\ 12 \char"7C\ 17}
+% \end{tabular}
+% \end{table}
+% The \texttt{fontname} scheme actually says to put \meta{encoding}
+% information after the \meta{shape}, but since this is \texttt{8r}
+% for \TeX{} Text, it would make filenames longer then 8 characters in
+% the cases of \meta{size} of 10, 12, and 17, so this information is
+% left out (which is permisable in \texttt{fontname}, but
+% unfortunate).
+%
+% This way of naming the font driver files will, if you use
+% \texttt{kpathsea}, put the \texttt{ful*.*pk} files in\newline
+% \indent\meta{pk--base--dir}\texttt{/public/universa/}\newline
+% and the \texttt{ful*.tfm} files in\newline
+% \indent\meta{tfm--base--dir}\texttt{/public/universa/}\newline
+% which I think is the intuitivly correct place to put them. This also
+% means, that the \texttt{*.mf} files provided with this package,
+% should be placed in\newline
+% \indent\meta{mf--source--base--dir}\texttt{/public/universa/}\newline
+% again very intuitive.
+%
+% Below is a table of the usual directory names under
+% \textsf{Unix}--like and \textsf{MSDOS}--like (including Windows95)
+% systems.\meta{mode} is \textsf{dvips}'s name for your printer.
+% \begin{table}[htbp]
+% \begin{tabular}{%
+% @{\vline\extracolsep{1em}\space}l%
+% @{\space\vline\extracolsep{1em}\space}l%
+% @{\space\vline\extracolsep{1em}\space}l%
+% @{\space\vline\extracolsep{1em}}}
+% \hline
+% Varibale&\textsf{Unix}--like systems&\textsf{MSDOS}--like systems\\
+% \hline
+% \meta{tfm--base--dir}&
+% \texttt{/var/spool/texmf/pk/}\meta{mode}\texttt{/}&
+% \texttt{C:\Lcs{}FONTS\Lcs{}PK\Lcs{}}\meta{mode}\Lcs{}\\
+% \meta{tfm--base--dir}&
+% \texttt{/var/spool/texmf/tfm/}&
+% \texttt{C:\Lcs{}FONTS\Lcs{}TFM\Lcs{}}\\
+% \meta{tfm--base--dir}&
+% \texttt{/usr/local/lib/texmf/fonts/source/}&
+% \texttt{C:\Lcs{}TEX\Lcs{}MFINPUTS\Lcs{}}\\
+% \hline
+% \end{tabular}
+% \caption{Common directory names.}
+% \end{table}
+%
+% \subsection{The \LaTeX\ and \NFSS\ Support}
+%
+% To use the \universal{} font with \LaTeXe{}\footnote{I have made
+% \emph{no} attempt to provide support for \LaTeX2.09, since this
+% format is obsolete, and those who \emph{do} use it, will proberly
+% never bother to look at CTAN for new fonts anyway.}, you should load
+% the package \textsf{uni} with the command
+% \begin{quote}
+% \Lcs{usepackage}\oarg{options}\marg{uni}
+% \end{quote}
+% in your preamble (i.e., after \Lcs{documentclass} and before
+% \Lcs{begin\{document\}}). \meta{options} can be any of the options
+% described below, but no other.
+%
+% \subsubsection{Options to \textsf{uni}}
+%
+% \marginpar{\raggedright\texttt{strict}}
+% \index{strict=\texttt{strict}\space(Option)}
+% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{strict}.}
+% The \texttt{srict} option is intended to fassilitate typesetiing of
+% the \universal{} font in a \emph{strict} \textunibf{bauhaus}
+% fashion, that is \emph{only} in minuscules.
+%
+% In this font, only the series may be variated, that is, there is a
+% bold series strict shaped font of any size, and a medium series
+% strict shaped font of any size, in the \universal{} family.
+%
+% This option can be used in conjuntion with options \texttt{medium}
+% and \texttt{bold}. Please notice, that it doesn't make any sense to
+% ask for a small caps or slanted shaped font, while using this option.
+%
+% Notice that only \Lcs{textuni} and \Lcs{uni} is defined if option
+% \texttt{strict} was given to \textsf{uni} package.
+%
+% \marginpar{\raggedright\texttt{default}}
+% \index{default=\texttt{default}\space(Option)}
+% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{default}.}
+% If you give the \texttt{default} option to the \textsf{uni} package,
+% the default font of the document will be \textunirm{universal}.
+%
+% If you also used the option \texttt{bold} the default font will be
+% the \universal{} font in \textbf{bold} series. Otherwise it will be
+% in medium series.
+%
+% With this option, \Lcs{textit}, \Lcs{it}, and \Lcs{itshape} shifts
+% to \textunisl{universal slanted} font, i.e., there is no
+% \textit{italic} font avaliable.
+%
+% \DescribeMacro{\textcmr}
+% \DescribeMacro{\cmr}
+% To make it possible to change back to Donald E.\ Knuth's Computer
+% Modern Roman font, even when the \texttt{default} option is given,
+% we define macros \Lcs{textcmr} and \Lcs{cmr}, which switches the
+% \Lcs{fontfamily} to \texttt{cmr} locally and gobally respecivly.
+%
+% You should use this option with some care, since the \universal{}
+% font isn't very suited for longer texts, but rather for short
+% letters, quotes, and other pieces of text where the graphical
+% apperance is important.
+%
+% \marginpar{\raggedright\texttt{medium}}
+% \index{medium=\texttt{medium}\space(Option)}
+% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{medium}.}
+% When this option is given, command \Lcs{textuni} switches to
+% \textunirm{medium series universal font}, as do \Lcs{uni}. The other
+% font selection commands behave as always (see below). This is the
+% default option to \textsf{uni}, i.e., not normally needed.
+%
+% \marginpar{\raggedright\texttt{bold}}
+% \index{bold=\texttt{bold}\space(Option)}
+% \Newestchanges{v2.0}{98/08/01}{Added options \texttt{bold}.}
+% If this option is given, commands \Lcs{textuni} and \Lcs{uni}
+% switches to \textunibf{bold series universal font}. Other font
+% selection commands behave as always (see below). Notice that it
+% makes no sense to give both option \texttt{medium} and option
+% \texttt{bold} to the \textsf{uni} package.
+%
+% \subsubsection{Font Selection Commands}
+%
+% \DescribeMacro{\textuni}\DescribeMacro{\uni}
+% These two commands only change the current font family to
+% \texttt{uni} \emph{and nothing else}. That means, that if you say
+% for example
+% \begin{verbatim}
+% {\sl Hello \textuni{world}}
+% \end{verbatim}
+% you get \emph{both} `Hello' and `world' in slanted shape, and the
+% output would be
+% \begin{quote}
+% {\sl Hello \textuni{world}}
+% \end{quote}
+% To put it in another way: Font encoding, shape, size, and
+% baselineskip is preserved under \Lcs{textuni} and \Lcs{uni}, while
+% font family is not.
+%
+% \textbf{Execptions:} If you gave the \texttt{bold} option to the
+% \textsf{uni} package, then this command will always give you a bold
+% series font. If you gave the \texttt{strict} option, then this
+% command will always give you a strict shaped font.
+%
+% These commands can be used in conjuntion with \LaTeX{} commands
+% \Lcs{textbf}, \Lcs{textsl}, and even \Lcs{sc}, or \Lcs{rm} to give
+% different series and shapes.
+%
+% \DescribeMacro{\textunirm}\DescribeMacro{\unirm}
+% If you in the previous example intended to shift to
+% \textunirm{medium upright universal} font you could instead have
+% used \Lcs{textunirm}, since this command \emph{does not} preserve
+% font shape, i.e., the shape is always changed to upright, regardless
+% of the prevouis shape. So if you said
+% \begin{verbatim}
+% {\sl Hello \textunirm{world}}
+% \end{verbatim}
+% you would get
+% \begin{quote}
+% {\sl Hello \textunirm{world}}
+% \end{quote}
+%
+% \DescribeMacro{\textunisl}\DescribeMacro{\unisl}
+% \DescribeMacro{\textunisc}\DescribeMacro{\unisc}
+% \DescribeMacro{\textunist}\DescribeMacro{\unist}
+% \label{expl:cmds}
+% Actually \Lcs{textunirm} and \Lcs{unirm} isn't the only commands
+% that aggresively changes most of the font
+% parameters. \Lcs{textunisl}, \Lcs{textunisc}, and \Lcs{textunist},
+% \emph{always} gives you \textunisl{medium slanted},
+% \textunisc{medium small caps}, and \textunist{medium strict}
+% respecitivly no matter what the values of \Lcs{f@shape} was before.
+%
+% \DescribeMacro{\textunibf}\DescribeMacro{\unibf}
+% \DescribeMacro{\textunibsl}\DescribeMacro{\unibsl}
+% \DescribeMacro{\textunibsc}\DescribeMacro{\unibsc}
+% \DescribeMacro{\textunibst}\DescribeMacro{\unibst}
+% In the same category is \Lcs{textunibf}, \Lcs{textunibsl},
+% \Lcs{textunibsc}, and \Lcs{textunist} which always changes the font
+% series to \textbf{bold}, along with change in shape (upright,
+% slanted, small caps, and strict in that order).
+%
+% All of the `aggresive' commands, \emph{do not} however change the
+% \emph{size} and \emph{baselineskip} of the font. This should be done
+% by using \LaTeX{} commands such as \Lcs{small}, \Lcs{Large},
+% \Lcs{fontsize}\marg{size}\marg{lineskip},
+% etc.
+%
+% Notice that the `aggresive' commands always changes to the
+% appropiate font series. That is, even if you gave the \texttt{bold}
+% option to \textsf{uni}, \Lcs{textunirm} will still give you
+% \textunirm{medium upright universal} font. This particular instance
+% illustrates the use of the aggresive commands quite well I think.
+%
+% To summerize: The `aggresive' commands \emph{doesn't} preserve
+% fammily, series and shapes, but \emph{does} preserve encoding, size,
+% and baslineskip.
+%
+% \textbf{Warning:} The font shifting commands \Lcs{textuni...} and
+% \Lcs{uni...} in this section is \emph{not} defined if you gave the
+% \texttt{strict} option to the \textsf{uni} package.
+%
+% \DescribeMacro{\unifamily}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unifamily} to
+% fasilitate easier and stronger font loading.}
+% One can also use the rather primitive command \Lcs{unifamily} in
+% conjunction with \Lcs{selectfont} as described in \ftnguide{}, to
+% change the font family to \universal{} if absolute control is
+% preferd.
+%
+% \Lcs{unifamily} is used by all the other font switching commands, so
+% if you redefine it, or \Lcs{unifamilydefault}, you could get strange
+% resault.
+%
+% \DescribeMacro{\unifamilydefault}
+% This command normally expands to \texttt{uni}, which is the `family'
+% name of the \universal{} package. If you redefine this command to be
+% something else, e.g., \texttt{cmr}, \Lcs{unifamily} will load
+% another font.
+%
+% \DescribeMacro{\uniseries}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{uniseries} to
+% fasilitate easier and stronger font loading.}
+% If the \texttt{bold} option to \textsf{uni} is used this command
+% will select the default series of the \universal{} font, defined in
+% \Lcs{uniseriesdefault}, which ofcourse defaults to \texttt{b}, i.e.,
+% bold series. if you redefine \Lcs{uniseriesdefault} to be
+% \texttt{m}, then \Lcs{uniseries} will select medium series
+% fonts.
+%
+% If \texttt{bold} option wasn't given, then this expands to nothing,
+% as do \Lcs{uniseriesdefault}.
+%
+% This command is used by \Lcs{textuni} and \Lcs{uni}.
+%
+% \DescribeMacro{\unishape}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unishape} to
+% fasilitate easier and stronger font loading.}
+% If the \texttt{strict} option to \textsf{uni} is used this command
+% will select the default shape of the \universal{} font, defined in
+% \Lcs{unishapedefault}, which ofcourse defaults to \texttt{st}, i.e.,
+% strict shape. If you redefine \Lcs{unishapedefault} to be
+% \texttt{n}, then \Lcs{uniseries} will select upright shaped fonts.
+%
+% If \texttt{strict} option wasn't given, then this expands to nothing,
+% as do \Lcs{unishapedefault}.
+%
+% This command is used by \Lcs{textuni} and \Lcs{uni}.
+%
+%
+% \DescribeMacro{\stshape}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{stshape} to make package
+% conform to \LaTeXe{} better.}
+% This command switches to \emph{strict} shape, i.e., all majuscules
+% will be typeset as minuscles. This makes it possible in a simple way
+% to typeset text in the way Herbert Bayer thought it should, as
+% evident from the citation above.
+%
+% This command uses the command \Lcs{stdefault}, which defaults to
+% \texttt{st}. If you redefine this to something alse, e.g.,
+% \texttt{sl} you will get a \textsl{slanted} font.
+%
+% This command is used by \Lcs{textunist}, \Lcs{textunibst},
+% \Lcs{unibst} and \Lcs{unist}, and is defined no matter waht options
+% you gave to the \textsf{uni} package.
+%
+% \textbf{Warning:} Since \emph{strict} is a non--standard shape, this
+% command should not be used outside the \universal{} font, since this
+% may give you unexpected resaults.
+%
+% \subsubsection{Special Character Commands}
+%
+% For the individual commands that makes various special characters,
+% please consult table~\ref{tab:characters} above.
+%
+% \subsubsection{Other Commands}
+%
+% \DescribeMacro{\k}
+% The macro \Lcs{k} used in the \universal{} font gives the accent
+% ogenek, that is a reversed cidelia accent. It takes one argument,
+% which shuold be a single letter, under which it puts the accent. For
+% example, you could say \Lcs{textuni\{}\Lcs{k\{a\}\}} and get
+% \textuni{\k{a}}.
+%
+% \DescribeMacro{\DeclareUniChar}
+% \Newestchanges{v2.0}{98/08/01}{Configuration of \textsf{uni} package
+% provided via the commands \Lcs{DeclareUniChar} and
+% \Lcs{DeclareUniCommand}.}
+% Now you can configure the special character commands of the font,
+% via the commands \Lcs{DeclareUniChar} and
+% \Lcs{DeclareUniCommand}. The commands defined via these commands
+% will only work in accordence with it's definition inside the
+% \universal{} font, and if defined elsewhere according to it's
+% definition there, else it will give an error message.
+%
+% \Lcs{DeclareUniChar} is used to define a command sequence
+% representing a single character in the \universal{} font, much like
+% \Lcs{DeclareTextSymbol}, or in \TeX{} \Lcs{chardef}, though the
+% control sequence will produce an error message outside the
+% \universal{} font, and properle unexpected resaults outside the
+% \texttt{OT1} encoding\footnote{This should not be a problem.}.
+%
+% \Lcs{DeclareUniCommand} is used to define control sequences inside
+% the \universal{} font, representing many characters or doing complex
+% manuvers on characters and stuff. The optional argument to
+% \Lcs{DeclareUniCommand} can be used to say how many arguments the
+% control sequence should have, just like \Lcs{newcommand}. However,
+% it is not possible to give a default first argument.
+%
+% The below defintion uses the \textsf{color} package to typeset a
+% square, circle, and triangle in different colours\footnote{Since the
+% documentation should be avaliable to all, I can not provide you with
+% the outcome of this example, since it needs the \textsf{color}
+% package wich may not be avaliable on all sites. I suggest you try
+% it out, or something similar, if you can.}.
+% \begin{verbatim}
+% \DeclareUniCommand{\mybauforms}{%
+% \lower.5ex\hbox{\color{blue}\bautriangle}%
+% \kern-.5em\raise.5ex\hbox{\color{read}\baucircle}%
+% \kern-.5em\lower.5ex\hbox{\color{yellow}\bausquare}}
+% \end{verbatim}
+% Yet another example, using arguments could be
+% \begin{verbatim}
+% \DeclareUniCommand{\mybaulogo}[1]{\bauhead\ {\Large #1}}
+% \end{verbatim}
+% so you could say \verb+\mybaulogo{Christian Holm}+ and get:
+% \begin{quote}
+% {\uni \bauhead {\Large Christian Holm}}
+% \end{quote}
+% and I bet you can come up with some even more useful and complex
+% commands.
+%
+% The syntax of \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand} is
+% \begin{quote}
+% \Lcs{DeclareUniChar}\marg{cmd}\marg{slot}\newline
+% \Lcs{DeclareUniCommand}\marg{cmd}\oarg{arg}\marg{definition}
+% \end{quote}
+% where \meta{cmd} is the user command defined, \meta{slot} is the
+% number of the character in the font, \meta{arg} is the number of
+% arguments and \meta{definition} is what \meta{cmd} does.
+%
+% \subsubsection{File Names for the \LaTeX{} files}
+%
+% All the \LaTeX{} files contain the three letters \texttt{uni}, to
+% reflect the connectedness of the files. The font definition files
+% all start with the letter code appropiate for the encodeing.
+%
+% To follow the scheme of the \MF{} files, it would be appropiate to
+% place all \LaTeX{} files in\newline
+% \indent\meta{tex--base--dir}\footnote{On \textsf{Unix}--like systems
+% \meta{tex--base--dir} is usually something like
+% \texttt{/usr/local/lib/texmf/}, and on \textsf{MSDOS}--like systems
+% something like \texttt{C:\Lcs{}TEX}\Lcs{}
+% .}\texttt{/tex/latex/universa/}
+%
+% \subsection{The Major differences between version 1.0 and 2.0}
+%
+% \paragraph{First of:} \emph{a lot} of bugs and errors has been
+% corrected. In version~1.0, I had made the (stupid) mistake of
+% calling the macro \textuni{mode\_setup} before I defined the
+% unsharped units. Ofcourse a quick look in the \MFbook{} showed be
+% just how stupid this is. This made the font very vunerable to mode
+% specifications, which ofcourse isn't the idea.
+%
+% \paragraph{Secondly:} I chose a completly new approach to the
+% character programs, which resaultet in \texttt{unibase.mf}. The idea
+% is to define a few macros, and then utilize those in the character
+% programs, so that these programs can be kept simple, efficient, and
+% intuitive.
+%
+% A quick look at \texttt{unibase.mf} will also reveal that I chose a
+% new way of adjusting the characters. This means that the macros
+% \texttt{bauhaus...} present in version~1.0 no longer is needed, and
+% since they only tended to ubscure things rather then simplify them,
+% I went back to the plain \MF{} macro \texttt{beginchar}, which is
+% much stronger.
+%
+% All in all, \texttt{unibase.mf} provides a much stronger and uniform
+% frame work for character design, then did the old
+% \texttt{universal.mf}.
+%
+% \paragraph{Thirdly:} The file names have been keept inside
+% \textsc{msdos} conventions, that is first name of maximum 8
+% charcaters, and last name of maximum 3 characters. This does mean,
+% however, that some file names are not intutive, but I have tried to
+% make them as much as I could.
+%
+% Also, every file associated with this font, execpt the font
+% definition files (\texttt{*uni.fd}), and font driver files
+% (\texttt{ful*.mf}) begins with the three letters \texttt{uni}, to
+% emphasize the connection.
+%
+% \paragraph{Fouthly:} Some new font shapes are avaliable, as
+% explained above. I found out, during the design of the characters,
+% that new the base file \texttt{unibase.mf} kept showing new
+% potentiality, and the extension of the font to include more shapes
+% was very easy inside the frame of this base, so I thought ``What the
+% heck!''
+%
+% \paragraph{Fifthly:} Some of the \textuni{bauhaus} symbols avaliable
+% in version~1.0, has been taken out, and some new, more general
+% characters have been added. Most of the absent symbols where not
+% really of general use, so I decided to take them out, since I was
+% never really satisfied with those anyway. This also made the font
+% contain exactly 128 characters, just like a normal Computer Modern
+% Roman font.
+%
+% \paragraph{Sixthly:} I improved the \LaTeX{} and \NFSS{} support
+% considerably. The changes are legion, but let me sum up the most
+% important here.
+% \begin{enumerate}
+% \item Stronger font selection commands.
+% \item Command names that should be more intuitive.
+% \item Preperations for \texttt{T1} encoding.
+% \item Conformation to \LaTeXe{} style, and therefore a better
+% chance to conform with the future \LaTeX3 format.
+% \item More and better options.
+% \end{enumerate}
+%
+% \StopEventually{\AtEndDocument{\PrintIndex\PrintChanges}}
+%
+%\iffalse
+%<*package>
+%\fi
+% \section{\LaTeX\ Support Files}
+%
+% \subsection{The style file --- \texttt{uni.sty}}
+% \file{uni.sty}
+%
+% In version~2.0, the commands in this file has been redefined using
+% the macros recommended in \ftnguide{} and \clsguide{}. This should
+% make the commands and macros more portable, and secure. Further, it
+% should make it upward--compatiable with future releases of other
+% packages and in the end \LaTeX3.
+%
+% \subsubsection{Intilalizing}
+%
+% First we need to identify the package, its version and release date,
+% etc.
+%
+% \begin{macrocode}
+\ProvidesPackage{uni}[\unifiledate\space\unifileversion\space universal
+ package.]
+% \end{macrocode}
+%
+% \begin{macro}{\if@uni}
+% \begin{macro}{\@unifalse}
+% \begin{macro}{\@unitrue}
+% \begin{macro}{\if@strict}
+% \begin{macro}{\@strictfalse}
+% \begin{macro}{\@stricttrue}
+% \begin{macro}{\ifdef@ult}
+% \begin{macro}{\def@ultfalse}
+% \begin{macro}{\def@ulttrue}
+% \begin{macro}{\ifm@dium}
+% \begin{macro}{\m@diumfalse}
+% \begin{macro}{\m@diumtrue}
+% Then we setup some new \Lcs{if} commands, to help in different
+% sitations, depending on options passed to the package etc.
+% \begin{macrocode}
+\newif\if@uni\@unifalse
+\newif\ifstri@t\stri@tfalse
+\newif\ifdef@ult\def@ultfalse
+\newif\ifm@dium\m@diumfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Options}
+%
+% We define some options that can be passed to the package.
+% Option \texttt{strict} is intended to make it possible to do
+% \emph{strict} Herbert Bayer typesetting, that is only in
+% minuscles. Option \texttt{default} will make the \emph{default} font
+% \universal{} of the entire document, while option
+% \texttt{medium} and \texttt{bold} decides wether the default font
+% used by \Lcs{textuni} is normal or bold series. Finally option
+% \texttt{medium} is declared default.
+% \begin{macrocode}
+\DeclareOption{strict}{\stri@ttrue}
+\DeclareOption{default}{\def@ulttrue}
+\DeclareOption{medium}{\m@diumtrue}
+\DeclareOption{bold}{\m@diumfalse}
+\ExecuteOptions{medium}
+\ProcessOptions\relax
+
+% \end{macrocode}
+%
+% \subsubsection{Special Characters}
+%
+% \begin{macro}{\uni@init}
+% \begin{macro}{\DeclareUniChar}
+% \Newestchanges{v2.1}{2018/08/26}{Prevent expansion of as-of-yet not
+% defined arguments. Thanks to Scott Pakin.}
+% \changes{v2.0}{98/08/01}{Added for faster and more stable
+% loading of special charactes.}
+% \begin{macro}{\DeclareUniCommand}
+% \changes{v2.0}{98/08/01}{Added for faster and more stable
+% decleration of \universal{} commands.}
+% \begin{macro}{\Declare@Uni}
+% \begin{macro}{\DeclareUni@xarg}
+% \begin{macro}{\DeclareUni@narg}
+% \begin{macro}{\UniError}
+% To facilitate the special character positions of the \universal{}
+% font, we define the internal commands \Lcs{uni@init}, and the user
+% commands \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand}.
+%
+% \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand} is very much like
+% the \LaTeX{} commands \Lcs{DeclareTextSymbol} and
+% \Lcs{DeclareTextCommand}, execpt we have to take into account, that
+% the commands may very well be defined in \texttt{ot1enc.def} or the
+% like. Since some of the characters provided with this font, is
+% usually part of an 8 bit font, I can't just use the character
+% numbers straight of (this is a 7 bit font), and I have some very
+% non--standard characters as well.
+%
+% Though the two commands differ a bit, the main mechanism is the
+% same, so I will explain them together, and note the
+% differences\footnote{The syntax of the macroes are explanied on
+% page~\pageref{expl:cmds}.} .
+% \begin{enumerate}
+% \item When either of the commands is used, we first call the macro
+% \Lcs{Declare@uni}, which sets up 2 or 3 commands.
+% \item Inside \Lcs{Declare@Uni}, we define \Lcs{temp@a} to be
+% \Lcs{uni@}\meta{cmd-name}, where \meta{cmd-name} is \meta{cmd}
+% stripped of the escape character (\Lcs{}).
+% \item Then we check wether \Lcs{cmd} is defined.
+% \begin{itemize}
+% \item If \meta{cmd} \emph{isn't} defined, then we define
+% \Lcs{temp@c} to give \Lcs{uni@}\meta{cmd-name} (which isn't
+% defined yet) inside the \universal{} font, otherwise an error
+% message (\Lcs{UniError}).
+% \item If \meta{cmd} \emph{is} defined, we define \Lcs{temp@b} to
+% be \Lcs{no@uni@}\meta{cmd-name}, \Lcs{temp@c} to give
+% \Lcs{uni@}\meta{cmd-name} inside the \universal{} font, and
+% \Lcs{no@uni@}\meta{cmd-name} (which isn't defined yet)
+% elsewhere. Then we define \Lcs{no@uni@}\meta{cmd-name} to be
+% what \meta{cmd} currently is.
+% \end{itemize}
+% This finishes \Lcs{Declare@Uni} off.
+% \item The next step depends a bit on which of the macros that is
+% utiliezed. What is coomon is that \Lcs{uni@}\meta{cmd-name} (hold
+% in \Lcs{temp@a}) is defined to be the last argument of the command.
+% \begin{itemize}
+% \item In \Lcs{DeclareUniChar}, we define \Lcs{uni@}\meta{cmd-name}
+% via the \TeX{} command \Lcs{chardef} to be \meta{slot}, which
+% should be a number (decimal, octal, or hexal) between 0 and
+% 127. Using the \TeX{} primitive will make \LaTeX{} think of
+% \meta{cmd} as a single character.
+% \item If \Lcs{DeclareUniCommand} was given an optional argument,
+% we use the command \Lcs{DeclareUni@xarg} to define
+% \Lcs{uni@}\meta{cmd-name} --- which uses \Lcs{newcommand} with
+% \emph{one} optinal argument --- to be
+% \meta{definition}. Otherwise we use \Lcs{DeclareUni@narg} ---
+% which uses \Lcs{newcommand} with \emph{no} optinal arguments ---
+% to do the trick.
+% Using the \LaTeX{} complex \Lcs{newcommand}, makes \meta{cmd} a
+% strong command.
+% \end{itemize}
+% \item Finally we define \meta{cmd} to be \Lcs{temp@d}, which was the
+% conditional command defined in step 2.
+% \end{enumerate}
+%
+% Notice the use of \Lcs{aftergroup}. This means that \meta{cmd-name}
+% shouldn't be too long, i.e., $>300$ characters, which isn't a real
+% limitation, but now I said it. This macro, together with the group
+% in \Lcs{temp@c} is what made it possible to give arguments to
+% \meta{cmd} defined by \Lcs{DeclareUniCommand}.
+%
+% This way of doing things has a number of benefiets. 1) First of I
+% makes it very simple to redefine the behaviour of the \universal{}
+% speciffic character commands. All you have to do is to use
+% \Lcs{DeclareUniChar} or \Lcs{DeclareUniChar} in your preamble (and
+% \emph{only} there). 2) Since \TeX{} are faster at evaluating
+% \Lcs{if...}'s, switching to \universal{} commands should take a
+% minimum amount of time. 3) From a portability point of view, this
+% way of shifting meanings of commands such as \Lcs{textquotedblleft},
+% according to context, doesn't screw up older documents where the
+% \textsf{uni} package is added to.
+%
+% There are some disadvantage. 1) Most noticably there is \emph{no}
+% conformation to \emph{any} existing encoding, which however is a
+% problem of the in the font, not the \textsf{uni} package. 2)
+% The heavy use of \Lcs{def}, \Lcs{edef}, and \Lcs{let}, is not
+% exactly \LaTeX3 policy, but is needed here. 3) The definition of the
+% commands may slow \TeX{} down a bit, but should be bearable.
+% \begin{macrocode}
+\newcommand{\uni@init}{\@unitrue}
+\DeclareRobustCommand{\Declare@Uni}[1]{%
+ \edef\temp@{\expandafter\@gobble\string#1}
+ \edef\temp@a{\csname uni@\temp@\endcsname}
+ \@ifundefined{\temp@}{%
+ \edef\temp@c{{%
+ \noexpand\if@uni\noexpand\aftergroup\temp@a\noexpand%
+ \else\noexpand\UniError{\noexpand#1}\noexpand\fi}}}{%
+ \edef\temp@b{\csname no@uni@\temp@\endcsname}
+ \edef\temp@c{{%
+ \noexpand\if@uni\noexpand\aftergroup\temp@a\noexpand%
+ \else\noexpand\aftergroup\temp@b\noexpand\fi}}
+ \expandafter\let\temp@b#1}}
+\DeclareRobustCommand{\DeclareUniChar}[2]{%
+ \Declare@Uni{#1}
+ \expandafter\chardef\temp@a=#2
+ \let#1\temp@c}
+\def\DeclareUniCommand#1{%
+ \@ifnextchar[{\DeclareUni@xarg#1}{\DeclareUni@narg#1}}
+\def\DeclareUni@xarg#1[#2]#3{%
+ \Declare@Uni{#1}
+ \expandafter\DeclareRobustCommand\temp@a[#2]{#3}
+ \let#1\temp@c}
+\def\DeclareUni@narg#1#2{%
+ \Declare@Uni{#1}
+ \expandafter\DeclareRobustCommand\temp@a{#2}
+ \let#1\temp@c}
+\@onlypreamble\DeclareUniChar\relax
+\@onlypreamble\DeclareUniCommand\relax
+\DeclareRobustCommand{\UniError}[1]{%
+ \PackageError{uni}{%
+ Command \string#1 not defined outside universal font.}{%
+ Correct your source file, so that \string#1 doesn't appear^^J%
+ ouside of universal font, then run LaTeX again.^^J%
+ Prepare your self for some gastly output.}}
+% \expandafter\show\csname no@uni@\temp@\endcsname
+% \expandafter\show\csname uni@\temp@\endcsname
+% \expandafter\show\csname \temp@\endcsname
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bausquare}
+% \Newestchanges{v2.0}{98/08/01}{\universal{} specific
+% characters declared by seperate macro.}
+% \begin{macro}{\baucircle}
+% \begin{macro}{\bautriangle}
+% \begin{macro}{\bauhead}
+% \begin{macro}{\bauforms}
+% \begin{macro}{\dh}
+% \begin{macro}{\ng}
+% \begin{macro}{\th}
+% \begin{macro}{\varQ}
+% \begin{macro}{\NG}
+% \begin{macro}{\TH}
+% \begin{macro}{\textogonek}
+% \begin{macro}{\textbraceleft}
+% \begin{macro}{\textbraceright}
+% \begin{macro}{\textsection}
+% \begin{macro}{\textbar}
+% \begin{macro}{\guilsinglleft}
+% \begin{macro}{\guilsinglright}
+% \begin{macro}{\textquotedblleft}
+% \begin{macro}{\textquotedblright}
+% \begin{macro}{\quotesinglbase}
+% \begin{macro}{\quotedblbase}
+% \begin{macro}{\guillemoleft}
+% \begin{macro}{\guillemoright}
+% \begin{macro}{\k}
+% \begin{macro}{\DH}
+% \begin{macro}{\DJ}
+% \begin{macro}{\dj}
+% \begin{macro}{\textunderscore}
+% This command takes care of commands for non--standard placement, and
+% symbols in the \universal{} font, while using standard \LaTeXe{}
+% encodings, such as \texttt{OT1}.
+%
+% For instance, the symbols \textunibf{\}}, \textunibf{\{} isn't
+% present in Computer Modern fonts, but is accesiable through the
+% command \Lcs{}\texttt{\{}, and \Lcs{}\texttt{\}} in the \universal{}
+% font. On the other hand \char"00{} isn't present in this font, but
+% is replaced by \textunibf{\char"00}.
+%
+% Some of the commands avaliable are well--known to the \texttt{T1}
+% encodeing, and are provided with the same commmand names as in that
+% encoding.
+%
+% The decleration of these commands use my (slick) macros
+% \Lcs{DcelareUniChar} and \Lcs{DcelareUniCommand} --- very neat I
+% think.
+%
+% \begin{macrocode}
+\DeclareUniChar{\bausquare}{"00}
+\DeclareUniChar{\baucircle}{"01}
+\DeclareUniChar{\bautriangle}{"02}
+\DeclareUniChar{\bauhead}{"03}
+\DeclareUniChar{\bauforms}{"04}
+\DeclareUniChar{\dh}{"05}
+\DeclareUniChar{\ng}{"06}
+\DeclareUniChar{\th}{"07}
+\DeclareUniChar{\varQ}{"08}
+\DeclareUniChar{\NG}{"09}
+\DeclareUniChar{\TH}{"0A}
+\DeclareUniChar{\textogonek}{"0B}
+\DeclareUniChar{\textbraceleft}{"0C}
+\DeclareUniChar{\textbraceright}{"0D}
+\DeclareUniChar{\textsection}{"0E}
+\DeclareUniChar{\textbar}{"0F}
+\DeclareUniChar{\guilsinglleft}{"22}
+\DeclareUniChar{\guilsinglright}{"5C}
+\DeclareUniChar{\quotesinglbase}{"2C}
+\DeclareUniCommand{\quotedblbase}{\char"2C\kern-.3em\char"2C}
+\DeclareUniCommand{\textquotedblleft}{``}
+\DeclareUniCommand{\textquotedblright}{''}
+\DeclareUniCommand{\guillemoleft}{\char"22\char"22}
+\DeclareUniCommand{\guillemoright}{\char"5C\char"5C}
+\DeclareUniCommand{\DH}{\raise.5ex\hbox{\char"2D}\kern-.5em D}
+\DeclareUniCommand{\DJ}{\raise.5ex\hbox{\char"2D}\kern-.5em D}
+\DeclareUniCommand{\dj}{\raise.75ex\hbox{\char"2D}\kern-1em d}
+\DeclareUniCommand{\textunderscore}{\lower.5ex\hbox{\char"7B}}
+\DeclareUniCommand{\k}[1]{%
+ \leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1%
+ \else{\ooalign{\unhbox\z@\crcr\hidewidth\char11\hidewidth}}\fi}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Font Selection}
+%
+% \begin{macro}{\unifamily}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unifamily} to
+% fasilitate easier and stronger font loading.}
+% The real command. This switches to \universal{} font, and can
+% be used by authors in conjunction with \LaTeXe{} primitive
+% \Lcs{selectfont}. \Lcs{unifamily} is used below in \Lcs{textuni...},
+% and \Lcs{uni...}.
+%
+% \begin{macro}{\unifamilydefault}
+% \changes{v2.0}{98/08/01}{Defined to make package conform to
+% \LaTeXe{} better.}
+% Here \Lcs{unifamilydefault} is by default defined to be
+% \texttt{uni}, but could ofcourse expand to something
+% different. However, the expnasion should be a font family (like
+% \texttt{cmr}) or the like.
+%
+% \begin{macrocode}
+\DeclareRobustCommand\unifamily{%
+ \not@math@alphabet\unifamily\relax%
+ \fontfamily\unifamilydefault\selectfont}
+\newcommand{\unifamilydefault}{uni}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\uniseries}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{uniseries} to
+% fasilitate easier and stronger font loading.}
+% If the \texttt{bold} option is used with the \textsf{uni} package,
+% then this command switches to whatever series is defined via
+% \Lcs{uniseriesdefault} (default is \textbf{bold} series), otherwise
+% it does nothing. Since this command is used in \Lcs{textuni} and
+% \Lcs{uni}, this way will not allow anyother series if \texttt{bold}
+% option is given, expect \textbf{bold}. However, if \texttt{bold}
+% isn't given, then \emph{any} series is possible.
+%
+% \begin{macro}{\uniseriesdefault}
+% \changes{v2.0}{98/08/01}{Defined to make package conform to
+% \LaTeXe{} better.}
+% Here \Lcs{uniseriesdefault} is defined to be \texttt{b}
+% (\textbf{medium}) if the \texttt{bold} option \emph{was} given to
+% \textsf{uni} package. Otherwise it expans to nothing
+% (\Lcs{relax}). This macro is used by \Lcs{uniseries}.
+% \begin{macrocode}
+\ifm@dium
+ \let\uniseries\relax
+ \let\uniseriesdefault\relax
+\else
+ \DeclareRobustCommand\uniseries{%
+ \not@math@alphabet\uniseries\relax%
+ \fontseries\uniseriesdefault\selectfont}
+ \newcommand{\uniseriesdefault}{b}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\unishape}
+% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unishape} to
+% fasilitate easier and stronger font loading.}
+% If the \texttt{strict} option is used with the \textsf{uni} package,
+% then this command switches to whatever shape is defined via
+% \Lcs{unishapedefault} (default is \emph{strict} shape), otherwise
+% it does nothing. Since this command is used in \Lcs{textuni} and
+% \Lcs{uni}, this way will not allow anyother shape if \texttt{strict}
+% option is given, expect \emph{strict}. However, if \texttt{strict}
+% isn't given, then \emph{any} series is possible.
+%
+% \begin{macro}{\unishapedefault}
+% \changes{v2.0}{98/08/01}{Defined to make package conform to
+% \LaTeXe{} better.}
+% Here \Lcs{unishapedefault} is defined to be \texttt{st}
+% (\emph{strict}) if the \texttt{strict} option \emph{was} given to
+% \textsf{uni} package. Otherwise it expans to nothing
+% (\Lcs{relax}). This macro is used by \Lcs{unishape}.
+% \begin{macrocode}
+\ifstri@t
+ \DeclareRobustCommand\unishape{%
+ \not@math@alphabet\unishape\relax%
+ \fontseries\unishapedefault\selectfont}
+ \newcommand{\unishapedefault}{st}
+\else
+ \let\unishape\relax
+ \let\unishapedefault\relax
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\stshape}
+% \changes{v2.0}{98/08/01}{Defined \Lcs{stshape} to make package
+% conform to \LaTeXe{} better.}
+% This command selects the shape holded by \Lcs{stdefault} (defaults
+% to \texttt{st} --- strict) in any family or series. This is used by
+% commands \Lcs{textunist}, \Lcs{textunibst}, \Lcs{unist}, and
+% \Lcs{unibst}.
+%
+% \begin{macro}{\stdefault}
+% \changes{v2.0}{98/08/01}{Defined to make package conform to
+% \LaTeXe{} better.}
+% The shape selected by \Lcs{stshape}.
+% \begin{macrocode}
+\DeclareRobustCommand\stshape{%
+ \not@math@alphabet\stshape\relax%
+ \fontshape\stdefault\selectfont}
+\newcommand{\stdefault}{st}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Local Font Selection}
+% \begin{macro}{\textuni}
+% \Newestchanges{v2.0}{98/08/01}{\Lcs{textbayer} changed to
+% \Lcs{textuni}, and defined using \LaTeXe{} scheme.}
+% \begin{macro}{\textunirm}
+% \begin{macro}{\textunibf}
+% \begin{macro}{\textunisl}
+% \begin{macro}{\textunisc}
+% \begin{macro}{\textunibsl}
+% \begin{macro}{\textunibsc}
+% These are the macros that switches to \universal{} font,
+% locally, i.e., for a few words, in various series and shapes. The
+% names are pretty selfexplanetory, I think. These macros will
+% \emph{always} change the font series and shape accroding to it's
+% definiton, nothing more, and nothing less, exepct \Lcs{textuni},
+% which only changes the cuurent family to \texttt{uni}. Notice it
+% simply uses the \Lcs{unifamily} command to do the trick.
+%
+% The second argument to \Lcs{DeclareTextFontCommand} should not
+% normally contain commands that typeset, or commands not relevant to
+% the selection of fonts, but to make up for the non--default
+% characeters and character placements, we \emph{do} include
+% \Lcs{uni@init} in the argument.
+%
+% Notice that only \Lcs{textuni} is defined if option \texttt{strict}
+% was given to \textsf{uni} package.
+% \begin{macrocode}
+\DeclareTextFontCommand{\textuni}{%
+ \uni@init\unifamily\uniseries\unishape}
+\ifstri@t
+\else
+ \DeclareTextFontCommand{\textunirm}{%
+ \uni@init\unifamily\mdseries\upshape}
+ \DeclareTextFontCommand{\textunibf}{%
+ \uni@init\unifamily\bfseries\upshape}
+ \DeclareTextFontCommand{\textunisl}{%
+ \uni@init\unifamily\mdseries\slshape}
+ \DeclareTextFontCommand{\textunisc}{%
+ \uni@init\unifamily\mdseries\scshape}
+ \DeclareTextFontCommand{\textunist}{%
+ \uni@init\unifamily\mdseries\stshape}
+ \DeclareTextFontCommand{\textunibsl}{%
+ \uni@init\unifamily\bfseries\slshape}
+ \DeclareTextFontCommand{\textunibsc}{%
+ \uni@init\unifamily\bfseries\scshape}
+ \DeclareTextFontCommand{\textunibst}{%
+ \uni@init\unifamily\bfseries\stshape}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Global Font Selection}
+% \begin{macro}{\uni}
+% \Newestchanges{v2.0}{98/08/01}{\Lcs{bayer} changed to \Lcs{uni}}
+% \begin{macro}{\unibf}
+% \begin{macro}{\unibf}
+% \begin{macro}{\unisl}
+% \begin{macro}{\unisc}
+% \begin{macro}{\unibsl}
+% \begin{macro}{\unibsc}
+% These macros works as \Lcs{textuni...} above, execpt the take effect
+% from the point used, to the end of the current group. Again font
+% selection is \emph{exactly} as given in the command name, execpt for
+% \Lcs{uni} which only changes the family.
+%
+% Notice that only \Lcs{uni} is defined if option \texttt{strict}
+% was given to \textsf{uni} package.
+% \begin{macrocode}
+\DeclareOldFontCommand{\uni}{%
+ \uni@init\unifamily\uniseries\unishape}{}
+\ifstri@t
+\else
+ \DeclareOldFontCommand{\unirm}{%
+ \uni@init\unifamily\mdseries\upshape}{}
+ \DeclareOldFontCommand{\unibf}{%
+ \uni@init\unifamily\bfseries\upshape}{}
+ \DeclareOldFontCommand{\unisl}{%
+ \uni@init\unifamily\mdseries\slshape}{}
+ \DeclareOldFontCommand{\unisc}{%
+ \uni@init\unifamily\mdseries\scshape}{}
+ \DeclareOldFontCommand{\unist}{%
+ \uni@init\unifamily\mdseries\stshape}{}
+ \DeclareOldFontCommand{\unibsl}{%
+ \uni@init\unifamily\bfseries\slshape}{}
+ \DeclareOldFontCommand{\unibsc}{%
+ \uni@init\unifamily\bfseries\scshape}{}
+ \DeclareOldFontCommand{\unibst}{%
+ \uni@init\unifamily\bfseries\stshape}{}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{\texttt{default} Option Font}
+%
+% \begin{macro}{\ifdef@ult}
+% \begin{macro}{\def@ulttrue}
+% \begin{macro}{\def@ultfalse}
+% \begin{macro}{\ifm@dium}
+% \begin{macro}{\m@diumtrue}
+% \begin{macro}{\m@diumfalse}
+% Now if you gave the \texttt{default} option to the package,
+% \Lcs{ifdef@ult} evaluates to true, and so we setup the default font
+% to be \universal{}, in the medium or bold version, depending
+% on wether you gave the \texttt{medium} option or not.
+% \begin{macrocode}
+\ifdef@ult
+ \renewcommand{\familydefault}{uni}
+ \ifm@dium\renewcommand{\seriesdefault}{m}
+ \else\renewcommand{\seriesdefault}{b}\fi
+ \renewcommand{\itdefault}{sl}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cmrfamily}
+% \begin{macro}{\cmrdefault}
+% \begin{macro}{\textcmr}
+% \begin{macro}{\cmr}
+% We define \Lcs{cmrfamily} and \Lcs{cmrdefault} to change back to
+% Computer Modern Roman font, if so wanted. The macros \Lcs{textcmr}
+% and \Lcs{cmr} are the logical extensions of \Lcs{cmrfamily}.
+% \begin{macrocode}
+ \DeclareRobustCommand\cmrfamily{%
+ \not@math@alphabet\cmrfamily\relax%
+ \fontencoding\cmrenc\fontfamily\cmrdefault\selectfont}
+ \newcommand{\cmrdefault}{cmr}
+ \newcommand{\cmrenc}{OT1}
+ \DeclareTextFontCommand{\textcmr}{\cmrfamily}
+ \DeclareOldFontCommand{\cmr}{\cmrfamily}{}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%\iffalse
+%</package>
+%\fi
+% \subsection{The Font Definition Files --- \texttt{*uni.fd}}
+%
+% These files is needed in the New Font Selection Scheme, used by
+% \LaTeXe{}, but really isn't nessecary for pure \TeX{} or \LaTeX2.09
+% users, but since those are treathned races, I did put in the extra
+% effort and made the files.
+%
+% What they really do, is to speciffy what font driver file should be
+% loaded when the user swichtes font. Notice, alot of the font shapes
+% etc.\ avaliable in the Computer Modern Roman scheme isn't avaliable
+% in the \universal{} font, so we substitute with whatever is
+% closest, something from the \universal{} or Computer Modern
+% Roman scheme.
+%
+% The reason why the file names may look a bit wierd, is to make the
+% font conform to the standard set by \texttt{fontname} used by
+% \texttt{kpathsea} in most \TeX{}, \LaTeX{}, and \MF{} systems.
+%
+% \paragraph*{Math Encoding}\file{oml.fd}
+% First comes the the font definition file for \emph{math}, but since
+% no math characters is defined in the \universal{} font, we
+% substitute with the relevant fonts from Computer Modern Roman.
+%\iffalse
+%<*oml>
+%\fi
+% \begin{macrocode}
+\ProvidesFile{omluni.fd}
+ [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions]
+\DeclareFontFamily{OML}{uni}{\skewchar\font127 }
+\DeclareFontShape{OML}{uni}{m}{n}{<-> ssub * cmm/m/it}{}
+\DeclareFontShape{OML}{uni}{m}{it}{<-> ssub * cmm/m/it}{}
+\DeclareFontShape{OML}{uni}{m}{sl}{<-> ssub * cmm/m/it}{}
+\DeclareFontShape{OML}{uni}{m}{sc}{<-> ssub * cmm/m/it}{}
+\DeclareFontShape{OML}{uni}{bx}{n}{<-> ssub * cmm/b/it}{}
+\DeclareFontShape{OML}{uni}{bx}{it}{<-> ssub * cmm/b/it}{}
+\DeclareFontShape{OML}{uni}{bx}{sl}{<-> ssub * cmm/b/it}{}
+\DeclareFontShape{OML}{uni}{bx}{sc}{<-> ssub * cmm/b/it}{}
+
+% \end{macrocode}
+%\iffalse
+%</oml>
+%\fi
+%
+% \paragraph*{Symbols Encoding}\file{omsuni.fd}
+% Next is the definitions for \emph{symbols} fonts, but as above,
+% there is no seperate symbol font defined for the \universal{}
+% font, so we substitute for default.
+%\iffalse
+%<*oms>
+%\fi
+% \begin{macrocode}
+\ProvidesFile{omsuni.fd}
+ [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions]
+\DeclareFontFamily{OMS}{uni}{\skewchar\font48 }
+\DeclareFontShape{OMS}{uni}{m}{n}{<-> ssub * cmsy/m/n}{}
+\DeclareFontShape{OMS}{uni}{m}{it}{<-> ssub * cmsy/m/n}{}
+\DeclareFontShape{OMS}{uni}{m}{sl}{<-> ssub * cmsy/m/n}{}
+\DeclareFontShape{OMS}{uni}{m}{sc}{<-> ssub * cmsy/m/n}{}
+\DeclareFontShape{OMS}{uni}{bx}{n}{<-> ssub * cmsy/b/n}{}
+\DeclareFontShape{OMS}{uni}{bx}{it}{<-> ssub * cmsy/b/n}{}
+\DeclareFontShape{OMS}{uni}{bx}{sl}{<-> ssub * cmsy/b/n}{}
+\DeclareFontShape{OMS}{uni}{bx}{sc}{<-> ssub * cmsy/b/n}{}
+
+% \end{macrocode}
+%\iffalse
+%</oms>
+%\fi
+%
+% \paragraph*{Normal Encoding}\file{ot1uni.fd}
+% Now the definitions for the normal font. This \emph{is} ofcourse
+% defined, anything else would be ludicruis. It is very straight
+% forward most of the way. However, notice the substitutions at the
+% end of the file.
+%
+%\iffalse
+%<*ot1>
+%\fi
+% \begin{macrocode}
+\ProvidesFile{ot1uni.fd}%
+ [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions]
+\DeclareFontFamily{OT1}{uni}{\hyphenchar\font45 }
+
+% \end{macrocode}
+% Next comes the specifications of what to load in \textunirm{normal
+% upright shape}
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{m}{n}{
+ <5><6><7><8>fulmr8
+ <9>fulmr9
+ <10><10.95>fulmr10
+ <12><14.4>fulmr12
+ <17.28><20.74><24.88>fulmr17
+ }{}
+
+% \end{macrocode}
+% Next comes the specifications of what to load in \textunisl{normal
+% slanted shape}
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{m}{sl}{
+ <5><6><7><8>fulmo8
+ <9>fulmo9
+ <10><10.95>fulmo10
+ <12><14.4>fulmo12
+ <17.28><20.74><24.88>fulmo17
+ }{}
+
+% \end{macrocode}
+% Now for \textunisc{small caps medium} definitions.
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{m}{sc}{
+ <5><6><7><8>fulmc8
+ <9>fulmc9
+ <10><10.95>fulmc10
+ <12><14.4>fulmc12
+ <17.28><20.74><24.88>fulmc17
+ }{}
+
+% \end{macrocode}
+% Now for \textunist{strict medium} definitions.
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{m}{st}{
+ <5><6><7><8>fulmst8
+ <9>fulmst9
+ <10><10.95>fulmst10
+ <12><14.4>fulmst12
+ <17.28><20.74><24.88>fulmst17
+ }{}
+
+% \end{macrocode}
+% Next comes the specifications of what to load in \textunibf{bold
+% face upright shape}
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{b}{n}{
+ <5><6><7><8>fulbr8
+ <9>fulbr9
+ <10><10.95>fulbr10
+ <12><14.4>fulbr12
+ <17.28><20.74><24.88>fulbr17
+ }{}
+
+% \end{macrocode}
+% Next comes the specifications of what to load in
+% \textunibsl{bold face slanted shape}
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{b}{sl}{
+ <5><6><7><8>fulbo8
+ <9>fulbo9
+ <10><10.95>fulbo10
+ <12><14.4>fulbo12
+ <17.28><20.74><24.88>fulbo17
+ }{}
+
+% \end{macrocode}
+% And \textunibsc{small caps bold face} definitions.
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{b}{sc}{
+ <5><6><7><8>fulbc8
+ <9>fulbc9
+ <10><10.95>fulbc10
+ <12><14.4>fulbc12
+ <17.28><20.74><24.88>fulbc17
+ }{}
+
+% \end{macrocode}
+% And \textunibst{strict bold face} definitions.
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{b}{st}{
+ <5><6><7><8>fulbst8
+ <9>fulbst9
+ <10><10.95>fulbst10
+ <12><14.4>fulbst12
+ <17.28><20.74><24.88>fulbst17
+ }{}
+
+% \end{macrocode}
+%
+% Now for the substitutions. This is straight forward, that
+% is, upright slanted is substituted by upright; bold face condensed,
+% and bold face extra is substituted by boldface; and italic by
+% slanted\footnote{As mentioned earlier, one of the characteristics
+% of this dont, is that it has no serifs, so it would be strange
+% to include italics in this font.}.
+% \begin{macrocode}
+\DeclareFontShape{OT1}{uni}{m}{it}{<->ssub*uni/m/sl}{}
+\DeclareFontShape{OT1}{uni}{m}{ui}{<->ssub*uni/m/n}{}
+\DeclareFontShape{OT1}{uni}{b}{it}{<->ssub*uni/b/sl}{}
+\DeclareFontShape{OT1}{uni}{bx}{n}{<->ssub*uni/b/n}{}
+\DeclareFontShape{OT1}{uni}{bx}{sl}{<->ssub*uni/b/sl}{}
+\DeclareFontShape{OT1}{uni}{bx}{sc}{<->ssub*uni/b/sc}{}
+\DeclareFontShape{OT1}{uni}{bx}{st}{<->ssub*uni/b/st}{}
+\DeclareFontShape{OT1}{uni}{bx}{it}{<->ssub*uni/b/sl}{}
+\DeclareFontShape{OT1}{uni}{bc}{ui}{<->ssub*uni/b/n}{}
+\DeclareFontShape{OT1}{uni}{sbc}{n}{<->ssub*uni/b/n}{}
+
+% \end{macrocode}
+%\iffalse
+%</ot1>
+%\fi
+%
+% \paragraph*{T1 encoding}\file{t1uni.fd}
+% Since the T1 encoding relies on the font scheme of \texttt{exbase}
+% (EC fonts), and \texttt{dxbase} (DC fonts), by J\"org Knappen and
+% Nobert Schwartz, which is a whole new way of making fonts, that
+% requires some special messaures that I couldn't incorporate into the
+% \universal{} font without a whole lot of work, I chose not to
+% make support for the T1 scheme. Therefore this file issues a warning
+% and then exists the whole \LaTeX{} run. This may seem a bit drastic,
+% but it ensures that you don't get screwed up resuats.
+%\iffalse
+%<*t1>
+%\fi
+% \begin{macrocode}
+\ProvidesFile{t1uni.fd}
+ [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions]
+\typeout{WARNING: universal font not avaliable in t1 definition.}
+\typeout{WARNING: exiting, correct your source.}
+\stop
+
+% \end{macrocode}
+%\iffalse
+%</t1>
+%\fi
+%
+% \paragraph*{U Encoding}\file{uuni.fd}
+% This is similar to the normal encoding above, execpt encoding is U.
+%\iffalse
+%<*u>
+%\fi
+% \begin{macrocode}
+\ProvidesFile{uuni.fd}
+ [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions]
+\DeclareFontFamiliy{U}{uni}{\hyphenchar\font45}
+\DeclareFontShape{U}{uni}{m}{n}{
+ <5><6><7><8>fulmr8
+ <9>fulmr9
+ <10><10.95>fulmr10
+ <12><14.4>fulmr12
+ <17.28><20.74><24.88>fulmr17
+ }{}
+\DeclareFontShape{U}{uni}{m}{sl}{
+ <5><6><7><8>fulmo8
+ <9>fulmo9
+ <10><10.95>fulmo10
+ <12><14.4>fulmo12
+ <17.28><20.74><24.88>fulmo17
+ }{}
+\DeclareFontShape{U}{uni}{m}{sc}{
+ <5><6><7><8>fulmc8
+ <9>fulmc9
+ <10><10.95>fulmc10
+ <12><14.4>fulmc12
+ <17.28><20.74><24.88>fulmc17
+ }{}
+\DeclareFontShape{U}{uni}{m}{st}{
+ <5><6><7><8>fulmst8
+ <9>fulmst9
+ <10><10.95>fulmst10
+ <12><14.4>fulmst12
+ <17.28><20.74><24.88>fulmst17
+ }{}
+\DeclareFontShape{U}{uni}{b}{n}{
+ <5><6><7><8>fulbr8
+ <9>fulbr9
+ <10><10.95>fulbr10
+ <12><14.4>fulbf12
+ <17.28><20.74><24.88>fulbr17
+ }{}
+\DeclareFontShape{U}{uni}{b}{sl}{
+ <5><6><7><8>fulbo8
+ <9>fulbo9
+ <10><10.95>fulbo10
+ <12><14.4>fulbo12
+ <17.28><20.74><24.88>fulbo17
+ }{}
+\DeclareFontShape{U}{uni}{b}{sc}{
+ <5><6><7><8>fulbc8
+ <9>fulbc9
+ <10><10.95>fulbc10
+ <12><14.4>fulbc12
+ <17.28><20.74><24.88>fulbc17
+ }{}
+\DeclareFontShape{U}{uni}{b}{st}{
+ <5><6><7><8>fulbst8
+ <9>fulbst9
+ <10><10.95>fulbst10
+ <12><14.4>fulbst12
+ <17.28><20.74><24.88>fulbst17
+ }{}
+\DeclareFontShape{U}{uni}{m}{it}{<->ssub*uni/m/sl}{}
+\DeclareFontShape{U}{uni}{m}{ui}{<->ssub*uni/m/n}{}
+\DeclareFontShape{U}{uni}{b}{it}{<->ssub*uni/b/sl}{}
+\DeclareFontShape{U}{uni}{bx}{n}{<->ssub*uni/b/n}{}
+\DeclareFontShape{U}{uni}{bx}{sl}{<->ssub*uni/b/sl}{}
+\DeclareFontShape{U}{uni}{bx}{sc}{<->ssub*uni/b/sc}{}
+\DeclareFontShape{U}{uni}{bx}{st}{<->ssub*uni/b/st}{}
+\DeclareFontShape{U}{uni}{bx}{it}{<->ssub*uni/b/sl}{}
+\DeclareFontShape{U}{uni}{bc}{ui}{<->ssub*uni/b/n}{}
+\DeclareFontShape{U}{uni}{sbc}{n}{<->ssub*uni/b/n}{}
+
+% \end{macrocode}
+%\iffalse
+%</u>
+%\fi
+
+%\iffalse
+%<*unibase>
+%\fi
+%
+% \section{The Font Macros and Programs}
+%
+% \subsection{Base file --- \texttt{unibase.mf}}
+% \file{unibase.mf}
+% \Newestchanges{v2.0}{98/08/01}{Base file \texttt{unibase.mf} swa the
+% light of day, providing many driver, font control, and drawing
+% macros.}
+%
+% This file defines all the macroes used in the source programs
+% for the font. I could have chosen to use \texttt{cmbase}, but
+% rather then defining a lot of variables that isn't used, I chose
+% to make a base file myself. Also, some af the drawing macros
+% presented here still needed to be defined. This file could be
+% made into a binary file, but I think that would be a bit to
+% much.
+%
+% First we define the variable \texttt{unibase}, to check later if
+% this file has been loaded.
+% \begin{macrocode}
+unibase := 1 ;
+string univer ;
+univer = "2.0" ;
+if proofing > 1 :
+ message "Base file for font `universal', version " & univer ;
+fi
+% \end{macrocode}
+% Secondly, we define the variables \texttt{medium} and \texttt{bold}
+% to control the font serie to be produced. If \texttt{medium} is set
+% to \textsl{true} in the driver file, then a medium series
+% (\Lcs{mdseries}) font will be produced, while \texttt{bold} ofcourse
+% generates a boldface font. The medium serie may very well be
+% more suitiable for long texts then the default font. In $10pt$
+% the default thickness of the pen is $\frac{5}{6}pt\approx 0.8pt$
+% wide for the minuscles, and a bit wider for the majuscules. If
+% \texttt{medium} is \texttt{true} then it is $\frac{5}{9}pt\approx
+% 0.6pt$ wide.
+%
+% Booleans \texttt{slant} and \texttt{caps} is used to control the
+% shape of the font. If both is \textsl{false} a normal (upright)
+% shaped font (\Lcs{upshape}) font is generated. If \texttt{slant} or
+% \texttt{caps} is true, either a slanted (\Lcs{slshape}) or small
+% caps (\Lcs{scshape}) shaped font is generated. The values of these
+% booleans should be set in the driver file, \emph{before} any call to
+% \texttt{start\_font}.
+% \begin{macrocode}
+boolean medium , slant , bold , caps , strict ;
+medium := false ; slant := false ; bold := false ;
+caps := false ; strict := false ;
+% \end{macrocode}
+% And then the font is identified as \texttt{"universal"}.
+% \begin{macrocode}
+font_identifier:="universal";
+
+% \end{macrocode}
+%
+% \subsubsection{Font macros}
+%
+% These macroes have to do with the general initialization and
+% production of the font. The macros needed later on is
+% \texttt{start\_font}, and \texttt{end\_font}.
+%
+% The general idea is, that as little as possible should be
+% defined in the driver file, so that the font will have a uniform
+% look in all series, shapes, and sizes. All that is needed in the
+% driver file is to define some of the above booleans to true, call
+% the macro \texttt{start\_font} giving it the size (in \texttt{pt\#})
+% of the font as argument, include of source files, and call the macro
+% \texttt{end\_font}.
+%
+% \begin{fontmacro}{start\_font}
+% This is the macro for setting up the needed dimensions and
+% variables. First we take into acount the \textit{mode} used, by
+% calling \texttt{mode\_setup}, then we define the correct,
+% \textit{sharped} units, bassed on the argument to the macro, wich
+% should be the size of the font in \texttt{pt\#}.
+% \begin{macrocode}
+def start_font(expr size) =
+ u# := size/18 ;
+ mode_setup;
+ x_h# := 8u# ; x_w# := 8u# ; m_w# := 11u# ; l_h# := 13u# ;
+ p_d# := 5u# ; l_s# := 2u# ; r_s# := 2u# ; A_w# := 10u# ;
+ M_w# := 14u# ; c_d# := 3u#/2 ; C_d# := 2u# ;
+% \end{macrocode}
+% We test to see, if any of the above booleans is set to
+% \textsl{true}, and if so, takes appropiate action. If
+% \texttt{medium} is set, the pens gets thinner, thereby producing
+% a lighter font. If \texttt{bold} the pens gets thicker, and so a
+% heavier font is produced. If \texttt{slant} is set, then the
+% inclination (\texttt{slantratio}) of the font is assigned.
+%
+% No other dimensions then the pen thickness should be differ among
+% the \emph{medium} and \emph{bold} font. However, two dimension
+% \texttt{c\_d} and \texttt{C\_d} is always set to the same value as
+% the pens would be in the current size, if the font to be made was
+% \emph{bold}.
+%
+% Also notice, that two different pens thicknesses is defined
+% \texttt{p\_t} and \texttt{P\_t}, so that the majuscules may come out
+% a bit thicker then the minuscles. Ofcourse this adds to the
+% complexity of the drawing macroes defined below, but in a very
+% straight forward way, so I dont't think it will be a problem.
+%
+% Then we set \texttt{currenttransform} to take into account the
+% varibale \texttt{slantratio}.
+% \begin{macrocode}
+ if (medium and bold) :
+ message "Font can't be both medium and bold, making medium font." ;
+ medium := true ;
+ fi;
+ if medium : p_t# := 2u#/3 ; P_t# := u# ; P_T# := u# ; fi ;
+ if bold : P_T# := 3u#/2 ; p_t# := 3u#/2 ; P_t# := 2u# ; fi ;
+ a_h# := x_h#+p_t#/2 ;
+ if (slant and (caps or strict)) : double_shape := 1 ; fi ;
+ if (caps and (slant or strict)) : double_shape := 1 ; fi ;
+ if (strict and (caps or slant)) : double_shape := 1 ; fi ;
+ if known double_shape :
+ message "Font cannot be two shapes, doing upright shape." ;
+ slant := false ; caps := false ; strict := false ;
+ fi ;
+ if slant : slantratio := 1/6 ; else: slantratio := 0 ; fi ;
+ currenttransform := identity slanted slantratio ;
+% \end{macrocode}
+% We need to set some paramteres for the Font Metric File
+% (\texttt{*.tfm}), so that \TeX{} knows how to typeset the characters
+% of the font. This is pretty straight, as desribed in the \MFbook{}.
+% \begin{macrocode}
+ font_x_height 8u# ; font_quad 12u#+2u# ;
+ font_normal_space 8u# ; font_normal_stretch 3u# ;
+ font_normal_shrink 2u# ; font_extra_space 2u# ;
+ font_coding_scheme:="TeX text" ; font_size 18u# ;
+% \end{macrocode}
+% Next we assigns some variables we need later on, defines the
+% \emph{un\/}sharped (mode dependent) units, declares some variables
+% for later use, and call the macro \texttt{do\_pens} to save the pens
+% needed by the font.
+% \begin{macrocode}
+ spanish_shriek:=hex"3C" ; spanish_query:=hex"3E";
+ define_pixels(u,x_h,x_w,m_w,l_h,p_d,A_w,M_w,c_d,C_d,a_h);
+ define_blacker_pixels(p_t,P_t,P_T);
+ picture e_pic, a_pic ;
+ do_pens ;
+% \end{macrocode}
+% The definitions of \texttt{extra\_beginchar} and
+% \texttt{extra\_endchar} is responsible for the extra stem width
+% of the font. Since this font is pretty uniform in width, we
+% can easily do this globally. I got the trick from \texttt{cmbase},
+% where you instead use \texttt{adjust\_fit} after \texttt{beginchar}.
+% However, for the above reasons, and because it lessens the source
+% programs considerably, I chose to do it this way.
+%
+% The inclusion of the assignement
+% \begin{verbatim}
+% charcode := charcode + code_offset ;
+% \end{verbatim}
+% is for the small caps font, so that characters may be placed at
+% non--standard positions in the font. When we are not making a small
+% caps font, \texttt{code\_offset} should ofcourse be set to 0 (zero).
+% \begin{macrocode}
+ extra_beginchar := extra_beginchar&"fit_font;" ;
+ extra_endchar := extra_endchar&
+ "end_fit_font;extra_proof_rules;charcode:=charcode+code_offset;" ;
+ code_offset := 0 ;
+enddef;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \begin{fontmacro}{do\_pens}
+% This macro is used to set up the pens needed in this font. It is
+% called every time one of the dimensions \texttt{p\_t\#} or
+% \texttt{P\_t\#} is changed, since those are the \texttt{p/P}en
+% \texttt{t/T}hicknesses.
+%
+% Apart from saving a lot of time, as explained in the \MFbook{}, this
+% also garanties, that all pens are transformed correctly when the
+% font shape is \textsl{slanted}.
+% \begin{macrocode}
+def do_pens =
+ clear_pen_memory ;
+ pickup pencircle scaled P_T slanted slantratio ;
+ UniPencir := savepen ;
+ pickup pencircle scaled p_t slanted slantratio ;
+ unipencir := savepen ;
+ pickup pencircle scaled P_t slanted slantratio ;
+ Unipencir := savepen ;
+ pickup pensquare scaled P_T slanted slantratio ;
+ UniPensqu := savepen ;
+ pickup pensquare scaled p_t slanted slantratio ;
+ unipensqu := savepen ;
+ pickup pensquare scaled P_t slanted slantratio ;
+ Unipensqu := savepen ;
+enddef ;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \begin{fontmacro}{fit\_font}
+% This is the macro that changes the width of the font. It is
+% derived from \texttt{cmbase}s \texttt{normal\_adjust\_fit}, though
+% used in a slightly different way here. As explained in the \MFbook,
+% this is a very nice macro, since it is essesially an add--on
+% feature. We still specify the width of character in
+% \texttt{beginchar}, and \texttt{w} is still this dimension. However,
+% extra space is added to the character at both the left and right,
+% so that characters don't get too close.
+% \begin{macrocode}
+def fit_font =
+ l := -hround(l_s#*hppp) ; interim xoffset := -l ;
+ charwd := charwd+l_s#+r_s# ; r := l+hround(charwd*hppp) ;
+ w := r-hround(r_s#*hppp) ;
+ italcorr charht*slantratio ;
+enddef;
+
+% \end{macrocode}
+% \end{fontmacro}
+% \begin{fontmacro}{end\_fit\_font}
+% Again, this is taken from \texttt{cmbase}, so that extra space is
+% added on the sides of the character.
+% \begin{macrocode}
+def end_fit_font =
+ w := r+l ;
+enddef;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \begin{fontmacro}{extra\_proof\_rules}
+% When doing proofing, it is nice to have some extra rules on the
+% proofs, so that errors and mistakes are easiler seen. This macro
+% does just that. A verticatal rule is produced at the left and
+% right edge, and through the middle of the character. Horizontal
+% rules are produced at one quarter, half, and three quarters of the
+% character height. Also, if the charcter extence below the baseline,
+% a rule is produced at one half the depth.
+% \begin{macrocode}
+def extra_proof_rules =
+ if proofing > 1 :
+ for xa = l,r,w/2: proofrule((xa,-d), (xa,h)) ; endfor ;
+ for ya = 0,h/4,h/2,3h/4,h: proofrule((l,ya), (r,ya)) ; endfor ;
+ if d > 0 :
+ proofrule((l,-d/2), (r,-d/2)) ;
+ proofrule((l,-d), (r,-d)) ;
+ fi
+ fi
+enddef ;
+
+% \end{macrocode}
+% \end{fontmacro}
+% \begin{fontmacro}{end\_font}
+% \texttt{end\_font} is used at the end of the driver file, to set
+% ligatures, and end of the file. There is nothing fancy here. Do,
+% however, notice no `f' ligatures is defined, as in the Computer
+% Modern Roman. This is because they are not meant to be there,
+% because `ff' shouldn't come out as `\textunibf{f\kern-.25ex f}',
+% which looks bad, but rather as `\textunibf{ff}'.
+%
+% Also notice, that we haven't defined any characters \textunibf{``}
+% or \textunibf{''}, since we make these up of two \textunibf{`} or
+% \textunibf{'}. This gives us two more slots we can put other
+% characters into.
+%
+% Note, we preface the definition by \texttt{inner bye} so that we can
+% use this macro inside other macros (Kudo's to \TeX{}Live
+% developers).
+%
+% \begin{macrocode}
+inner bye;
+def end_font =
+ ligtable "u" : "h" kern u# ;
+ ligtable "f" : "f" kern 0 , "l" kern 0 , "i" kern 0 ;
+ ligtable "o" : "l" kern u# ;
+ ligtable "?" : "`" =: spanish_query ;
+ ligtable "!" : "`" =: spanish_shriek ;
+ ligtable "`" : "`" kern -l_s#-r_s#+p_t# ;
+ ligtable "'" : "'" kern -l_s#-r_s#+p_t# ,
+ "?" kern 2u#, "!" kern 2u# ;
+ ligtable "-" : "-" =: hex"7B" ;
+ ligtable hex"7B" : "-" =: hex"7C" ;
+ ligtable hex"22" : hex"22" kern -l_s#-r_s# ;
+ ligtable hex"5C" : hex"5C" kern -l_s#-r_s# ;
+ ligtable hex"20" :
+ "l" kern -3c_d#*cosd(15)-p_t#*sind(15)-l_s#-r_s# ,
+ "L" kern -3c_d#*cosd(15)-p_t#*sind(15)-l_s#-r_s# ;
+ bye
+enddef ;
+
+% \end{macrocode}
+% \end{fontmacro}
+% \begin{fontmacro}{do\_caps}
+% This next macro is for the \textunisc{small caps} version of the
+% font. Most of it is taken from \texttt{csc.mf} of the Computer
+% Modern Font, though not as many dimensions have been redefined in
+% this macro. The idea is to utilize this macro whenever you want to
+% make a small caps version of majuscles. This macro is used in both
+% \texttt{unilow.mf} and \texttt{unilig.mf}.
+%
+% The argument to \texttt{do\_caps} is the number the new characters
+% should be offset from it's original position in the font.
+%
+% The last \texttt{do\_pens} is needed, since the programs uses saved
+% pens, and we have just redefined the dimensions for the pens.
+% \begin{macrocode}
+def do_caps(expr offset) =
+ sc_shrink := x_h#/l_h# ;
+ P_t# := sc_shrink*P_t# ; l_h# := sc_shrink*l_h# ;
+ A_w# := sc_shrink*A_w# ; M_w# := sc_shrink*M_w# ;
+ C_d# := sc_shrink*C_d# ;
+ code_offset := offset ;
+ define_pixels(l_h,A_w,M_w,C_d) ;
+ define_blacker_pixels(P_t) ;
+ do_pens ;
+enddef ;
+
+% \end{macrocode}
+% \end{fontmacro}
+% \begin{fontmacro}{end\_do\_caps}
+% When ever we need to get back to the default setting of dimensions,
+% after the use of \texttt{do\_caps}, we call on this macro to do the
+% job. The idea is to multiply by \texttt{no\_shrink} which is the
+% reciprocal of \texttt{sc\_shrink}.
+% \begin{macrocode}
+def end_do_caps =
+ no_shrink := 1/sc_shrink ;
+ P_t# := no_shrink*P_t# ; l_h# := no_shrink*l_h# ;
+ A_w# := no_shrink*A_w# ; M_w# := no_shrink*M_w# ;
+ C_d# := no_shrink*C_d# ;
+ code_offset := 0 ;
+ define_pixels(l_h,A_w,M_w,C_d) ;
+ define_blacker_pixels(P_t) ;
+ do_pens ;
+enddef ;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \subsubsection{Control macroes}
+%
+% These macroes are designed to ease the control of individual
+% characters.
+%
+% \begin{fontmacro}{no\_adjust}
+% If a character is not supposed to have extra space on either side
+% you can say \texttt{no\_adjust} just before
+% \begin{quote}
+% \texttt{extra\_beginchar := extra\_beginchar\&"}
+% \meta{your begin char stuff}\texttt{";}\\
+% \texttt{extra\_endchar := extra\_endchar\&"}
+% \meta{your stuff endchar stuff}\texttt{";}\\
+% \texttt{beginchar(}\meta{usual arguments}\texttt{);}
+% \end{quote}
+% where the two string assigments are optional.
+% \begin{macrocode}
+def no_adjust=
+ old_begin_adjust := extra_beginchar ;
+ old_end_adjust := extra_endchar ;
+ extra_beginchar := " " ;
+ extra_endchar :=
+ "extra_proof_rules;charcode:=charcode+code_offset" ;
+enddef;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \begin{fontmacro}{restore\_adjust}
+% Use this command to restore automaticly adding extra space around
+% the characters. Must be used between a \texttt{endchar} and
+% \texttt{beginchar}.
+% \begin{macrocode}
+def restore_adjust=
+ extra_beginchar := old_begin_adjust ;
+ extra_endchar := old_end_adjust ;
+enddef;
+string old_begin_adjust, old_end_adjust ;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \subsubsection{Drawing macroes}
+%
+% I have made this macros for drawing, to ease up the writing of
+% source programs. They all simulate a pen of breadth \textit{thick}
+% always moving perpendecular to the current path. This is needed
+% in the \universal{} font, since all pen breadths are supposed
+% to be equal anywhere (at least within a paricular `group'), in any
+% direction.
+%
+% All of the macros heavely use \texttt{penpos}, so the use
+% is pretty reliant on the appropiate use of this macro. This
+% put some restrictions on the arguments, since \texttt{penpos}
+% deals with angles of all sorts.
+%
+% In the macroes, we use vectors with number $m$, as assigened in the
+% last argument of the macros. $m$ should be assigend so that the
+% vectors $m,m+1,\ldots,m+4$ does not conflict with already assigned
+% vectors, or vectors to be assigend in the current picture.
+%
+% Though it may seem a somewhat \textit{ad hoc} solution, it is the
+% best way I could think of. Ofcourse I could check to see what
+% vectors are defined, and then use some others, but that would
+% complicate the code unessecary, and since the idea is to hide the
+% actual vector operations in the macros, I descided to use the
+% course.
+%
+% (No labels are produced on the proofsheets by this macroes,
+% since they use very high numbers, which is rather destracting.)
+%
+% \begin{fontmacro}{unicir}
+% Draws a circle of outer radius \texttt{rad}, and centered at
+% \texttt{center}, which shoud be a pair. Notice, no effort is
+% made to keep the circle within the character, so the use of
+% this macro, should be governed with some caution.
+%
+% The second argument is the \emph{thickness} of the pen drawing the
+% segment.
+%
+% The last argument \texttt{m} is to insure the uniqueness of
+% all pairs. That is, if you need more then one circle in a letter,
+% then \texttt{m} should take different values for each circle, so that
+% $m_{i}-m_{i+1}>4$. Also \texttt{m} should not take any value
+% corrosponing to vectors already defined. This is most easily done if
+% \texttt{m} is asigned a large value, like say a multipla of 10, or
+% even 100.
+% \begin{macrocode}
+def unicir(expr rad, thick, center, m)=
+ pickup pensquare scaled thick;
+ top z[m] = (0,rad) + center ; penpos[m](thick,90) ;
+ lft z[m+1] = (-rad,0) + center ; penpos[m+1](thick,180) ;
+ bot z[m+2] = (0,-rad) + center ; penpos[m+2](thick,270) ;
+ rt z[m+3] = (rad,0) + center ; penpos[m+3](thick,0) ;
+ penstroke z[m]e{left}..z[m+1]e{down}..
+ z[m+2]e{right}..z[m+3]e{up}..cycle ;
+ penlabels(range m thru m+3);
+enddef;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+% \begin{fontmacro}{uniarc}
+% Produce a segment of a circle, with radius \texttt{rad}, and
+% centered at \texttt{center}.
+%
+% The size of the segment is determind by the arguments
+% \texttt{ang\_a} and \texttt{ang\_b}, consider as angles from a
+% horizontal linesegment from \texttt{center} traveling right. That
+% means you should specify the angles in at counter--clockwise way,
+% and between -360 and 360. \texttt{ang\_b} \emph{must} be bigger then
+% \texttt{ang\_a}, otherwise the output is totally unpredictiable.
+%
+% The second argument is the \emph{thickness} of the pen drawing the
+% segment, Again the last argument \texttt{m} is to insure the
+% uniqueness of the vectors. The comments above on the argument also
+% applies here.
+% \begin{macrocode}
+def uniarc(expr rad, thick, center, ang_a, ang_b, m)=
+ pickup pensquare scaled thick ;
+ path arc.l, arc.r, arc.e ; n:=m ; ang_c := abs(ang_b-ang_a) ;
+% \end{macrocode}
+% First we check to see, if the user somehow requested an arc of more
+% then $360^\circ$. If so, we just call \texttt{unicir}, since this is
+% properly intended. If not, we go on to define relevant vectors.
+% \begin{macrocode}
+ if ang_c >= 360 :
+ unicir(rad,center,n) ;
+ else:
+% \end{macrocode}
+% We acctualy define the vectors as if we started in the arc on the
+% positiv $x$--axis, considering \texttt{center} as origo, an then
+% latter on turn the arc the appropiate angle. Notice the heavy use of
+% \texttt{penpos} and \texttt{[ ]} to evaluate variable \texttt{m}.
+% \begin{macrocode}
+ top z[n] = (0,rad) + center ; penpos[n](thick,90) ;
+ arc.r := z[n]r{left} ;
+ arc.l := z[n]l{left} ;
+% \end{macrocode}
+% The next \texttt{if...fi} loop ensures we don't define a
+% whole lot of useless vectors. The \MF{} primitiv path macro
+% \texttt{...} does a very good job at approching a segment of a
+% circle even if only two points are defined in an interval of
+% $90^\circ$, if we at the same time utilizes the direction mechanisme
+% of \MF{}.
+% \begin{macrocode}
+ if ang_c > 90 :
+ n := n+1 ; lft z[n] = (-rad,0) + center ; penpos[n](thick,180) ;
+ arc.r := arc.r&z[n-1]r..z[n]r{down} ;
+ arc.l := arc.l&z[n-1]l..z[n]l{down} ;
+ if ang_c > 180 :
+ n := n+1 ; bot z[n] = (0,-rad) + center ; penpos[n](thick,270) ;
+ arc.r := arc.r&z[n-1]r..z[n]r{right} ;
+ arc.l := arc.l&z[n-1]l..z[n]l{right} ;
+ if ang_c > 270 :
+ n := n+1 ; rt z[n] = (rad,0) + center ; penpos[n](thick,0) ;
+ arc.r := arc.r&z[n-1]r..z[n]r{up} ;
+ arc.l := arc.l&z[n-1]l..z[n]l{up} ;
+ fi ;
+ fi ;
+ fi ;
+% \end{macrocode}
+% After the \texttt{if} loop, we define the final point, make the
+% complete path, and finishes off by drawing the arc, turned the
+% appropiate angle.
+% \begin{macrocode}
+ n:=n+1 ; z[n] = z[m] rotatedabout(center,ang_c) ;
+ penpos[n](thick,90+ang_c) ;
+ arc.r := arc.r&z[n-1]r..z[n]r{dir(180+ang_c)} ;
+ arc.l := arc.l&z[n-1]l..z[n]l{dir(180+ang_c)} ;
+ arc.e := arc.l--reverse arc.r--cycle;
+ fill (arc.e rotatedabout(center,-90+ang_a));
+ fi;
+ penlabels(range m thru n);
+enddef;
+
+% \end{macrocode}
+% Notice the use of two paths, and reversal of one. This is
+% essentially what the \texttt{plain.mf} macro \texttt{penstroke}
+% does. However, that macro couldn't be used here, since we are
+% building a path on the fly, so every step is needed to be fully
+% known, and \texttt{penstroke} makes new variables to do the job.
+%
+% Also, we use the integer \texttt{n} for surfixes, since this
+% limits the creation of vectors, and eases the path building.
+% \end{fontmacro}
+%
+% \begin{fontmacro}{uniend}
+% This macro is somewhat similar to \texttt{uniarc} above, but has a
+% different use. Where \texttt{uniarc} is intended for arcs with a
+% radius bigger then the pen thickness, this macro is intended for
+% arcs with a radius of exactly same size as the pen thickness, hence
+% this macro produces a \emph{filled} segment of a circle with a
+% radius of the current pen thickness.
+%
+% This macro, like \texttt{uniarc}, takes 5 arguments: the radius of
+% the arc; the center of the arc, which should be of type
+% \texttt{pair}; the starting and ending angle; plus the first number
+% of the vectors needed to draw this figure. The considerations above
+% in \texttt{uniarc} conserning the angles also apply here.
+%
+% Notice once again the use of \texttt{if..fi} loops to define the
+% relevant vectors and paths.
+% \begin{macrocode}
+def uniend(expr rad, center, ang_a, ang_b, m)=
+ path arc ; n:=m ; ang_c := abs(ang_b-ang_a) ;
+ if ang_c >= 360 :
+ Rad := 2*rad ;
+ pickup pencircle scaled Rad ; z[n]=center ; drawdot z[n] ;
+ else:
+ z[n] = (0,rad) + center ; arc := center{up}--z[n]{left} ;
+ if ang_c > 90 :
+ n := n+1 ; z[n] = (-rad,0) + center ;
+ arc := arc&z[n-1]..z[n]{down} ;
+ if ang_c > 180 :
+ n := n+1 ; z[n] = (0,-rad) + center ;
+ arc := arc&z[n-1]..z[n]{right} ;
+ if ang_c > 270 :
+ n := n+1 ; z[n] = (rad,0) + center ;
+ arc := arc&z[n-1]..z[n]{up} ;
+ fi ;
+ fi ;
+ fi ;
+ n := n+1 ; z[n] = z[m] rotatedabout(center,ang_c) ;
+ arc := arc&z[n-1]..z[n]{dir(180+ang_c)}--cycle ;
+ fill (arc rotatedabout(center,-90+ang_a));
+ fi;
+ penlabels(range m thru n);
+enddef;
+
+% \end{macrocode}
+% Notice, once more we are building a path on the fly, so some caution
+% was used here. Again the \texttt{plain.mf} macro \texttt{penstroke}
+% doesn't do the job here. This is because only a part of a stroke is
+% actually wanted. You might think then, that the \texttt{plain.mf}
+% macro \texttt{cutoff} then would do the job, but in my experience
+% that macro has some serious flaws\footnote{A quick use of the Unix
+% command \texttt{grep} on most of the Computer Modern Fonts reveals
+% that \texttt{cutoff} is \emph{never} used, which I take to
+% indicate its weakness.}.
+% \end{fontmacro}
+%
+% \begin{fontmacro}{unilne}
+% This macro is intended for drawing non--vertical or horizontal
+% lines, since this is easily done with \texttt{draw}. It takes
+% six arguments, the thickness of the pen drawing the line, the
+% starting point of the line (\texttt{start}), the ending point of
+% line (\texttt{stop}), which should be higher and more to the right
+% then the starting point, and the cutoff--style
+% (\texttt{endcutstart, endcutstop}).
+
+% If \texttt{endcut}$x$ is positiv, then, the line is cut off
+% horizontally at the relevant point $x$.
+%
+% If \texttt{endcut}$x$ is negativ, then, the line is cut off
+% vertically at $x$.
+%
+% If it is zero, then the line is cut off perpendicular to the slant
+% of the line at $x$.
+%
+% Also, if \texttt{endcut}$x$ is zero, the starting point is the
+% point corrosponding to the lowest height and leftmost width, and the
+% ending point corrosponds to the heighest height and rightmost width
+% of the line. Again \texttt{m} insures unique vectors.
+% \begin{macrocode}
+def unilne(expr thick, start, stop, endcutstart, endcutstop, m)=
+ pickup pensquare scaled thick;
+ if endcutstart = endcutstop :
+ if endcutstart = 0 :
+ lft bot z[m] = start ; rt top z[m+1] = stop ;
+ ang_c := angle(z[m+1]-z[m]) ;
+ penpos[m](thick,-90+ang_c) ;
+ penpos[m+1](thick,-90+ang_c) ;
+ elseif endcutstart > 0 :
+ lft z[m] = start ; rt z[m+1] = stop ;
+ ang_c := angle(z[m+1]-z[m]) ;
+ penpos[m](thick/sind(ang_c),0) ;
+ penpos[m+1](thick/sind(ang_c),0) ;
+ elseif endcutstart < 0:
+ bot z[m] = start ; top z[m+1] = stop ;
+ ang_c := angle(z[m+1]-z[m]) ;
+ penpos[m](thick/cosd(ang_c),90) ;
+ penpos[m+1](thick/cosd(ang_c),90) ;
+ fi;
+ penstroke z[m]e--z[m+1]e ;
+ else :
+ message "Different endcuts on unilne not implemented yet.";
+ fi;
+ n := m + 1 ;
+ penlabels(range m thru n);
+enddef;
+
+% \end{macrocode}
+% \end{fontmacro}
+%
+%\iffalse
+%</unibase>
+%\fi
+%
+%\iffalse
+%<*low>
+%\fi
+% \subsection{The Minuscles (lowercase letters) --- \texttt{unilow.mf}}
+% \file{unilow.mf}
+%
+% \Newestchanges{v2.0}{98/08/01}{All of \texttt{unilow.mf} is defined
+% within a conditional, to ease the generation of the small caps
+% shaped fonts.}
+% This whole file is loaded only conditionally to make the generation
+% of small caps font easier.
+% \begin{macrocode}
+if not caps :
+
+% \end{macrocode}
+% \begin{fontcode}{a}
+% The letter \textunibf{a} is interresting in the sense, that the bottom
+% part of the curve, is \emph{not} a segement of an arc. The exact
+% curvature of this part, is controversial; some font designers have
+% chosen to make it a segement of an arc, making all of the curve, a
+% circle; while others have chosen to make it a straight line. I
+% decided to take the middleroad, since it appeals more to me
+% aestheticly, even though it deviates from the principle of building
+% all characters from the two simple forms: the cirle and the line.
+%
+% The \textuni{a} is also saved in the picture variable
+% \texttt{a\_pic}, for use in \texttt{unilig.mf}.
+% \begin{macrocode}
+ beginchar("a",x_w#,x_h#,0); "The letter a";
+ uniarc(w/2,p_t,(w/2,h/2),0,290,10);
+ pickup unipensqu ;
+ z1 = ((cosd(290)*(w-p_t)+w)/2,(sind(290)*(w-p_t)+w)/2);
+ z2 = (w-p_t/2,2h/5) ; penpos1(p_t,-70); penpos2(p_t,-45);
+ fill z1l{dir(20)}..z2l{dir(45)}--
+ z2r{dir(225)}..z1r{dir(200)}--cycle;
+ top rt z3 = (w,.5h) ; bot rt z4 = (w,0) ; draw z3{down}--z4 ;
+ penlabels(1,2,3,4);
+ a_pic := currentpicture ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{b}
+% There is not much to say about this letter, only that it is a
+% \textunibf{d} reflected through the vertical center axis.
+% \begin{macrocode}
+ beginchar("b",x_w#,l_h#,0); "The letter b";
+ unicir(w/2,p_t,(w/2,w/2),10);
+ pickup unipensqu ;
+ lft bot z1 = (0,w/2) ; lft top z2 = (0,h) ; draw z1{up}--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{c}
+% This is a rather short program, but is interresting, since some care
+% has to be taken, when assigning the width. Since a \textunibf{c} is not
+% a full cirle, but only a segment opening towards the right, it would
+% look wrong, if the letter was as wide, as it is tall.
+% \begin{macrocode}
+ beginchar("c",x_w#*(1+cosd(30))/2,x_h#,0); "The letter c";
+ uniarc(h/2,p_t,(h/2,h/2),30,330,10);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{d}
+% A flipped \textunibf{b} --- that's it!
+% \begin{macrocode}
+ beginchar("d",x_w#,l_h#,0); "The letter d";
+ unicir(w/2,p_t,(w/2,w/2),10);
+ pickup unipensqu ;
+ rt bot z1 = (w,w/2) ; rt top z2 = (w,h) ; draw z1{up}--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{e}
+% Notice the middle bar. The arc can not go all the way down to the
+% bar, because then the \textunibf{e} would end in a arc, on the right
+% side. We want a flat end, so an extra dot has to be made.
+%
+% The \textuni{e} is also saved in the picture variable
+% \texttt{e\_pic}, for use in \texttt{unilig.mf}.
+% \begin{macrocode}
+ beginchar("e",x_w#,x_h#,0); "The letter e";
+ uniarc(w/2,p_t,(w/2,h/2),0,330,10);
+ temp := p_t/2 ;
+ pickup pensquare xscaled p_t yscaled temp slanted slantratio ;
+ top rt z1 = (w,h/2) ; drawdot z1 ;
+ pickup unipensqu ;
+ z2 = (p_t,h/2) ; z3 = (w-p_t,h/2) ; draw z2--z3 ;
+ penlabels(1,2,3);
+ e_pic := currentpicture ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{f}
+% The horizontal placement of the bar is somewhat controversial. I
+% think it looks best if it is placed, so that the top of the bar, is
+% at the same height, as the top of an \textunibf{x}, that is $1ex$.
+% \begin{macrocode}
+ beginchar("f",4p_t#,l_h#,0); "The letter f";
+ uniarc(3/4w,p_t,(3/4w,h-3/4w),90,180,10);
+ pickup unipensqu ;
+ top rt z1 = (w,h) ; drawdot z1 ;
+ lft top z2 = (0,h-3/4w) ; bot lft z3 = (0,0) ; draw z2--z3 ;
+ top lft z4 = (0,x_h) ; top rt z5 = (w,x_h) ; draw z4--z5 ;
+ penlabels(1,2,3,4,5);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{g}
+% The \textunibf{g} is a very good measure of how low ascenders should
+% go. Some might want to add a square on top of the ascender, so that
+% the letter ended in flat to the right, but I found it displeacing,
+% and therefore left it out.
+% \begin{macrocode}
+ beginchar("g",x_w#,x_h#,p_d#); "The letter g" ;
+ uniarc(w/2,p_t,(w/2,h/2),30,360,10) ;
+ pickup unipensqu ;
+ top rt z1 = (w,h/2) ; bot rt z2 = (w,-d) ; draw z1--z2;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{h}
+% It can be argued, that this letter is too wide. However, I decieded
+% to weight the concept of homongeious circles higher in this case.
+% \begin{macrocode}
+ beginchar("h",x_w#,l_h#,0); "The letter h" ;
+ uniarc(w/2,p_t,(w/2,w/2),0,180,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top rt z3 = (w,x_h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{i}
+% Quite a simple letter, though it can be argued wether the dot should
+% be square, or as here circular.
+% \begin{macrocode}
+ beginchar("i",p_t#,l_h#,0) ; "The letter i" ;
+ pickup unipensqu ;
+ top lft z1 = (0,x_h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ pickup unipencir ;
+ top lft z3 = (0,h) ; drawdot z3 ;
+ penlabels(1,2,3) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{j}
+% No left stem is added at the bottom, since it isn't needed!
+% \begin{macrocode}
+ beginchar("j",p_t#,l_h#,p_d#); "The letter j" ;
+ pickup unipensqu ;
+ top lft z1 = (0,x_h) ; bot lft z2 = (0,-d) ; draw z1--z2 ;
+ pickup unipencir ;
+ top lft z3 = (0,h) ; drawdot z3 ;
+ penlabels(1,2,3) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{k}
+% Again, this letter is narrower then most of the letters. This is
+% because, the to arcs isn't full halfarcs, but rather quarterarcs.
+% \begin{macrocode}
+ beginchar("k",(x_h#+3p_t#)/2,x_h#,0) ; "The letter k" ;
+ uniarc((h+p_t)/2,p_t,(p_t,h),270,360,10) ;
+ uniarc((h+p_t)/2,p_t,(p_t,0),0,90,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{l}
+% What is a line, but a line! Well right now it is an `l'. You may
+% wonder why no stems are added, to destingish an `l' from a vertical
+% bar, as in math mode. Well, how often will you put a math vertical
+% bar next to an text `l'.
+% \begin{macrocode}
+ beginchar("l",p_t#,l_h#,0) ; "The letter l" ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{m}
+% This proved more tricky then I thought. Originally, I wanted the arc
+% of the \textunibf{n} to be as high as those of the \textunibf{m}. This
+% meant, that either the \textunibf{n} should be very narrow, or the
+% \textunibf{m} very wide; either way it wouldn't look good. So after a
+% few experiments, I decided for the current form.
+% \begin{macrocode}
+ beginchar("m",m_w#,x_h#,0) ; "The letter m" ;
+ temp := .25*(w+p_t);
+ uniarc(temp,p_t,(temp,h-temp),0,180,10) ;
+ uniarc(temp,p_t,(w-temp,h-temp),0,180,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h-temp) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top z3 = (w/2,h-temp) ; bot z4 = (w/2,0) ; draw z3--z4 ;
+ top rt z5 = (w,h-temp) ; bot rt z6 = (w,0) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{n}
+% Tricky because of the \textunibf{m} (see above).
+% \begin{macrocode}
+ beginchar("n",x_w#,x_h#,0); "The letter n" ;
+ uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{o}
+% Well, this is just a circle, nothing fancy. Why not make it oval,
+% you say. I say, listen --- Herbert Bayer just turned in his grave!
+% \begin{macrocode}
+ beginchar("o",x_w#,x_h#,0) ; "The letter o";
+ unicir(w/2,p_t,(w/2,h/2),10);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{p}
+% Try to flip the \textunibf{b} horizontally, and tell me what you get?
+% \begin{macrocode}
+ beginchar("p",x_w#,x_h#,p_d#) ; "The letter p" ;
+ unicir(w/2,p_t,(w/2,w/2),10);
+ pickup unipensqu ;
+ lft top z1 = (0,h/2) ; lft bot z2 = (0,-d) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{q}
+% Why not try to destingish the \textunibf{q} more from the \textunibf{g}?
+% Well if you look at the two letters, I think, you will get the
+% answer. Also, my intuition of a \textunibf{q} is that of a reflected
+% \textunibf{p}, but that is just \emph{my} intuition!
+% \begin{macrocode}
+ beginchar("q",x_w#,x_h#,p_d#) ; "The letter q" ;
+ unicir(w/2,p_t,(w/2,w/2),10);
+ pickup unipensqu ;
+ rt top z1 = (w,h/2) ; rt bot z2 = (w,-d) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{r}
+% Well that is really simplle, but illustrates a fine point --- why
+% use more strokes, when fewer is needed?
+% \begin{macrocode}
+ beginchar("r",3p_t#,x_h#,0) ; "The letter r" ;
+ uniarc(w,p_t,(w,h-w),90,180,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h-w) ; bot lft z2 = (0,0) ; draw z1--z2;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{s}
+% \Newestchanges{v2.0}{98/08/01}{Considerable simplifications.}
+% This is a `slow' letter, i.e.\ it takes \MF{} quite some time to
+% compute. The reason is simple --- a \emph{lot} of curves is drawn.
+% \begin{macrocode}
+ beginchar("s",x_w#,x_h#,0) ; "The letter s" ;
+ temp := (h+p_t)/4 ;
+ uniarc(temp,p_t,(temp,temp),180,270,10) ;
+ uniarc(temp,p_t,(w-temp,temp),270,450,20) ;
+ uniarc(temp,p_t,(temp,h-temp),90,270,30) ;
+ uniarc(temp,p_t,(w-temp,h-temp),0,90,40) ;
+ pickup unipensqu ;
+ bot lft z1 = (temp,0) ; bot rt z2 = (w-temp,0) ; draw z1--z2 ;
+ lft z3 = (temp,h/2) ; rt z4 = (w-temp,h/2) ; draw z3--z4 ;
+ top lft z5 = (temp,h) ; top rt z6 = (w-temp,h) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{t}
+% As I argued before, the placement of the bar in the \textunibf{f} and
+% \textunibf{t} is controversial.
+% \begin{macrocode}
+ beginchar("t",p_t#+2c_d#,l_h#,0); "The letter t" ;
+ pickup unipensqu ;
+ top z1 = (w/2,h) ; bot z2 = (w/2,0) ; draw z1--z2 ;
+ top lft z3 = (0,x_h) ; top rt z4 = (w,x_h) ; draw z3--z4 ;
+ penlabels(1,2,3,4);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{u}
+% Flip a letter here, and flip a letter there --- all in a days work
+% of a font designer!
+% \begin{macrocode}
+ beginchar("u",x_w#,x_h#,0); "The letter u" ;
+ uniarc(w/2,p_t,(w/2,w/2),180,360,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,w/2) ; draw z1--z2 ;
+ top rt z3 = (w,h) ; bot rt z4 = (w,w/2) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{v}
+% The lines and the arc doesn't intersect in a flowing way, but the
+% error is so small it will not be seen in normal use. However, if
+% the font is maginified to, say $70pt$, it might be a problem. I
+% hope to get into this, some time in the future. For now, make do.
+% \begin{macrocode}
+ beginchar("v",x_w#,x_h#,0); "The letter v" ;
+ unilne(p_t,(0,h),(w/2,p_t),1,1,10);
+ unilne(p_t,(w/2,p_t),(w,h),1,1,20);
+ uniarc(p_t,p_t,(w/2,p_t),180,360,30);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{w}
+% Flippedy--flop.
+% \begin{macrocode}
+ beginchar("w",m_w#,x_h#,0) ; "The letter w" ;
+ temp := .25*(w+p_t);
+ uniarc(temp,p_t,(temp,temp),180,360,10) ;
+ uniarc(temp,p_t,(w-temp,temp),180,360,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,temp) ; draw z1--z2 ;
+ top z3 = (w/2,h) ; bot z4 = (w/2,temp) ; draw z3--z4 ;
+ top rt z5 = (w,h) ; bot rt z6 = (w,temp) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{x}
+% This is a bit tricky --- the two arces are each half the width wide,
+% but since they share middle part, they leave the width of the
+% strokes uncoverd. To remedy this problem, four dots are drawn. It
+% would be silly, if the \textunibf{x} wasn't as wide as it is tall,
+% namely \texttt{x\_w}.
+% \begin{macrocode}
+ beginchar("x",x_w#,x_h#,0) ; "The letter x" ;
+ uniarc(h/2,p_t,(p_t/2,h/2),270,90,10);
+ uniarc(h/2,p_t,(w-p_t/2,h/2),90,270,20);
+ temp := (w-h+p_t)/2 ;
+ pickup pensquare xscaled temp yscaled p_t slanted slantratio ;
+ lft top z1 = (0,h) ; drawdot z1 ;
+ lft bot z2 = (0,0) ; drawdot z2 ;
+ rt top z3 = (w,h) ; drawdot z3 ;
+ rt bot z4 = (w,0) ; drawdot z4 ;
+ penlabels(1,2,3,4);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{y}
+% Flip an reflect, or just turn, it's all the same, it will still be a
+% transformation of an \textunibf{h}
+% \begin{macrocode}
+ beginchar("y",x_w#,x_h#,p_d#); "The letter y" ;
+ uniarc(w/2,p_t,(w/2,w/2),180,360,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,w/2); draw z1--z2 ;
+ top rt z3 = (w,h) ; bot rt z4 = (w,-d) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{z}
+% This is a bit tricky letter, since what I wanted was for middle line
+% to have an inclination such that its edges would be tangents to the
+% circle segments at the endpoints of the horizontal lines. I tried to
+% solve this problem analytically, but gave up. I also tried to use
+% some of \texttt{plain.mf}'s macros, but none of them gave me the
+% resulat I wanted. So I finally made the approximation seen below.
+% If you can come up with a good solution to this problem, please let
+% me know.
+% \begin{macrocode}
+ beginchar("z",x_w#,x_h#,0) ; "The letter z" ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; top rt z2 = (w-p_t,h) ; draw z1--z2 ;
+ bot lft z3 = (p_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ phi := angle((w,h-p_t)-(0,p_t)) ; % Uuuuupps !?!!!!!!
+ z5 = (p_t,p_t) ; z6 = z5 + p_t*(-sind(phi),cosd(phi)) ;
+ z7 = (w-p_t,h-p_t) ; z8 = z7 + p_t*(sind(phi),-cosd(phi)) ;
+ uniend(p_t,z5,90+phi,270,10);
+ uniend(p_t,z7,-90+phi,90,20);
+ fill z5--z6--z7--z8--cycle ;
+ penlabels(range 1 thru 8);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% As explain in the begining of the section, this file is one big
+% \texttt{if...else...fi} loop to mak the generation of the small caps
+% font easier.
+%
+% The idea is, that if \texttt{caps} is
+% \texttt{true}, then the main part of this file shouldn't be used,
+% but rather \texttt{uniupp.mf} should be loaded again, but with
+% different diffintions of dimensions for uppercase letters, so that
+% they come out as small as lowercase letters, hence --- small
+% caps.
+%
+% This is done by the macro \texttt{do\_caps}, which we utilies
+% inside a group, so that the changes made by \texttt{do\_caps} will be
+% undone after the group, and hence not affect the rest of the font.
+%
+% \begin{macrocode}
+else :
+ do_caps(ASCII"a" - ASCII"A") ;
+ input uniupp ;
+ end_do_caps ;
+fi ;
+
+% \end{macrocode}
+%\iffalse
+%</low>
+%\fi
+%\iffalse
+%<*upp>
+%\fi
+% \subsection{The Majuscles (uppercase letters) --- \texttt{uniupp.mf}}
+% \file{uniupp.mf}
+%
+% As noted earlier, Herbert Bayer never did design any majuscles,
+% since he considered them useless. However, majuscles are avaliable
+% in the current implentation and are to be used at your lesuire. Of
+% course, if you agree with the Bauhaus school, and think uppercase
+% letters are useless, you shouldn't use them. Then, perhaps, you
+% should also refrain from using non--standard letters shuch as German
+% double s, Scandinavian ligatures, Spanish schriek, and perhaps even
+% accents of any kind. This may seem a little drastic, but the
+% train--of--tought should be clear: Why use letters and symbols that
+% are in the best case obsolete, and in the worst useless or without
+% significans?
+%
+% \Newestchanges{v2.0}{98/08/01}{All of \texttt{unilow.mf} is defined
+% within a conditional, to ease the generation of the strict shaped
+% fonts.}
+%
+% To facilitate a use of the \universal{} font conforming to Bayers'
+% original idea, that is without majusceles this file is loaded only
+% under the condition that \texttt{strict} is \emph{false}.
+% \begin{macrocode}
+if not strict :
+
+% \end{macrocode}
+% \begin{fontcode}{A}
+% It can be argued where the bar should be placed. I choose place it
+% the middle, since most of the majuscles tend to have a symmetry axis
+% long this line, so I thought it apropiate to follow this line of
+% thought. Ofcourse, I'm the only one to blane for this, since Herbert
+% Bayer \emph{never} designed any majuscles! (So flame me for
+% guessing).
+% \begin{macrocode}
+ beginchar("A",A_w#,l_h#,0); "The letter A";
+ uniarc(w/2,P_t,(w/2,h-w/2),0,180,10);
+ pickup Unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{B}
+% This letter is somewhat tricky, since it is not clear wether the
+% arces should be placed directly on the left down stoke, or there
+% should be some distance filled with horizontal bars. I chose the
+% second solution, even though it isn't the most simple, and hence in
+% better agrement with the concept of this font design. However, the
+% first solution does make the letter very narrow compared with some
+% of the other letters.
+% \begin{macrocode}
+ beginchar("B",A_w#,l_h#,0) ; "The letter B" ;
+ rad := 1/4(h+P_t) ;
+ uniarc(rad,P_t,(w-rad,h-rad),-90,90,10) ;
+ uniarc(rad,P_t,(w-rad,rad),-90,90,20) ;
+ uniend(P_t,(P_t,h-P_t),90,180,30) ;
+ uniend(P_t,(P_t,P_t),180,270,40) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h-P_t) ; bot lft z2 = (0,P_t) ; draw z1--z2 ;
+ top lft z3 = (P_t,h) ; top rt z4 = (w-rad,h) ; draw z3--z4 ;
+ lft z5 = (P_t,h/2) ; rt z6 = (w-rad,1/2h) ; draw z5--z6 ;
+ bot lft z7 = (P_t,0) ; bot rt z8 = (w-rad,0) ; draw z7--z8 ;
+ penlabels(range 1 thru 8);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{C}
+% This is really simple, since it is just an enlargement of the
+% corresponding minuscule, so the is really nothing interresting
+% here.
+% \begin{macrocode}
+ beginchar("C",l_h#*(1+cosd(30))/2,l_h#,0); "The letter C";
+ uniarc(h/2,P_t,(h/2,h/2),30,330,10);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{D}
+% As with the B, there are two ways to do this letter: One way would
+% be to make the arc a true half segment of a circle, the other would
+% be to compose it of two quarter segments, joined by a vertical
+% line. The second solution also entails, that two horizontal lines
+% should connect the two quarter circles with the left vertical
+% line. Again I chose the simple solution, which --- ofcourse ---
+% amounts to the first mentioned above.
+% \begin{macrocode}
+ beginchar("D",A_w#,l_h#,0); "The letter D";
+ uniarc(1/2h,P_t,(w-1/2h,1/2h),-90,90,10);
+ uniend(P_t,(P_t,h-P_t),90,180,20);
+ uniend(P_t,(P_t,P_t),180,270,30);
+ pickup Unipensqu ;
+ top lft z1 = (0,h-P_t) ; bot lft z2 = (0,P_t) ; draw z1--z2 ;
+ top lft z3 = (P_t,h) ; top rt z4 = (w-1/2h,h) ; draw z3--z4 ;
+ bot lft z5 = (P_t,0) ; bot rt z6 = (w-1/2h,0) ; draw z5--z6 ;
+ penlabels(1,2) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{E}
+% It can be argued, that the middle bar should be shorter then the top
+% and bottom bar, but since this only complicates things, I chose not
+% to do so. However, I am not going to be stuborn on this, and it may
+% well prove to be better aestethics, if the middle bar is shortend.
+% \begin{macrocode}
+ beginchar("E",A_w#,l_h#,0); "The letter E" ;
+ uniend(P_t,(P_t,h-P_t),90,180,10);
+ uniend(P_t,(P_t,P_t),180,270,20);
+ pickup Unipensqu ;
+ lft top z1 = (P_t,h) ; rt top z2 = (w,h) ; draw z1--z2 ;
+ lft z3 = (P_t,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ;
+ lft bot z5 = (P_t,0) ; rt bot z6 = (w,0) ; draw z5--z6 ;
+ lft top z7 = (0,h-P_t) ; lft bot z8 = (0,P_t) ; draw z7--z8 ;
+ penlabels(range 1 thru 8) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{F}
+% Ofcourse, very similar to the \textunibf{E}. The consideration
+% concerning the middle bar of the \textunibf{E} will ofcourse reflect
+% on this letter.
+% \begin{macrocode}
+ beginchar("F",A_w#,l_h#,0); "The letter F" ;
+ uniend(P_t,(P_t,h-P_t),90,180,10);
+ pickup Unipensqu ;
+ lft top z1 = (P_t,h) ; rt top z2 = (w,h) ; draw z1--z2 ;
+ lft z3 = (P_t,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ;
+ lft top z5 = (0,h-P_t) ; lft bot z6 = (0,0) ; draw z5--z6 ;
+ penlabels(range 1 thru 8);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{G}
+% This is very similar to the minuscle \textunibf{g}, the only difference
+% is the size, and that the down stroke doens't extend below the
+% baseline.
+% \begin{macrocode}
+ beginchar("G",l_h#,l_h#,0); "The letter G" ;
+ uniarc(w/2,P_t,(w/2,h/2),30,360,10) ;
+ pickup Unipensqu ;
+ top rt z1 = (w,h/2) ; bot rt z2 = (w,0) ;
+ draw z1--z2;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{H}
+% An awfull simple letter. There can be no doubt on how this should
+% look.
+% \begin{macrocode}
+ beginchar("H",A_w#,l_h#,0); "The letter H" ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top rt z3 = (w,h) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{I}
+% It doesn't get any simpler!
+% \begin{macrocode}
+ beginchar("I",P_t#,l_h#,0); "The letter I" ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{J}
+% \begin{macrocode}
+ beginchar("J",P_t#+2C_d#,l_h#,0); "The letter J";
+ uniend(P_t,(w-P_t,P_t),270,360,10);
+ pickup Unipensqu ;
+ lft bot z1 = (0,0) ; rt bot z2 = (w-P_t,0) ; draw z1--z2 ;
+ rt bot z3 = (w,P_t) ; rt top z4 = (w,h) ; draw z3--z4 ;
+ penlabels(1,2,3,4);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{K}
+% Similar to \textunibf{k}.
+% \begin{macrocode}
+ beginchar("K",(l_h#+3P_t#)/2,l_h#,0) ; "The letter K" ;
+ uniarc((h+P_t)/2,P_t,(P_t,h),270,360,10) ;
+ uniarc((h+P_t)/2,P_t,(P_t,0),0,90,20) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{L}
+% This is just a reflected \textunibf{J}.
+% \begin{macrocode}
+ beginchar("L",P_t#+2C_d#,l_h#,0) ; "The letter L" ;
+ uniend(P_t,(P_t,P_t),180,270,10) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,P_t) ; draw z1--z2 ;
+ bot lft z3 = (P_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{M}
+% The same kind of considerations as in \textunibf{m} went into this
+% letter.
+% \begin{macrocode}
+ beginchar("M",M_w#,l_h#,0) ; "The letter M" ;
+ temp := .25*(w+P_t);
+ uniarc(temp,P_t,(temp,h-temp),0,180,10) ;
+ uniarc(temp,P_t,(w-temp,h-temp),0,180,20) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h-temp) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top z3 = (w/2,h-temp) ; bot z4 = (w/2,0) ; draw z3--z4 ;
+ top rt z5 = (w,h-temp) ; bot rt z6 = (w,0) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{N}
+% Tricky because of the \textunibf{M} (see above).
+% \begin{macrocode}
+ beginchar("N",A_w#,l_h#,0); "The letter N" ;
+ uniarc(w/2,P_t,(w/2,h-w/2),0,180,10) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0); draw z1--z2 ;
+ top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{O}
+% No, this is not going to be an oval, but a \emph{circle\/}!
+% \begin{macrocode}
+ beginchar("O",l_h#,l_h#,0) ; "The letter O";
+ unicir(w/2,P_t,(w/2,h/2),10);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{P}
+% No surprises.
+% \begin{macrocode}
+ beginchar("P",A_w#,l_h#,0) ; "The letter P";
+ unicir(w/2,P_t,(w/2,h-w/2),10)
+ pickup Unipensqu ;
+ lft top z1 = (0,h-w/2) ; lft bot z2 = (0,0) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{Q}
+% There are to variants of this letter, one is an reflected
+% \textunibf{P}, and the other is a vaiant of an \textunibf{O}. The
+% default one, is the \textunibf{Q} variant. If you want to use the
+% other variant, you can acceses it directly with \Lcs{varQ}, or you
+% can pass the argument \texttt{varQ} to the \textsc{uni} package.
+% (Option \texttt{varQ} not implemented yet!)
+% \begin{macrocode}
+ beginchar("Q",l_h#,l_h#,p_d#) ; "The letter Q";
+ unicir(w/2,P_t,(w/2,w/2),10);
+ pickup Unipensqu ;
+ top z1 = (w/2,3P_t) ; bot z2 = (w/2,-d) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{R}
+% I'm not enterily happy with this letter, but quite frankly, I don't
+% know how else to make it. Please give me your suggestion.
+% \begin{macrocode}
+ beginchar("R",A_w#,l_h#,0) ; "The letter R";
+ unicir(w/2,P_t,(w/2,h-w/2),10) ;
+ rad := h-w+P_t ;
+ uniarc(rad,P_t,(w-rad,0),0,90,20) ;
+ pickup Unipensqu ;
+ lft top z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ temp := w/2-rad ;
+ if temp>0 :
+ pickup pensquare xscaled temp yscaled P_t ;
+ lft top z3 = (1/2w,rad) ; drawdot z3 ;
+ fi;
+ penlabels(1,2,3) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{S}
+% Just like the minuscle \textunibf{s}, this is a `slow' letter, i.e.,
+% it takes \MF{} quite some time to compute.
+% \begin{macrocode}
+ beginchar("S",A_w#,l_h#,0) ; "The letter S" ;
+ temp := (h+P_t)/4 ;
+ uniarc(temp,P_t,(temp,temp),180,270,10) ;
+ uniarc(temp,P_t,(w-temp,temp),270,450,20) ;
+ uniarc(temp,P_t,(temp,h-temp),90,270,30) ;
+ uniarc(temp,P_t,(w-temp,h-temp),0,90,40) ;
+ pickup Unipensqu ;
+ bot lft z1 = (temp,0) ; bot rt z2 = (w-temp,0) ; draw z1--z2 ;
+ lft z3 = (temp,h/2) ; rt z4 = (w-temp,h/2) ; draw z3--z4 ;
+ top lft z5 = (temp,h) ; top rt z6 = (w-temp,h) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{T}
+% Again --- simple!
+% \begin{macrocode}
+ beginchar("T",A_w#,l_h#,0); "The letter T" ;
+ pickup Unipensqu ;
+ top z1 = (w/2,h) ; bot z2 = (w/2,0) ; draw z1--z2 ;
+ top lft z3 = (0,h) ; top rt z4 = (w,h) ; draw z3--z4 ;
+ penlabels(1,2,3,4);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{U}
+% \emph{Font--jepody:} The character of the \universal{} font, that,
+% when reflected gives \textunibf{U}.
+% \begin{macrocode}
+ beginchar("U",A_w#,l_h#,0); "The letter U" ;
+ uniarc(w/2,P_t,(w/2,w/2),180,360,10) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,w/2) ; draw z1--z2 ;
+ top rt z3 = (w,h) ; bot rt z4 = (w,w/2) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{V}
+% See also the minuscle \textunibf{v}.
+% \begin{macrocode}
+ beginchar("V",A_w#,l_h#,0); "The letter V" ;
+ unilne(P_t,(0,h),(w/2,P_t),1,1,10);
+ unilne(P_t,(w/2,P_t),(w,h),1,1,20);
+ uniarc(P_t,P_t,(w/2,P_t),180,360,30);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{W}
+% Flippedy--flop.
+% \begin{macrocode}
+ beginchar("W",M_w#,l_h#,0) ; "The letter W" ;
+ temp := .25*(w+P_t);
+ uniarc(temp,P_t,(temp,temp),180,360,10) ;
+ uniarc(temp,P_t,(w-temp,temp),180,360,20) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,temp) ; draw z1--z2 ;
+ top z3 = (w/2,h) ; bot z4 = (w/2,temp) ; draw z3--z4 ;
+ top rt z5 = (w,h) ; bot rt z6 = (w,temp) ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{X}
+% This is a bit tricky --- see the minuscle \textunibf{x}.
+% \begin{macrocode}
+ beginchar("X",l_h#,l_h#,0) ; "The letter X" ;
+ uniarc(h/2,P_t,(P_t/2,h/2),270,90,10);
+ uniarc(h/2,P_t,(w-P_t/2,h/2),90,270,20);
+ temp := (h-w+P_t)/2 ;
+ pickup pensquare xscaled temp yscaled P_t slanted slantratio ;
+ lft top z1 = (0,h) ; draw z1 ;
+ lft bot z2 = (0,0) ; draw z2 ;
+ rt top z3 = (w,h) ; draw z3 ;
+ rt bot z4 = (w,0) ; draw z4 ;
+ penlabels(1,2,3,4);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{Y}
+% \Newestchanges{v2.0}{98/08/01}{Character \textunibf{Y} changed.}
+% This actually a bit different from \textunibf{y}, but it looks right.
+% \begin{macrocode}
+ beginchar("Y",A_w#,l_h#,0); "The letter Y" ;
+ uniarc(w/2,P_t,(w/2,h-P_t),180,360,10) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; drawdot z1 ;
+ top rt z2 = (w,h) ; drawdot z2 ;
+ top z3 = (w/2,h-w/2) ; bot z4 = (w/2,0) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{Z}
+% Again a tricky letter. For more onm this please refer to the
+% minuscle \textunibf{z}.
+%
+% Notice that the angle \texttt{phi} in this majuscle is not the
+% same as in the minuscles \textunibf{z}, since this letter doesn't fit
+% in a square, but is retangular.
+% \begin{macrocode}
+ beginchar("Z",A_w#,l_h#,0) ; "The letter Z" ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; top rt z2 = (w-P_t,h) ; draw z1--z2 ;
+ bot lft z3 = (P_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ;
+ phi := angle((w,h-P_t)-(0,P_t)) ;
+ z5 = (P_t,P_t) ; z6 = z5 + P_t*(-sind(phi),cosd(phi)) ;
+ z7 = (w-P_t,h-P_t) ; z8 = z7 + P_t*(sind(phi),-cosd(phi)) ;
+ uniend(P_t,z5,90+phi,270,10);
+ uniend(P_t,z7,-90+phi,90,20);
+ fill z5--z6--z7--z8--cycle ;
+ penlabels(range 1 thru 8);
+ endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% As explain in the begining of the section, this file is one big
+% \texttt{if...else...fi} loop to mak the generation of the strict
+% font easier.
+%
+% The idea is, that if \texttt{strict} is \texttt{true}, then the main
+% part of this file shouldn't be used, but rather \texttt{unilow.mf}
+% should be loaded again, but with this time the characters should be
+% placed where the majuscules should be.
+%
+% This is done by defining \texttt{code\_offset} to be the (negative)
+% difference the ASCII code for \texttt{A} and \texttt{a}. After we
+% have input \texttt{unilow.mf} once more, we reset
+% \texttt{code\_offset}.
+% \begin{macrocode}
+else :
+ code_offset := ASCII"A" - ASCII"a" ;
+ input unilow ;
+ code_offset := 0 ;
+fi ;
+
+% \end{macrocode}
+%\iffalse
+%</upp>
+%\fi
+%\iffalse
+%<*dig>
+%\fi
+% \subsection{The Numbers --- (\texttt{unidig.mf})}
+% \file{unidig.mf}
+%
+% I couldn't find any design of numbers, I could directly ascribe to
+% Herbert Bayer. I, however, found some other examples, and from
+% these, and my general conception of the font, I designed the
+% numerals, as they are seen below.
+%
+% \begin{fontcode}{0}
+% Perhaps this should have been a circle, but to destingice the zero
+% from the majuscle {\uni O}, I chose to strecth it.
+% \begin{macrocode}
+beginchar("0",A_w#,l_h#,0) ; "The number 0" ;
+ uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ;
+ uniarc(w/2,p_t,(w/2,w/2),180,360,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,w/2) ; draw z1--z2 ;
+ top rt z3 = (w,h-w/2) ; bot rt z4 = (w,w/2) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{1}
+% Here we use the dimension \texttt{c\_d}, since the stem should be
+% thee same lenght in the medium font as in the bold face one.
+% \begin{macrocode}
+beginchar("1",2c_d#,l_h#,0) ; "The number 1" ;
+ uniend(p_t,(w-p_t,h-p_t),0,90,10) ;
+ pickup unipensqu ;
+ lft top z1 = (0,h) ; rt top z2 = (w-p_t,h) ; draw z1--z2 ;
+ rt top z3 = (w,h-p_t) ; rt bot z4 = (w,0) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{2}
+% Again, this is a bit tricky, for the same reason as the minuscle
+% {\uni z}.
+% \begin{macrocode}
+beginchar("2",A_w#,l_h#,0) ; "The number 2" ;
+ uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ;
+ phi := angle((w,h-w/2)-(0,p_t)) ;
+ z1 = (w-p_t,h-w/2) ; z2 = z1 + p_t*(sind(phi),-cosd(phi)) ;
+ z3 = (p_t,p_t) ; z4 = z3 + p_t*(-sind(phi),cosd(phi)) ;
+ fill z1--z2--z3--z4--cycle ;
+ uniend(p_t,z1,270+phi,360,20) ;
+ uniend(p_t,z3,90+phi,270,30) ;
+ pickup unipensqu ;
+ bot lft z5 = (p_t,0) ; bot rt z6 = (w,0) ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{3}
+% By first defining to paths similar to the two circle segments, it is
+% possible to calculate the intersectionpoint, and thereby the angle
+% \texttt{phi}, where the to segments meet, relative to one of the
+% centers. This angle is then used to define the \emph{real} path, and
+% the rightmost point of the middle bar.
+% \begin{macrocode}
+beginchar("3",A_w#,l_h#,0) ; "The number 3" ;
+ path arc_a, arc_b ;
+ arc_a = (w,h-w/2)..(w/2,h-w) ; arc_b = (w,w/2)..(w/2,w) ;
+ z3 = arc_a intersectionpoint arc_b ; phi := angle(z3-(w/2,w/2)) ;
+ uniarc(w/2,p_t,(w/2,h-w/2),-phi,180,10) ;
+ uniarc(w/2,p_t,(w/2,w/2),-180,phi,20) ;
+ pickup unipensqu ;
+ rt z1 = (w/2*(1+cosd(phi)),h/2) ; lft z2 = (w/2,h/2) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{4}
+% One could argue, that the top left stroke should be vertical, but I
+% chose to go for a $45^\circ$ slanted line, for aestethic reasons.
+% \begin{macrocode}
+beginchar("4",A_w#,l_h#,0) ; "The number 4" ;
+ z1 = (w-p_t,h-p_t) ; z2 = z1 + p_t*(-1/sqrt(2),1/sqrt(2)) ;
+ z3 = (p_t,h-w+p_t) ; z4 = z3 + p_t*(-1/sqrt(2),1/sqrt(2)) ;
+ fill z1--z2--z4--z3--cycle ;
+ uniend(p_t,z1,0,135,10) ;
+ uniend(p_t,z3,135,270,20) ;
+ pickup unipensqu ;
+ top rt z5 = (w,h-p_t) ; bot rt z6 = (w,0) ; draw z5--z6 ;
+ bot lft z7 = (p_t,h-w) ; bot rt z8 = (w,h-w) ; draw z7--z8 ;
+ penlabels(range 1 thru 8) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{5}
+% This gave me some trouble. I originally wanted the arc to have a
+% diameter the width of the character, but that meant, that the to
+% horizontal lines of the font, came so close to each other, that it
+% didn't look good. So I played a little with \texttt{rad}, and
+% decided that the current value gave the nicest resault.
+% \begin{macrocode}
+beginchar("5",A_w#,l_h#,0) ; "The number 5" ;
+ rad := 9w/20 ;
+ uniarc(rad,p_t,(w-rad,rad),-150,90,10) ;
+ uniend(p_t,(p_t,h-p_t),90,180,20) ;
+ uniend(p_t,(p_t,2rad),180,270,30) ;
+ pickup unipensqu ;
+ top lft z1 = (p_t,2rad) ; top rt z2 = (w-rad,2rad) ; draw z1--z2 ;
+ bot lft z3 = (0,2rad) ; top lft z4 = (0,h-p_t) ; draw z3--z4 ;
+ top lft z5 = (p_t,h) ; top rt z6 = (w,h) ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{6}
+% This was almost to easy --- a circle, an arc, and a line connecting
+% them.
+% \begin{macrocode}
+beginchar("6",A_w#,l_h#,0) ; "The number 6" ;
+ unicir(w/2,p_t,(w/2,w/2),10) ;
+ uniarc(w/2,p_t,(w/2,h-w/2),60,180,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,w/2) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{7}
+% Apperently, this character could have the same problems as the
+% \textuni{2}, but it didn't --- can you see why not?
+% \begin{macrocode}
+beginchar("7",A_w#,l_h#,0) ; "The number 7" ;
+ z1 = (w-p_t,h-p_t) ; phi := angle(z1) ;
+ uniend(p_t,z1,-90+phi,90,10) ;
+ z2 = z1 + p_t*(cosd(90-phi),-sind(90-phi)) ;
+ z3 = (p_t/cosd(90-phi),0) ; z4 = (0,0) ;
+ fill z1--z2--z3--z4--cycle ;
+ pickup unipensqu ;
+ top lft z5 = (0,h) ; top rt z6 = (w-p_t,h) ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{8}
+% Ha ha, to circles, one on top of the other. Some may prefer if the
+% bottom most circle had a slightly larger radius then the top most,
+% but I believe that to be in conflict with the general idea of
+% simplicity.
+% \begin{macrocode}
+beginchar("8",1/2*(l_h#+p_t#),l_h#,0) ; "The number 8" ;
+ unicir(w/2,p_t,(w/2,w/2),10) ;
+ unicir(w/2,p_t,(w/2,h-w/2),20) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{9}
+% See above under \textuni{6}.
+% \begin{macrocode}
+beginchar("9",A_w#,l_h#,0) ; "The number 9" ;
+ unicir(w/2,p_t,(w/2,h-w/2),10) ;
+ uniarc(w/2,p_t,(w/2,w/2),-150,0,20) ;
+ pickup unipensqu ;
+ top rt z1 = (w,h-w/2) ; bot rt z2 = (w,w/2) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+%\iffalse
+%</dig>
+%\fi
+%\iffalse
+%<*spe>
+%\fi
+% \subsection{Specials --- \texttt{unispe.mf}}
+% \file{unispe.mf}
+%
+% For these characters, I couldn't find any original design,
+% so once again, I did some inter-- and extrapolation, plus I had some
+% print--outs of other implenations of Herbert Bayers universal
+% font. So once again, I am to blame for any aestethic judgements.
+%
+% \begin{fontcode}{\char"10}
+% At first I thought I didn't had to do this character, but then I
+% realized that you \emph{do} needed, since some words are spelled
+% with some sort of accent over the ``i'', other then a single dot,
+% e.g., \textunibf{na\"ive}.
+% \begin{macrocode}
+beginchar(hex"10",p_t#,x_h#,0) ; "The dotless letter i" ;
+ pickup unipensqu ;
+ bot lft z1 = (0,0) ; top lft z2 = (0,h) ; draw z1--z2;
+ penlabels(1,2);
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"11}
+% Non single dot j's are not as frequent as those of i's, so for the
+% sake of completness, if nothing else, this letter is included.
+% \begin{macrocode}
+beginchar(hex"11",p_t#,x_h#,p_d#) ; "The dotless letter j" ;
+ pickup unipensqu ;
+ bot lft z1 = (0,-d) ; top lft z2 = (0,h) ; draw z1--z2 ;
+ penlabels(1,2);
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"24}
+% I couldn't make up my mind wether this should just be a \textunibf{s},
+% with a vertical bar through, or if I should make it differntly. In
+% the end, I chose to make it different, since I think it looks best
+% in the context of the font.
+% \begin{macrocode}
+beginchar("$",(l_h#-c_d#+p_t#)/2,l_h#,c_d#) ; "The dollar sign ($)" ;
+ uniarc(w/2,p_t,(w/2,w/2),180,450,10) ;
+ uniarc(w/2,p_t,(w/2,h-c_d-w/2),0,270,20) ;
+ pickup unipensqu ;
+ top z1 = (w/2,h) ; bot z2 = (w/2,-d) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"26}
+% You could argue back and forth on the shape of the ampersand, but I
+% decided to go for a simple design.
+% \begin{macrocode}
+beginchar("&",(l_h#+p_t#)/2+c_d#,l_h#,c_d#) ; "The ampersand (&)" ;
+ rad := (w-c_d)/2 ;
+ unicir(rad,p_t,(rad,h-rad),10) ;
+ uniarc(rad,p_t,(rad,rad),0,270,20) ;
+ pickup unipensqu ;
+ lft bot z1 = (rad,0) ; rt bot z2 = (w,0) ; draw z1--z2 ;
+ rt top z3 = (w-c_d,rad) ; rt bot z4 = (w-c_d,-d) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{?}
+% I did have some considerations concerning this. Since I had kind of
+% decided to make avery junction ``smooth'', this also had to
+% be. However, that meant, that my original plan, to make this letter
+% as wide as an \textunibf{A}, didn't work, so I had to make it less
+% wide, which in the end does look better.
+% \begin{macrocode}
+beginchar("?",l_h#-5c_d#/2,l_h#,0) ; "The question mark (?)" ;
+ temp := angle((P_T,-w/2)) - 0.01 ;
+ uniarc(w/2,P_T,(w/2,h-w/2),temp,180,10) ;
+ uniend(P_T,((w+P_T)/2,h-w),90,180,20) ;
+ uniend(P_T,((w+P_T)/2,h-w+P_T),270,360+temp,30) ;
+ pickup UniPensqu ;
+ top z1 = (w/2,h-w) ; bot z2 = (w/2,2P_T) ; draw z1--z2 ;
+ pickup UniPencir ;
+ bot z3 = (w/2,0) ; drawdot z3 ;
+ penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"3E}
+% These Spanish special letters, are just rotations, so nothing
+% special is going on here.
+% \begin{macrocode}
+beginchar(spanish_query,l_h#-5c_d#/2,x_h#,p_d#) ; "The Spanish query" ;
+ temp := angle((-P_T,w/2))-0.01 ;
+ uniarc(w/2,P_T,(w/2,-d+w/2),temp,360,10) ;
+ uniend(P_T,((w-P_T)/2,-d+w),270,360,20) ;
+ uniend(P_T,((w-P_T)/2,-d+w-P_T),90,temp,30) ;
+ pickup UniPensqu ;
+ bot z1 = (w/2,-d+w) ; top z2 = (w/2,h-2P_T) ; draw z1--z2 ;
+ pickup UniPencir ;
+ top z3 = (w/2,h) ; drawdot z3 ;
+ penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"3C}
+% See above.
+% \begin{macrocode}
+beginchar(spanish_shriek,P_T#,x_h#,p_d#) ; "The Spanish shriek" ;
+ pickup UniPencir ; top z1 = (w/2,h) ; drawdot z1 ;
+ pickup UniPensqu ; top z2 = (w/2,h-2P_T) ; bot z3 = (w/2,-d) ;
+ draw z2--z3 ; penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+%\iffalse
+%</spe>
+%\fi
+%\iffalse
+%<*pun>
+%\fi
+% \subsection{Punctuations --- \texttt{unipun.mf}}
+% \file{unipun.mf}
+%
+% This is the programs for general punctuation marks, ranging from
+% period to ast.
+%
+% \begin{fontcode}{\char"21}
+% Quite a simple character. Notice the use of \texttt{unipencir}.
+% \begin{macrocode}
+beginchar("!",P_T#,l_h#,0) ; "The exclamation mark (!)" ;
+ pickup UniPensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,2P_T) ; draw z1--z2 ;
+ pickup UniPencir ;
+ bot lft z3 = (0,0) ; drawdot z3 ;
+ penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{(}
+% Here, and in the next character ()) we don't use pens, since we can
+% get a much better resault using the \MF{} path macro \texttt{...} .
+% \begin{macrocode}
+beginchar("(",x_w#/2,l_h#,p_d#) ; "The left paranthesis (()" ;
+ z1 = (w,h) ; z2 = (p_t,(h-d)/2) ; z3 = (w,-d) ;
+ z4 = (w-p_t,-d) ; z5 = (0,(h-d)/2) ; z6 = (w-p_t,h) ;
+ fill z1..z2..z3--z4..z5..z6--cycle ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{)}
+% \begin{macrocode}
+beginchar(")",x_w#/2,l_h#,p_d#) ; "The right paranthesis ())" ;
+ z1 = (p_t,h) ; z2 = (w,(h-d)/2) ; z3 = (p_t,-d) ;
+ z4 = (0,-d) ; z5 = (w-p_t,(h-d)/2) ; z6 = (0,h) ;
+ fill z1..z2..z3--z4..z5..z6--cycle ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+%
+% \begin{fontcode}{\#}
+% I never really got satisfied with this letter, but this is the best
+% I could do --- who ever uses a \# anyway!
+% \begin{macrocode}
+beginchar("#",x_w#,x_h#,0) ; "The hash mark (#)" ;
+ unilne(p_t,(0,0),(w/2,h),1,1,10) ;
+ unilne(p_t,(w/2,0),(w,h),1,1,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,(h-c_d)/2) ; top rt z2 = (w,(h-c_d)/2) ;
+ bot lft z3 = (0,(h+c_d)/2) ; bot rt z4 = (w,(h+c_d)/2) ;
+ draw z1--z2 ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\%}
+% Among other characters, this one made me define a dimension called
+% \texttt{c\_d}, which is to be used for all kinds of curves. The idea
+% is that, some sizes curves should depend on the weight of the font,
+% and others not. Those that \emph{shouldn't} will use \texttt{c\_d}.
+% \begin{macrocode}
+beginchar("%",x_w#,l_h#,0) ; "The percent sign (%)" ;
+ temp := 3c_d/2 ;
+ unicir(temp,p_t,(temp,h-temp),10) ;
+ unicir(temp,p_t,(w-temp,temp),20) ;
+ unilne(p_t,(0,0),(w,h),1,1,30) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{'}
+% Agian we have a translated comma --- the apostrophe.
+% \begin{macrocode}
+beginchar("'",2P_T#,l_h#,0) ; "The apostrophe (')" ;
+ uniend(w/2,(w/2,h-w/2),0,180,10) ;
+ z1 = (0,h-w/2) ; z2 = (w,h-w/2) ; z3 = (0,h-3w/2) ;
+ fill z1--z2--z3--cycle ; penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{*}
+% This isn't really complicated execpt for the value of \texttt{temp},
+% which insures that the top of ast will be in the character.
+% \begin{macrocode}
+beginchar("*",x_w#,l_h#,0) ; "The ast (*)" ;
+ path rect ;
+ temp := h-(w*sind(60)-p_t*cosd(60))/2 ;
+ pickup unipensqu ;
+ lft z1 = (0,temp) ; rt z2 = (w,temp) ; draw z1--z2 ;
+ rect = (bot lft z1)--(top lft z1)--(top rt z2)--(bot rt z2)--cycle ;
+ fill rect rotatedabout((w/2,temp),60) ;
+ fill rect rotatedabout((w/2,temp),120) ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{+}
+% Plus and minus, now that's easy.
+% \begin{macrocode}
+beginchar("+",x_w#,x_h#,0) ; "The plus sign (+)" ;
+ pickup unipensqu ;
+ lft z1 = (0,w/2) ; rt z2 = (w,w/2) ; draw z1--z2 ;
+ bot z3 = (w/2,0) ; top z4 = (w/2,w) ; draw z3--z4 ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{,}
+% Incedently, the apostrophs (both single and reversed), are
+% just translations and reflections of the comma.
+%
+% \textsl{Mathemathical problem:} Work out which algebraic group the
+% characters `\textunibf{,}', `\textunibf{'}', and `\textunibf{`}',
+% belongs to?
+% \begin{macrocode}
+beginchar(",",2P_T#,2P_T#,2P_T#) ; "The punctuation ," ;
+ uniend(w/2,(w/2,0),0,180,10) ;
+ z1 = (0,0) ; z2 = (w,0) ; z3 = (0,-d) ;
+ fill z1--z2--z3--cycle ; penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{-}
+% Minus? --- isn't it the opposite of plus?
+% \begin{macrocode}
+beginchar("-",4x_w#/5,x_h#,0) ; "The hyphen (-)" ;
+ pickup unipensqu ;
+ lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ;
+ penlabels(1,2);
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{.}
+% Wow, a dot!
+% \begin{macrocode}
+beginchar(".",2P_T#,2P_T#,0) ; "The punctuation ." ;
+ uniend(w/2,(w/2,h/2),0,360,10) ;
+% pickup UniPencir ; lft bot z1 = (0,0) ; drawdot z1 ; penlabels(1);
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{/}
+% This is a nice utilization of \texttt{unilne}.
+% \begin{macrocode}
+beginchar("/",x_w#,l_h#,0) ; "The slash (/)" ;
+ unilne(p_t,(0,0),(w,h),1,1,10) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{:}
+% Wauw, \emph{two} dots --- cool!
+% \begin{macrocode}
+beginchar(":",2P_T#,x_h#,0) ; "The punctuation :" ;
+ uniend(w/2,(w/2,h-w/2),0,360,10) ;
+ uniend(w/2,(w/2,w/2),0,360,20) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{;}
+% Again, this is straight forward.
+% \begin{macrocode}
+beginchar(";",2P_T#,x_h#,2P_T#) ; "The punctuation ;" ;
+ uniend(w/2,(w/2,h-w/2),0,360,10) ;
+ uniend(w/2,(w/2,0),0,180,20) ;
+ z2 = (0,0) ; z3 = (w,0) ; z4 = (0,-d) ; fill z2--z3--z4--cycle ;
+ penlabels(1,2,3,4) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"3D}
+% These characters are rediculously simple.
+% \begin{macrocode}
+beginchar("=",x_w#,x_h#,0) ; "The equal sign (=)" ;
+ pickup unipensqu ;
+ top lft z1 = (0,(h-p_t)/2) ; top rt z2 = (w,(h-p_t)/2) ;
+ bot lft z3 = (0,(h+p_t)/2) ; bot rt z4 = (w,(h+p_t)/2) ;
+ draw z1--z2 ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{@}
+% Now this was a bit of a challenge. It is clear, that the left stroke
+% should be a straight line tarveling all the way to the baseline, but
+% how big should the small circle be. I decided to go for the largest
+% one, that didn't touch or intersected the outer arc more then one
+% place, i.e., at the far left.
+% \begin{macrocode}
+beginchar("@",l_h#,l_h#,0) ; "The at sign (@)" ;
+ uniarc(w/2,p_t,(w/2,h/2),0,240,10) ;
+ unicir(w/3,p_t,(2w/3,w/3),20) ;
+ pickup unipensqu ;
+ top rt z1 = (w,w/2) ; bot rt z2 = (w,0) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{[}
+% Notice the soft corners. This is ofcourse accomplieshed with
+% \texttt{uniend}, which turned out to be a very nice macro.
+% \begin{macrocode}
+beginchar("[",3p_t#,l_h#,p_d#) ; "The left bracket ([)" ;
+ uniend(p_t,(p_t,h-p_t),90,180,10) ;
+ uniend(p_t,(p_t,-d+p_t),180,270,20) ;
+ pickup unipensqu ;
+ top lft z1 = (p_t,h) ; top rt z2 = (w,h) ; draw z1--z2 ;
+ top lft z3 = (0,h-p_t) ; bot lft z4 = (0,-d+p_t) ; draw z3--z4 ;
+ bot lft z5 = (p_t,-d) ; bot rt z6 = (w,-d) ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{]}
+% Speaking of reflections.
+% \begin{macrocode}
+beginchar("]",3p_t#,l_h#,p_d#) ; "The right braket (])" ;
+ uniend(p_t,(w-p_t,h-p_t),0,90,10) ;
+ uniend(p_t,(w-p_t,-d+p_t),270,360,20) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; top rt z2 = (w-p_t,h) ; draw z1--z2 ;
+ top rt z3 = (w,h-p_t) ; bot rt z4 = (w,-d+p_t) ; draw z3--z4 ;
+ bot lft z5 = (0,-d) ; bot rt z6 = (w-p_t,-d) ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{`}
+% Who is this `comma' character --- he keeps poping up the strangest
+% places.
+% \begin{macrocode}
+beginchar("`",2P_T#,l_h#,0) ; "The reversed apostroph (`)" ;
+ uniend(w/2,(w/2,h-w),180,360,10) ;
+ z1 = (0,h) ; z2 = (0,h-w) ; z3 = (w,h-w) ; fill z1--z2--z3--cycle ;
+ penlabels(1,2,3) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{--}
+% Ah, a horizontal line --- how fascinating!
+% \begin{macrocode}
+beginchar(hex"7B",m_w#,x_h#,0) ; "The en-dash (--)" ;
+ pickup unipensqu ;
+ lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{---}
+% And another horizontal line --- and it's even longer then the
+% previous one.
+% \begin{macrocode}
+beginchar(hex"7C",M_w#,x_h#,0) ; "The em-dash (---)" ;
+ pickup unipensqu ;
+ lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ;
+ penlabels(1,2) ;
+endchar;
+
+% \end{macrocode}
+% \end{fontcode}
+%\iffalse
+%</pun>
+%\fi
+%\iffalse
+%<*acc>
+%\fi
+% \subsection{Accents --- \texttt{uniacc.mf}}
+% \file{uniacc.mf}
+% \begin{fontcode}{\char"12}
+% Even though you use a reversed apostrophe in \LaTeX{} to get this
+% accent, the accent shouldn't look like a apostophe, that would be
+% far to clumsy. So instead we \emph{rotate} a comma and translate it
+% --- algebraic groups again!
+% \begin{macrocode}
+beginchar(hex"12",x_w#,l_h#,0) ; "The accent `" ;
+ uniend(P_T/2,(w/2,a_h+P_T/2),90,270,10) ;
+ z1 = (w/2,a_h+P_T) ; z2 = (w/2,a_h) ; z3 = (w/2+P_T,a_h) ;
+ fill z1--z2--z3--cycle ; penlabels(1,2,3) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"13}
+% See above.
+% \begin{macrocode}
+beginchar(hex"13",x_w#,l_h#,0) ; "The accent '" ;
+ uniend(P_T/2,(w/2,a_h+P_T/2),-90,90,10) ;
+ z1 = (w/2,a_h+P_T) ; z2 = (w/2,a_h) ; z3 = (w/2-P_T,a_h) ;
+ fill z1--z2--z3--cycle ; penlabels(1,2,3) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"14}
+% \begin{macrocode}
+beginchar(hex"14",x_w#,l_h#,0) ; "The accent hachek" ;
+ z1 = (w/2,a_h+p_t) ; uniend(p_t,z1,225,315,10) ;
+ z2 = z1 + p_t*(-1,-1)/sqrt(2) ; z3 = z1 + p_t*(-1,1) ;
+ z4 = z3 + (-p_t*sqrt(2),0) ; path rombe ;
+ rombe := z1--z2--z4--z3--cycle ; fill rombe ;
+ fill rombe reflectedabout ((w/2,0),(w/2,h)) ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"15}
+% \begin{macrocode}
+beginchar(hex"15",x_w#,l_h#,0) ; "The accent breve" ;
+ rad := 3p_t/2 ; uniarc(rad,p_t,(w/2,a_h+rad),180,360,10) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"16}
+% \begin{macrocode}
+beginchar(hex"16",x_w#,a_h#+p_t#,0) ; "The accent macron (bar)" ;
+ pickup unipensqu ;
+ bot lft z1 = (w/2-2p_t,a_h) ; bot rt z2 = (w/2+2p_t,a_h) ;
+ draw z1--z2 ; penlabels(1,2) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"17}
+% \begin{macrocode}
+beginchar(hex"17",A_w#+4/3*(l_h#-x_h#)*slantratio,l_h#,0) ;
+ "The accent circle" ;
+ rad := P_T ; unicir(rad,p_t,(w/2,h-rad),10) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"18}
+% \begin{macrocode}
+beginchar(hex"18",x_w#,x_h#,2c_d#) ; "The accent cidelia" ;
+ uniarc(d/2,2P_T/3,(w/2+d/4,-d/2),90,270,10) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"20}
+% \begin{macrocode}
+phi := 15 ; tmp# := 3c_d# ; define_pixels(tmp) ;
+beginchar(hex"20",tmp#*cosd(phi)+p_t#*sind(phi),l_h#,0) ;
+ "The accent bar over l" ;
+ z1 = (0,(h+p_t*cosd(phi)-tmp*sind(phi))/2) ;
+ z2 = (p_t*sind(phi),(h-p_t*cosd(phi)-tmp*sind(phi))/2) ;
+ z3 = (w,(h-p_t*cosd(phi)+tmp*sind(phi))/2) ;
+ z4 = (w-p_t*sind(phi),(h+p_t*cosd(phi)+tmp*sind(phi))/2) ;
+ fill z1--z2--z3--z4--cycle ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"5E}
+% \begin{macrocode}
+beginchar(hex"5E",x_w#,l_h#,0) ; "The accent hat" ;
+ z1 = (w/2,a_h+p_t) ; uniend(p_t,z1,45,136,10) ;
+ z2 = z1 + p_t*(-1,1)/sqrt(2) ; z3 = z1 + p_t*(-1,-1) ;
+ z4 = z3 + (-p_t*sqrt(2),0) ; path rombe ;
+ rombe := z1--z2--z4--z3--cycle ; fill rombe ;
+ fill rombe reflectedabout ((w/2,0),(w/2,h)) ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"5F}
+% \begin{macrocode}
+beginchar(hex"5F",x_w#,l_h#,0) ; "The accent dot" ;
+ pickup UniPencir ; bot z1 = (w/2,a_h) ; drawdot z1 ; penlabels(1) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"7D}
+% \begin{macrocode}
+beginchar(hex"7D",x_w#,l_h#,0) ; "The accent ''" ;
+ rad := P_T/2 ;
+ uniend(rad,(w/2-rad,a_h+rad),-90,90,10) ;
+ uniend(rad,(w/2+P_T,a_h+rad),-90,90,20) ;
+ z1 = (w/2-rad-P_T,a_h) ; z2 = (w/2-rad,a_h) ;
+ z3 = (w/2-rad,a_h+P_T) ; fill z1--z2--z3--cycle ;
+ z4 = (w/2,a_h) ; z5 = (w/2+P_T,a_h) ;
+ z6 = (w/2+P_T,a_h+P_T) ; fill z4--z5--z6--cycle ;
+ penlabels(range 1 thru 6) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"7E}
+% \begin{macrocode}
+beginchar(hex"7E",x_w#,l_h#,0) ; "The accent ~" ;
+ rad := (w*sqrt(2)+p_t)/4 ; temp := (2w-p_t*sqrt(2))/8 ;
+ uniarc(rad,p_t,(w/2+temp,a_h+rad),225,315,10) ;
+ uniarc(rad,p_t,(w/2-temp,a_h+rad-2temp),45,135,20) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"7F}
+% \begin{macrocode}
+beginchar(hex"7F",x_w#,l_h#,0) ; "The accent umlout (double dot)" ;
+ pickup UniPencir ;
+ bot z1 = (w/2-P_T,a_h) ; bot z2 = (w/2+P_T,a_h) ;
+ drawdot z1 ; drawdot z2 ; penlabels(1,2) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+%\iffalse
+%</acc>
+%\fi
+%\iffalse
+%<*lig>
+%\fi
+% \subsection{Ligatures --- \texttt{unilig.mf}}
+% \file{unilig.mf}
+%
+% \begin{fontcode}{SS}
+% If we are making a small caps shaped font, then we need to make an
+% upper case version of the german double s (\ss), so we start of
+% testing if the \texttt{caps} flag is set.
+% \begin{macrocode}
+if caps:
+ beginchar(hex"19",5/2x_w#,x_h#,0) ; "Ligature SS" ;
+ temp := (h+p_t)/4 ;
+ uniarc(temp,p_t,(temp,temp),180,270,10) ;
+ uniarc(temp,p_t,(2w/5-temp,temp),270,450,20) ;
+ uniarc(temp,p_t,(temp,h-temp),90,270,30) ;
+ uniarc(temp,p_t,(2w/5-temp,h-temp),0,90,40) ;
+ pickup unipensqu ;
+ bot lft z1 = (temp,0) ; bot rt z2 = (2w/5-temp,0) ;
+ lft z3 = (temp,h/2) ; rt z4 = (2w/5-temp,h/2) ;
+ top lft z5 = (temp,h) ; top rt z6 = (2w/5-temp,h) ;
+ draw z1--z2 ; draw z3--z4 ; draw z5--z6 ;
+ penlabels(1,2,3,4,5,6) ;
+ currentpicture := currentpicture + (currentpicture shifted
+ (3/5w,0)) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"19}
+% If we are not making a small caps font, then the usual german double
+% s is made.
+% \begin{macrocode}
+else:
+ beginchar(hex"19",(l_h#+3p_t#)/2,l_h#,p_t#) ; "Ligature ss" ;
+ rad := (w-p_t)/2 ;
+ uniarc(rad,p_t,(p_t+rad,h-rad),-90,180,10) ;
+ uniarc(rad,p_t,(p_t+rad,rad),-90,90,20) ;
+ pickup unipensqu ;
+ top lft z1 = (p_t,h-rad) ; bot lft z2 = (p_t,-d) ; draw z1--z2 ;
+ lft z3 = (0,h/2) ; rt z4 = (w-rad,h/2) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar ;
+fi ;
+
+% \end{macrocode}
+% \end{fontcode}
+% The next three characters should not be made in a small caps font,
+% so these are all put in side the conditinal
+% \begin{verbatim}
+% if not caps :
+% \end{verbatim}
+% However, we need to put small caps versions of these letters in the
+% position of these charcaters, so we use a little trick later on to
+% do this.
+%
+% And if we are making a \emph{strict} shaped font, then we need to
+% put these characters into two slots each, with three slots between
+% the to replicas of the character. In that case, we first evaluate
+% the code once, then if \texttt{strict} is false, we go on in the
+% code, otherwise, we evaluate the code once more, \emph{but} the
+% characters is put into new slots 3 slots later then before, since
+% \texttt{code\_offset} now is 3. Finally in the end we reset
+% \texttt{code\_offset}.
+%
+% This trick is used also in \texttt{uniext.mf} and
+% \texttt{unilow.mf}.
+%
+% \begin{fontcode}{\char"1A}
+% This is just a combination of an \textunibf{a} and \textunibf{e},
+% which we earlier on saved in the picture variables \texttt{a\_pic}
+% and \texttt{e\_pic}.
+% \begin{macrocode}
+if not caps :
+ for temp = 1,2 :
+ if temp = 2 : code_offset := 3 ; fi ;
+ beginchar(hex"1A",2x_w#-p_t#,x_h#,0) ; "Ligature ae" ;
+ currentpicture := a_pic + ( e_pic shifted ((w-p_t)/2,0)) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"1B}
+% This is just a compinition of an \textunibf{o} and
+% \textunibf{e}. The \textunibf{e} we saved earlier on in the picture
+% variable \texttt{e\_pic}. The \textunibf{o} part is drawn anew.
+% \begin{macrocode}
+ beginchar(hex"1B",2x_w#-p_t#,x_h#,0) ; "Ligature oe" ;
+ unicir(h/2,p_t,(h/2,h/2),10) ;
+ currentpicture := currentpicture + (e_pic shifted ((w-p_t)/2,0)) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"1C}
+% This is really a simple letter. It utilizes the to macros
+% \texttt{unicir} and \texttt{unilne} in a very nice way, I think.
+% \begin{macrocode}
+ beginchar(hex"1C",x_w#,x_h#,0) ; "Ligature o/" ;
+ unicir(w/2,p_t,(w/2,h/2),10) ;
+ unilne(p_t,(0,0),(w,h),1,1,20) ;
+ endchar ;
+ exitif (not strict) ;
+ if temp = 2 : code_offset := 0 ; fi ;
+ endfor ;
+fi ;
+
+% \end{macrocode}
+% \end{fontcode}
+% Since we don't want any majusculues in the \emph{strict} shaped
+% font, the next three characteres is only generated if
+% \texttt{strict} is \texttt{false}.
+%
+% Since we have to make two version of the majuscules below in a small
+% caps font, we set up an \texttt{fot} loop. The trick is this: The
+% loop while always execute once, so the characters will always be
+% made in the original size. Now, if we are making a small caps font,
+% then the loop will execute once more, and we call the macro
+% \texttt{do\_font} (\texttt{temp = 2}), so that the new characters
+% will have the right dimensions.
+% \begin{macrocode}
+if not strict :
+ for temp = 1,2 :
+ if temp = 2 : do_caps(-3) ; fi ;
+
+% \end{macrocode}
+% \begin{fontcode}{\char"1D}
+% It wouln't make any sense to just do a combinition of \textunibf{A}
+% and \textunibf{E}, as were done in minuscules above, so we draw the
+% whole letter anew.
+% \begin{macrocode}
+ beginchar(hex"1D",M_w#,l_h#,0) ; "Ligature AE" ;
+ uniarc(w/2,P_t,(w/2,h-w/2),90,180,21) ;
+ uniend(P_t,((w+P_t)/2,P_t),180,270,30) ;
+ pickup Unipensqu ;
+ top lft z1 = (w/2,h) ; top rt z2 = (w,h) ;
+ top lft z3 = (0,h-w/2) ; bot lft z4 = (0,0) ;
+ lft z5 = (0,h/2) ; rt z6 = (w,h/2) ;
+ bot lft z7 = ((w+P_t)/2,0) ; bot rt z8 = (w,0) ;
+ top z9 = (w/2,h) ; bot z10 = (w/2,P_t) ;
+ draw z1--z2 ; draw z3--z4 ; draw z5--z6 ;
+ draw z7--z8 ; draw z9--z10 ;
+ penlabels(range 1 thru 10) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"1E}
+% Again, a simple combination of \textunibf{O} and \textunibf{E},
+% wouldn't work.
+% \begin{macrocode}
+ beginchar(hex"1E",M_w#,l_h#,0) ; "Ligature OE" ;
+ uniarc(h/2,P_t,(h/2,h/2),90,270,10) ;
+ pickup Unipensqu ;
+ top lft z1 = (h/2,h) ; top rt z2 = (w,h) ; draw z1--z2 ;
+ lft z3 = (h/2,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ;
+ bot lft z5 = (h/2,0) ; bot rt z6 = (w,0) ; draw z5--z6 ;
+ top z7 = (h/2,h) ; bot z8 = (h/2,0) ; draw z7--z8 ;
+ penlabels(range 1 thru 8) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"1F}
+% What a said above the minuscule \textunibf{\o} also goes for this
+% letter, since this is nothing but an enlargement of that character.
+% \begin{macrocode}
+ beginchar(hex"1F",l_h#,l_h#,0) ; "Liguture O/" ;
+ unicir(w/2,P_t,(w/2,h/2),10) ;
+ unilne(P_t,(0,0),(w,h),1,1,20) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% This is where it gets tricky. First we check to see if we are
+% maiking an small caps font, and if not so, we should exit the loop
+% right away, so that we don't screw up the minuscules we already have
+% made above. If, however, we are making a small caps font, we should,
+% after the second run, restore the dimensions to it's original state.
+% \begin{macrocode}
+ exitif (not caps) ;
+ if temp = 2 : end_do_caps ; fi ;
+ endfor ;
+fi ;
+
+% \end{macrocode}
+%\iffalse
+%</lig>
+%\fi
+%\iffalse
+%<*ext>
+%\fi
+% \subsection{Extras --- \texttt{uniext.mf}}
+% \file{uniext.mf}
+%
+% Please notice I included \textunibf{\char"0B}, \textunibf{\char"0C},
+% \textunibf{\char"0D}, and \textunibf{\char"0E}, which isn't
+% standard Computer Modern Roman policy. See more below.
+%
+% \Newestchanges{v2.0}{98/08/01}{Some of the \textunibf{bauhaus} symbols
+% that where avaliable in v1.0, has been taken out.}
+% The first part of this file is some symbols relevant to the
+% \textunibf{bauhaus} school. Please notice that some of the symbols
+% present in version~1.0 has been taken out\footnote{If you have used
+% version~1.0 of this font, and liked those characters and found them
+% useful, you should e--mail me \texttt{<cholm@fys.ku.dk>} and let me
+% know. If I get enough letters on this I will incorporate them again
+% in future releases.}, since the were seldomly used, and it made the
+% font contain exactly 128 characters.
+%
+% These characters should \emph{not} be slanted in a slanted shaped
+% font, hence we redefine \texttt{currenttrans} to \texttt{identity},
+% just before the next character, and resets it after the last
+% character. Also notice that \textuni{\bauhead} and
+% \textuni{\bauforms} may take some time to generate.
+% \begin{macrocode}
+currenttransform := identity ;
+
+% \end{macrocode}
+%
+% \begin{fontcode}{\char"00}
+% The next three characters are really not the complicated or useful
+% by themselves, but if you combine them, maybe even with the
+% \textsf{color} package of \LaTeX{}, you can really add some
+% \textunibf{bauhaus} flavour to your document.
+%
+% The square, ofcourse is obvious.
+% \begin{macrocode}
+beginchar(hex"00",l_h#,l_h#,0) ; "The filled square symbol" ;
+ z1 = (0,0) ; z2 = (w,0) ; z3 = (w,h) ; z4 = (0,h) ;
+ fill z1--z2--z3--z4--cycle ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"01}
+% Also four vectors are defined, put translated a bit, and another
+% path macro --- it is amazing how much you can do with so little.
+% \begin{macrocode}
+beginchar(hex"01",l_h#,l_h#,0) ; "The filled circle symbol" ;
+ z1 = (w,h/2) ; z2 = (w/2,h) ; z3 = (0,h/2) ; z4 = (w/2,0) ;
+ fill z1..z2..z3..z4..cycle ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"02}
+% Maybe every side of this trangle should be of the same length, mut
+% then I had to make the triangle either lower, or wider then the
+% square and circle. I couldn't decide, so I went for equal character
+% dimensions --- so I believe in equality, sue me!
+% \begin{macrocode}
+beginchar(hex"02",l_h#,l_h#,0) ; "The filled triangle symbol" ;
+ z1 = (0,0) ; z2 = (w,0) ; z3 = (w/2,h) ;
+ fill z1--z2--z3--cycle ;
+ penlabels(1,2,3) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"03}
+% This is a typical \textuni{bauhaus} symbol. I think it is very
+% beautiful.
+%
+% First we draw the surrounding circle.
+% \begin{macrocode}
+beginchar(hex"03",2l_h#,2l_h#,0) ; "The bauhaus-head symbol" ;
+ unicir(w/2,2c_d/9,(w/2,w/2),40) ;
+% \end{macrocode}
+% Then we define some horizontal variables $a_{1\ldots6}$ and some
+% vertical variables $b_{1\ldots8}$.
+% \begin{macrocode}
+ a1 := .702h ; a2 := .561h ; a3 := .491h ; a4 := .351h ;
+ a5 := .272h ; a6 := .140h ;
+ b1 := .202w ; b2 := .307w ; b3 := .412w ; b4 := .447w ;
+ b5 := .465w ; b6 := .518w ; b7 := .588w ; b8 := .623w ;
+% \end{macrocode}
+% Then we define the vectors needed for the eye, and draw the eye.
+% \begin{macrocode}
+ temp := c_d/6 ; pickup pensquare scaled temp ;
+ top lft z1 = (b1,a1) ; top rt z2 = (b2,a1) ; draw z1--z2 ;
+ bot rt z3 = (b4,a3) ; top rt z4 = (b4,a2) ; draw z3--z4 ;
+ z5 = (b2,a1) ; z6 = (b4,a1) ; z7 = (b4,a2) ; z8 = (b2,a2) ;
+ fill z5--z6--z7--z8--cycle ;
+% \end{macrocode}
+% Then we define the vectors needed for the nostril, and draw it. We
+% still use the pen used for the edges of the eye.
+% \begin{macrocode}
+ lft bot z9 = (b4,a4) ; lft bot z10 = (b7,a4) ; draw z9--z10 ;
+% \end{macrocode}
+% Next up is the chin. Again the same pen.
+% \begin{macrocode}
+ lft bot z11 = (b2,a6) ; rt bot z12 = (b6,a6) ; draw z11--z12 ;
+% \end{macrocode}
+% Now it's time for the lips. They need to be thicker then the chin
+% and edges of the eye, so we pickup a new pen.
+% \begin{macrocode}
+ temp := 3c_d/5 ; pickup pensquare scaled temp ;
+ lft top z13 = (b5,a5) ; rt top z14 = (b6,a5) ; draw z13--z14 ;
+% \end{macrocode}
+% It's time for the lower part of the face. Here we don't need to find
+% strange paths or the like, so we do it all with a \texttt{fill}
+% command.
+% \begin{macrocode}
+ z15 = (b6,a4) ; z16 = (b7,a4) ; z17 = (b7,a6) ; z18 = (b6,a6) ;
+ fill z15--z16--z17--z18--cycle ;
+% \end{macrocode}
+% Since it is not know where the forehead will end at the top, or
+% where the nect will end in the bottom, we define some temporay
+% paths, and make up the real ones from those.
+%
+% First we need to declare the paths.
+% \begin{macrocode}
+ path noselft, nosert, necklft, neckrt ;
+ path headcircle , parttop, partbot;
+% \end{macrocode}
+% Then we build five temporary paths, one for each side of the
+% forehead and neck, and one for the surronding circle.
+% \begin{macrocode}
+ z19 = (b7,a4) ; z20 = (b7,h) ; noselft = z19--z20 ;
+ z21 = (b8,h) ; z22 = (b8,a4) ; nosert = z21--z22 ;
+ z23 = (b3,a6) ; z24 = (b3,0) ; necklft = z23--z24 ;
+ z25 = (b6,0) ; z26 = (b6,a6) ; neckrt = z25--z26 ;
+ z27 = (w/2,h) ; z28 = (w,h/2) ; z29 = (w/2,0) ; z30 = (0,h/2) ;
+ headcircle := z27..z28..z29..z30..cycle ;
+% \end{macrocode}
+% Now we can determine the intersection points between our temporary
+% paths and the circle, and define the vectors we need.
+%
+% We also find the parts of the path \texttt{headcircle} that are
+% relevant for our to areas we need to fill. At last we can fill the
+% areas.
+% \begin{macrocode}
+ z31 = noselft intersectiontimes headcircle ;
+ z32 = nosert intersectiontimes headcircle ;
+ parttop = subpath(y31,y32) of headcircle ;
+ z33 = neckrt intersectiontimes headcircle ;
+ z34 = necklft intersectiontimes headcircle ;
+ partbot = subpath(y34,y33) of headcircle ;
+ fill z19--parttop--z22--cycle ;
+ fill z23--partbot--z26--cycle ;
+ penlabels(range 1 thru 34) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"04}
+% \Newestchanges{v2.0}{98/08/01}{Joseph Collins came up with the
+% analytic solution --- thanks JC.}
+% This is an interresting character. In version~1.0, I posed it as an
+% mathemathical puzzle, and engourage people to work on it, and if
+% they came up with a solution, pass it on to me. Well, Joseph Collins
+% \index{Collins, Joseph} did just that, and for this I owe him many
+% thanks. For more details on the problem and its solution, take a
+% look in appendix~\ref{app:solu}.
+%
+% First we define some pen sizes we want to use, the variable
+% \texttt{phi} and draw the circle around the character.
+% \begin{macrocode}
+beginchar(hex"04",2l_h#,2l_h#,0) ; "The bauhaus-forms symbol" ;
+ phi := 36.673 ;
+ thn_pen := 2c_d/9 ; med_pen := 3c_d/9 ; thk_pen := 4c_d/9 ;
+ unicir(w/2,thn_pen,(w/2,w/2),20) ;
+% \end{macrocode}
+% Then we define the three vertices of the triangle --- points $A,B,C$
+% in the notation of appendix~\ref{app:solu} --- and draw the curved
+% ends there.
+% \begin{macrocode}
+ z1 = (thn_pen+med_pen,h/2) ;
+ z2 = (.6433w-med_pen,.9790h-med_pen) ;
+ z3 = (.6433w-med_pen,.0210h+med_pen) ;
+ uniend(med_pen,z1,phi+90,270-phi,30) ;
+ uniend(med_pen,z2,0,phi+90,40) ;
+ uniend(med_pen,z3,270-phi,360,50) ;
+% \end{macrocode}
+% After this, we calculate the rest of the points needed for the top
+% most edge of the triangle, line $|AC|$. Then we reflect it
+% horizontaly to get the bottom most line $|AB|$.
+%
+% Then we draw the vertical line $|BC|$ via a pen.
+% \begin{macrocode}
+ z4 = z1 + med_pen*(-sind(phi),cosd(phi)) ;
+ z5 = z2 + med_pen*(-sind(phi),cosd(phi)) ;
+ path sl_line ; sl_line = z1--z4--z5--z2--cycle ; fill sl_line ;
+ fill sl_line reflectedabout((0,h/2),(w,h/2)) ;
+ pickup pensquare scaled med_pen ;
+ lft bot z6 = z2 ; lft top z7 = z3 ; draw z6--z7 ;
+% \end{macrocode}
+% Now it's time for the four vertices $P,Q,R,S$ of the square. Again
+% we draw the cured ends at those four vertices. This time we use a
+% thicker pen.
+% \begin{macrocode}
+ z8 = (.3687w+thk_pen,.2254h+thk_pen) ;
+ z9 = (.9179w-thk_pen,.2254h+thk_pen) ;
+ z10 = (.9179w-thk_pen,.7746h-thk_pen) ;
+ z11 = (.3687w+thk_pen,.7746h-thk_pen) ;
+ uniend(thk_pen,z8,180,270,60) ;
+ uniend(thk_pen,z9,270,360,70) ;
+ uniend(thk_pen,z10,0,90,80) ;
+ uniend(thk_pen,z11,90,180,90) ;
+% \end{macrocode}
+% Finally we define the remaning needed vectors, and draw the edges
+% $|PQ|,|QR|,|RS|$ and $|SP|$ of the square.
+% \begin{macrocode}
+ pickup pensquare scaled thk_pen ;
+ lft top z12 = z8 ; rt top z13 = z9 ; draw z12--z13 ;
+ lft bot z14 = z9 ; lft top z15 = z10 ; draw z14--z15 ;
+ bot rt z16 = z10 ; bot lft z17 = z11 ; draw z16--z17 ;
+ top rt z18 = z11 ; bot rt z19 = z8 ; draw z18--z19 ;
+ penlabels(range 1 thru 19) ;
+endchar ;
+
+% \end{macrocode}
+% After these five characters we reset \texttt{currenttransform} to
+% include the slant specified by \texttt{slantratio}, so that the rest
+% of the font will come out as it slanted if such a font is begin made.
+% \begin{macrocode}
+currenttransform := identity slanted slantratio ;
+
+% \end{macrocode}
+% \end{fontcode}
+%
+% Next we provide 6 charecters not directly avaliable in the
+% \texttt{OT1} encoding, but avaliable in the \texttt{T1} encoding of
+% the Cork fonts. These are \textunibf{\NG}, \textunibf{\TH},
+% \textunibf{\dh}, \textunibf{\ng}, and \textunibf{\th}, plus the
+% accent `ogoneck' (on an \textunibf{a} it looks like
+% \textunibf{\k{a}}).
+%
+% We do need to check again, wether we are making a small caps shaped
+% font, and if so, we should not generate the minuscles
+% \textunibf{\dh}, \textunibf{\ng}, and \textunibf{\th}.
+%
+% However, if we are making a \emph{strict} shaped font, then we need
+% to make the characters twice, and we employe the trick used in
+% \texttt{unilig.mf} again.
+%
+% \begin{fontcode}{\char"05}
+% I am not completly happy with this character, but it was the best I
+% could think of. Please let me know if you have any kinds of
+% suggestions.
+% \begin{macrocode}
+if not caps :
+ for temp = 1,2 :
+ if temp = 2 : code_offset := 3 ; fi ;
+ beginchar(hex"05",x_w#,l_h#,0) ; "The letter eth" ;
+ unicir(w/2,p_t,(w/2,w/2),10) ;
+ uniarc(w/2,p_t,(w/2,h-w/2),0,120,20) ;
+ pickup unipensqu ;
+ top rt z1 = (w,h-w/2) ; bot rt z2 = (w,w/2) ; draw z1--z2 ;
+ z3 = (w/2,h-w/2+p_t/sqrt(2)) ; z4 = (w/2+p_t/sqrt(2),h-w/2) ;
+ z5 = (w,h-p_t/sqrt(2)) ; z6 = (w-p_t/sqrt(2),h) ;
+ fill z3--z4--z5--z6--cycle ;
+ penlabels(range 1 thru 6) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"06}
+% This is very much like \textunibf{n}, but has a longer rightmost
+% down stroke.
+% \begin{macrocode}
+ beginchar(hex"06",x_w#,x_h#,p_d#) ; "The letter eng" ;
+ uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top rt z3 = (w,h-w/2) ; bot rt z4 = (w,-d) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"07}
+% \begin{macrocode}
+ beginchar(hex"07",x_w#,l_h#,p_d#) ; "The letter thorn" ;
+ rad := (h+d)/4 ;
+ uniarc(rad,p_t,(w-rad,rad),-90,90,10) ;
+ pickup unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,-d) ; draw z1--z2 ;
+ top lft z3 = (p_t,2rad) ; top rt z4 = (w-rad,2rad) ;
+ bot lft z5 = (p_t,0) ; bot rt z6 = (w-rad,0) ;
+ draw z3--z4 ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+ endchar ;
+ exitif (not strict) ;
+ if temp = 2 : code_offset := 0 ; fi ;
+ endfor ;
+fi ;
+
+% \end{macrocode}
+% \end{fontcode}
+%
+% Like in \texttt{unilig.mf} we now employe a trick to generate to
+% versions of the uppercase letters \textunibf{\NG} and
+% \textunibf{\TH}, that is \textunibsc{\ng} and \textunibsc{\th}.
+%
+% Since there us only two majuscules here, we might as well take
+% advantige of the extra slot, and make a small caps version of
+% \textunibf{\varQ}, so this is defined before \textunibf{\NG}, to
+% take the place of \textunibf{dh}.
+% \begin{macrocode}
+if not strict :
+ for temp = 1,2 :
+ if temp = 2 : do_caps(-3) ; fi ;
+
+% \end{macrocode}
+% \begin{fontcode}{\char"08}
+% This is the variant of \textunibf{Q} based an \textunibf{P}. This
+% one is \emph{non}--default, you can acces this letter with
+% \Lcs{varQ}\footnote{I am somewhat troubled with the majuscle `Q',
+% because I don't know if the default one should be `\textunibf{Q}' or
+% `\textunibf{\varQ}'. I will keep both characters in the font, but if
+% enough wnats to chage the default, I will consider this
+% ofcourse. Tell me \emph{your} opinon!}.
+% \begin{macrocode}
+ beginchar(hex"08",A_w#,l_h#,0) ; "The variant letter Q";
+ unicir(w/2,P_t,(w/2,h-w/2),10)
+ pickup Unipensqu ;
+ rt top z1 = (w,h-w/2) ; rt bot z2 = (w,0) ; draw z1--z2 ;
+ penlabels(1,2);
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"09}
+% This is similar to \textunibf{N}, execpt the rightmost vertical
+% stroke ends in an arc.
+% \begin{macrocode}
+ beginchar(hex"09",A_w#,l_h#,0) ; "The letter Eng" ;
+ rad := 3C_d ;
+ uniarc(w/2,P_t,(w/2,h-w/2),0,180,10) ;
+ uniarc(rad,P_t,(w-rad,rad),-90,0,20) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0); draw z1--z2 ;
+ top rt z3 = (w,h-w/2) ; bot rt z4 = (w,rad) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+ endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"0A}
+% \begin{macrocode}
+ beginchar(hex"0A",A_w#,l_h#,0) ; "The letter Thorn" ;
+ rad := h/4 ;
+ uniarc(rad,P_t,(w-rad,h/2),-90,90,10) ;
+ pickup Unipensqu ;
+ top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ;
+ top lft z3 = (P_t,h/2+rad) ; top rt z4 = (w-rad,h/2+rad) ;
+ bot lft z5 = (P_t,h/2-rad) ; bot rt z6 = (w-rad,h/2-rad) ;
+ draw z3--z4 ; draw z5--z6 ;
+ penlabels(range 1 thru 6) ;
+ endchar ;
+ exitif (not caps) ;
+ if temp = 2 : end_do_caps ; fi ;
+ endfor ;
+fi ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"0B}
+% This is actually a reversed cidelia accent.
+% \begin{macrocode}
+beginchar(hex"0B",x_w#,x_h#,2c_d#) ; "The accent ogoneck" ;
+ uniarc(d/2,2P_T/3,(w/2-d/4,-d/2),-90,90,10) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"0C}
+% I chose to include the braces in the font, since you might needed
+% them, and the Computer Modern Roman braces, doesn't really go with
+% the rest of the font, so if you had to use those, it wouldn't look
+% very good. They are, however not in the standard position, since
+% that is already taken up.
+% \begin{macrocode}
+beginchar(hex"0C",3c_d#,l_h#,p_d#) ; "The left brace ({)" ;
+ uniarc(2c_d,p_t,(3c_d,h-2c_d),90,180,10) ;
+ uniarc(2c_d,p_t,(3c_d,-d+2c_d),180,270,20) ;
+ pickup unipensqu ;
+ top lft z1 = (c_d,h-2c_d) ; bot lft z2 = (c_d,-d+2c_d) ; draw z1--z2 ;
+ lft z3 = (0,(h-d)/2) ; rt z4 = (c_d,(h-d)/2) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"0D}
+% Discussion above.
+% \begin{macrocode}
+beginchar(hex"0D",3c_d#,l_h#,p_d#) ; "The right brace (})" ;
+ uniarc(2c_d,p_t,(0,h-2c_d),0,90,10) ;
+ uniarc(2c_d,p_t,(0,-d+2c_d),270,360,20) ;
+ pickup unipensqu ;
+ top rt z1 = (w-c_d,h-2c_d) ; bot rt z2 = (w-c_d,-d+2c_d) ;
+ draw z1--z2 ;
+ rt z3 = (w,(h-d)/2) ; lft z4 = (w-c_d,(h-d)/2) ; draw z3--z4 ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"0E}
+% The paragraph sign is usually in the \texttt{cmsy} family, avaliable
+% in \texttt{OT1} encoding only, but for the same reasons as the
+% braces above, I decided to include this charater in the font.
+% \begin{macrocode}
+beginchar(hex"0E",(l_h#+p_d#+2p_t#)/3,l_h#,p_d#) ;
+ "The Paragraph sign" ;
+ uniarc(w/2,p_t,(w/2,h-w/2),30,270,10) ;
+ uniarc(w/2,p_t,(w/2,w/2-d),-150,90,20) ;
+ unicir(w/2,p_t,(w/2,(h-d)/2),30) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"0F}
+% I guess there are no real surprises here --- it's just a bar!
+% \begin{macrocode}
+beginchar(hex"0F",p_t#,l_h#,p_d#) ; "The symbol bar (|)" ;
+ pickup unipensqu ;
+ lft top z1 = (0,h) ; lft bot z2 = (0,-d) ; draw z1--z2 ;
+ penlabels(1,2);
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+%
+% The next two characters is included, since I think it would be a
+% good idea to use \universal{} characters for German
+% quotation, instead of some Computer Modern Roman character, which
+% would be totally out of place.
+%
+% If you use the \textsf{uni} package you can say
+% \begin{verbatim}
+% {\uni
+% \guillemoleft Hello World\guillemoright\newline
+% \guilsinglleft Hello World\guilsinglright}
+% \end{verbatim}
+% and get
+% \begin{quote}
+% {\uni
+% \guillemoleft Hello World\guillemoright\newline
+% \guilsinglleft Hello World\guilsinglright}
+% \end{quote}
+%
+% \begin{fontcode}{\char"22}
+% This is quote a simple character. Do notice the nice use of
+% \texttt{uniend}, to produce the soft turn.
+% \begin{macrocode}
+beginchar(hex"22",2x_w#/3,x_h#,0) ; "The single left guillomot" ;
+ z1 = (p_t,h/2) ; z2 = (w,h) ; phi := angle(z2-z1) ;
+ uniend(p_t,(z1),90+phi,270-phi,10) ;
+ z3 = (w-p_t/sind(phi),h) ; z4 = z1 + p_t*(-sind(phi),cosd(phi)) ;
+ path rombe ; rombe := z1--z2--z3--z4--cycle ; fill rombe ;
+ fill rombe reflectedabout ((0,h/2),(w,h/2)) ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+% \begin{fontcode}{\char"5C}
+% \begin{macrocode}
+beginchar(hex"5C",2x_w#/3,x_h#,0) ; "The single right guillomot";
+ z1 = (w-p_t,h/2) ; z2 = (0,h) ; phi := 180-angle(z2-z1) ;
+ uniend(p_t,(z1),phi-90,90-phi,10) ;
+ z3 = (p_t/sind(phi),h) ; z4 = z1 + p_t*(sind(phi),cosd(phi)) ;
+ path rombe ; rombe := z1--z2--z3--z4--cycle ; fill rombe ;
+ fill rombe reflectedabout ((0,h/2),(w,h/2)) ;
+ penlabels(1,2,3,4) ;
+endchar ;
+
+% \end{macrocode}
+% \end{fontcode}
+%\iffalse
+%</ext>
+%\fi
+%\iffalse
+%<*font>
+%\fi
+% \section{Font driver files}\file{ful*.mf}
+%
+% This section describes the driver files
+% \texttt{uni}\meta{series}\meta{shape}\meta{size}\texttt{.mf}, where
+% \meta{series} is one of \texttt{r} (medium), or \texttt{bf}
+% (boldface), \meta{shape} one of upright (no letter), \texttt{sl}
+% (slanted), or \texttt{sc} (small caps), and \meta{size} is the
+% designsize in points, one of 8, 9, 10, 12, or 17.
+%
+% To make the source file shorter, I employed a little trick,
+% exploiting some of the features of the \textsf{docstrip}
+% program. That, on the other hand means that the line numbers you see
+% here, doesn't conform to the actual ones in the driver files.
+%
+% First we make sure the base file \texttt{unibase.mf} is loaded, but
+% not more then once in a run. This is needed since this file contains
+% all the macros and definitions for the font.
+%
+% \begin{macrocode}
+if unknown unibase : input unibase; fi;
+
+% \end{macrocode}
+% Next we define some \textsl{boolean} variables, determining the
+% shape of the font we are to create. This are straight forward, and
+% should be self explanetory. Any number of variables may be set to
+% \texttt{true}, execpt that it makes no sense to define both
+% \texttt{bold} and \texttt{medium} to \texttt{true}, so this will be
+% considered an error, and a medium font will be made. (See alse the
+% explanation of the \texttt{start\_font} macro in the
+% \texttt{unibase.mf} section.)
+%
+% \begin{verbatim}
+%<+medium>medium := true ;
+%<+bold>bold := true ;
+%<+slanted>slant := true ;
+%<+caps>caps := true ;
+%<+strict>strict := true ;
+%<+eight>start_font(8pt#) ;
+%<+nine>start_font(9pt#) ;
+%<+ten>start_font(10pt#) ;
+%<+twelve>start_font(12pt#) ;
+%<+seventeen>start_font(17pt#) ;
+%\end{verbatim}
+%
+% The next part of the files just inputs the nessecary source files,
+% and there is nothing special here. Finally we end the font with the
+% macro \texttt{end\_font}.
+% \begin{macrocode}
+input uniupp ; input unilow ; input unidig ; input unispe ;
+input unilig ; input unipun ; input uniacc ; input uniext ;
+
+end_font;
+
+% \end{macrocode}
+%\iffalse
+%</font>
+%\fi
+%\iffalse
+%<*docpackage>
+%\fi
+% \section{Commands for the Documentation --- \texttt{unidoc.sty}}
+% \file{unidoc.sty}\label{app:unidoc}
+%
+% \textsc{Warning:} Most of the macros defined in this file uses
+% \TeX{} primitivs like \Lcs{def} and \Lcs{let}, contorary to the
+% recommendations in \clsguide{}. This means you shouldn't try to use
+% this package in conjunction with normal \LaTeXe{} documents, since
+% it will not nessecarily by portable, and may generate unwanted
+% resaults. This package is \emph{only} intended for the documentation
+% of the \universal{} package, \emph{and nothing else!}
+%
+% \subsection{Initializing}
+%
+% First we need to identify the package, its version and release
+% date, etc.
+% \begin{macrocode}
+\ProvidesPackage{unidoc}
+ [\unifiledate\space\unifileversion\space universal documenation package.]
+% \end{macrocode}
+%
+% \begin{macro}{\ifeepic}
+% \begin{macro}{\eepictrue}
+% \begin{macro}{\eepicfalse}
+%
+% In case we can load the package \textsf{eepic}, we will set
+% \cs{eepictrue}, and make a plot of the shapes problem.
+%
+% \begin{macrocode}
+\newif\ifeepic\eepicfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Then we load some pacakges needed. \textsf{doc} is ofcourse needed
+% to do all the actual typesetting of macros etc., while \textsf{uni}
+% is needed for the fonts\footnote{This means ofcourse, that you
+% needed to have all the \MF{} sources ready, or in other words, you
+% should have run \texttt{universa.ins} through \LaTeX{}.}, and
+% finally \textsf{mflogo} is needed for the \MF{} logo.
+%
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{uni}}
+\ProcessOptions\relax
+\RequirePackage{doc}
+\RequirePackage{mflogo}
+\RequirePackage[colorlinks,%
+ linkcolor=red,%
+ anchorcolor=black,%
+ citecolor=green,%
+ filecolor=black,%
+ menucolor=black,%
+ urlcolor=blue,%
+ hyperindex,%
+ linktocpage,%
+ pdfduplex=duplexFlipLongEdge,%
+ a4paper,%
+ bookmarks=true]{hyperref}
+\RequirePackage{uni}
+\IfFileExists{eepic.sty}{%
+ \RequirePackage{eepic}\eepictrue}{%
+ \PackageWarning{unidoc}{`eepic.sty' not found, so there will be no
+ pictures - you are warned.}\eepicfalse}
+
+% \end{macrocode}
+%
+% \subsection{Macros for the Index}
+%
+% \begin{macro}{\file}
+% First we save the argument --- the current output filename --- in a
+% command, set the codeline counter to zero (since every starts at
+% line 1, obviously). Then we check to see if we are outputting files
+% at all. If we are, we write an index entry.
+% \begin{macrocode}
+\def\file#1{
+ \def\c@r{#1}
+ \c@CodelineNo0
+ \if@filesw
+ \immediate\write\@indexfile
+ {\string\indexentry{#1=\string\texttt{#1}%
+ \string\space(File)}%
+ {\thepage}}\fi}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\main}
+% This command is used be \texttt{doc.sty}, to choose the font for the
+% codelines numbers in the index. It is set to \texttt{typewriter}.
+% \begin{macrocode}
+\def\main#1{\texttt{{\small\c@r}:\ #1}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\src}
+% To make the index reflect, that more then one file is present, and
+% therefore more then one entry could have the same codeline number,
+% we put the file name before the codeline number in the index. The
+% name is gotten from the \Lcs{file} command. This ofcourse takes up
+% quite some space in the index, so later on we speciffy the index
+% to only have 2 columns.
+% \begin{macrocode}
+\def\src#1#2{\texttt{{\small#1}:\ #2}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fontcodeindex}
+% The next two commands are responsible for writting the index entries
+% of the above environments. They are similar to the \texttt{doc}
+% package command \Lcs{codeline@wrindex} but uses the filenames
+% defined by \Lcs{file} (via the \Lcs{src} command), and the
+% \Lcs{fontcodeindex} uses a font appropiat for the font descriped
+% (i.e., \Lcs{FontCodeFont})
+% \begin{macrocode}
+\def\fontcodeindex#1{%
+ \@bsphack\begingroup\let\_=\protect\_%
+ \special@index{%
+ \expandafter\string#1\actualchar%
+ {\string\FontCodeFont\space#1}%
+ \encapchar src{\c@r}}\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fontmacroindex}
+% \begin{macrocode}
+\def\fontmacroindex#1{%
+ \@bsphack\begingroup\let\_=\protect\_%
+ \special@index{%
+ \expandafter\string#1\actualchar%
+ {\string\MacroFont\space#1}%
+ \encapchar src{\c@r}}\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Descriptive Environments}
+%
+% The next counters are to do some more advanced stuff on the on line
+% numbers in the index. Instead of just writting the beginning line of
+% the fontcode, we writte the complete interval of the fontcode. See
+% also the command \Lcs{f@ntcodeindex} and \Lcs{f@ntmacroindex}.
+% \begin{macrocode}
+\newcount\startfontcodeline
+\newcount\startfontmacroline
+
+% \end{macrocode}
+% \begin{macro}{\fontcode}
+% \begin{macro}{\endfontcode}
+% \begin{macro}{\FontCodeFont}
+% \begin{macro}{\PrintFontName}
+% Next comes two environments for descriping the font programs, and
+% font macros. They are similar to the environment \texttt{macro} in
+% the \texttt{doc} package. However, some alterations is made, so that
+% the right font is used in the index. (See also the
+% \Lcs{fontcodeindex} macro below.) Also, notice the defintion of
+% \Lcs{saved@macroname} and \Lcs{PrintFontName}. This is done so that
+% control sequnces in the argument to \texttt{fontcode} environment,
+% which should expand to a single letter, comes out expanded, rather
+% then the actual control sequences, which isn't wanted here.
+% \begin{macrocode}
+\def\fontcode#1{
+ \def\saved@fontname{#1}
+ \let\temp@MF\MacroFont\let\MacroFont\FontCodeFont
+ \let\temp@PMN\PrintMacroName\let\PrintMacroName\PrintFontName
+ \let\temp@SMI\SpecialMainIndex
+ \let\SpecialMainIndex\fontcodeindex
+ \macro{#1}}
+\def\endfontcode{
+ \endmacro
+ \let\MacroFont\temp@MF
+ \let\SpecialMainIndex\temp@SMI
+ \let\PrintMacroName\temp@PMN}
+\let\FontCodeFont\unibf
+\def\PrintFontName#1{\strut\MacroFont\saved@fontname\ }
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fontmacro}
+% \begin{macro}{\endfontmacro}
+% This is similar to \texttt{fontcode} environment, but is used to
+% descripe the macros of \texttt{unibase}. The reason why we employ to
+% environments, and not just one, is that the margin notes should come
+% out in \texttt{typewriter} font in this environment, while it
+% should be in \universal{} font above.
+% \begin{macrocode}
+\def\fontmacro#1{
+ \let\temp@under\_
+ \let\_\MacroUnderscore
+ \let\temp@SMI\SpecialMainIndex
+ \let\SpecialMainIndex\fontmacroindex
+ \macro{#1}}
+\def\endfontmacro{%
+ \endmacro\let\SpecialMainIndex\temp@SMI\let\_\temp@under}
+\def\MacroUnderscore{{\char"5F}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\illubegin}
+% \begin{macro}{\illuother}
+% \begin{macro}{\endillu}
+% \begin{macrocode}
+\let\beginillu\ifeepic
+\let\illuother\else
+\let\endillu\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Useful Commands}
+%
+% \begin{macro}{\Newestchanges}
+% This macro is intended to be used like the \Lcs{changes} macro of
+% the \textsf{doc} package. However, it should only be used on the last
+% most change. But rather then just making an entry in the the
+% glossary, it will also print a line saying when this macro was last
+% changed. This is something like what is done in
+% \texttt{ltxguide.cls}, but a bit different, since in that class not
+% enough is being done glossary--wise, and too much is done
+% margin--wise. When making an update to a macro, the new
+% \Lcs{changes} should be made with \Lcs{Newestchanges}, and the old
+% \Lcs{Newestchanges} should be renamed to \Lcs{changes}. Notice that
+% \texttt{doc.sty} says \Lcs{def}\Lcs{saved@macroname}\texttt{\{\}},
+% so we can't say
+% \begin{verbatim}
+% \ifx\saved@macroname\relax
+% \end{verbatim}
+% since \Lcs{relax} \emph{isn't} the same as an empty definition, but
+% \Lcs{@empty} is. In the case that \Lcs{saved@macroname} is defined
+% to something, then we put a bullet ($\bullet$) in the margin, and
+% attach a footnote to it, where the footnote text contains the proper
+% information. Ofcourse this could led to a lot of footnotes, but the
+% alternative is to redefine the \texttt{macro} environment, and I
+% really didn't have the stomach for that, Sorry. Notice the use of
+% \Lcs{@gobble}, that removes the leading `v' in the version number.
+% \begin{macrocode}
+\def\Newestchanges#1#2#3{
+ \ifx\saved@macroname\@empty%
+ \marginpar{\small\raggedright{\sl Change on} #2, {\sl Version}
+ \expandafter\@gobble#1}
+ \else%
+ \llap{$\bullet$\footnote{{\sl Change of }
+ {\MacroFont\expandafter\string\saved@macroname}
+ {\sl on} #2, {\sl Version }\expandafter\@gobble#1}}
+ \fi
+ \changes{#1}{#2}{#3}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Lcs}
+% Finally we define a short hand for \Lcs{...}, to make the
+% documentaion easier.
+% \begin{macrocode}
+\def\Lcs#1{\texttt{\char"5C{}#1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{The Font Charts}
+%
+% \begin{macro}{\FontChart}
+% This macro is for typesetting a table of the font. It is taken from
+% \texttt{testfont.tex}.
+%
+% First we define some counters to use in the table. \Lcs{n} is the
+% counts the number of letters and symbols typeset so far, while
+% \Lcs{m} is counting the number of typeset characters in current
+% line. \Lcs{p} is a penalty counter. The dimension \Lcs{dim} is used
+% for setting the characters appropiate.
+%
+% We also define a new \Lcs{if}, used to see if we should go on.
+%
+% \Lcs{oct} and \Lcs{hex} are used for typesetting numbers in
+% octadecimal and hexadecimal notation respectivily.
+% \begin{macrocode}
+\newcount\n\newcount\m\newcount\p\newdimen\dim
+\newif\ifskipping
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}}
+\def\hex#1{\hbox{\rm\H{}\tt#1}}
+
+% \end{macrocode}
+% \begin{macro}{\setdigs}
+% This is used to set the counters \Lcs{n} and \Lcs{m} every time a
+% new (double) line is started.
+% \begin{macrocode}
+\def\setdigs#1"#2{\gdef\h{#2}
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\testrow}
+% This is used to see how we should typeset the current row.
+% \begin{macrocode}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\oddline}
+% This is used to typeset topmost line of a double line. It basically
+% just putting a line and some saces into the chart.
+% \begin{macrocode}
+\def\oddline{
+ \cr\noalign{\nointerlineskip}\multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\evenline}
+% This is used to typeset bottommost line of a double line. It
+% basically does the same as \Lcs{oddline}, but also checks to see if
+% we need to end the chart or go on.
+% \begin{macrocode}
+\def\evenline{
+ \loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16\repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\morechart}
+% This macro is called every time we need to typeset a new double line
+% of the chart.
+% \begin{macrocode}
+\def\morechart{
+ \cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\chartline}
+% \begin{macro}{\chartstrut}
+% \Lcs{chartline} is called every time we need to typeset a line of
+% the chart. Notice it uses the macro \Lcs{:} to do the
+% job. \Lcs{chartstrut} is used to get approiate spacing.
+% \begin{macrocode}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\:}
+% \begin{macro}{\reposition}
+% \begin{macro}{\centerlargechars}
+% These macros are used for typesetting the actual characters in the
+% chart. \Lcs{:} gives the appropiate space for a character and
+% encriments the \Lcs{n} counter, while \Lcs{reposition} places the
+% character nicely in the the chart. \Lcs{centerlargechars} does the
+% same for {\large large} characters.
+% \begin{macrocode}
+\def\:{\setbox0=\hbox{\char\n}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{
+ \setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\chart}
+% \begin{macro}{\endchart}
+% These two macros is what starts and ends the chart. \Lcs{chart} sets
+% up the appropiate stuff, and writes the top most line in the
+% chart. \Lcs{endchart} is called by \Lcs{evenline} if no more
+% characters should be typeset, and then it finished everything off,
+% plus writes the last line of the chart.
+% \begin{macrocode}
+\def\chart{$$\global\n=0
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&&\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null&&&
+ \oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{
+ \cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr
+ \egroup$$\par}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Finally we get to the \emph{real} macro. This macro takes one
+% argument, the name of the \meta{font driver file}. We put the chart
+% inside a \texttt{figure} environment, so that we may refer to it
+% latter. This is done using the label \texttt{chart:}\meta{font driver
+% file}. The chart is encapsulated in a group, so that the definition
+% of \Lcs{chart@font} doesn't get in the way elsewhere in the document.
+% \begin{macrocode}
+\def\FontChart#1#2{
+%% \marginpar{\small\raggedright Letters and symbols in \texttt{#1}
+%% font.}
+ \begin{figure}[htbp]
+ \begingroup
+ \font\chart@font=#1
+ \chart@font
+ \chart
+ \endgroup
+ \caption{Letters and symbols in \texttt{#1} --- #2}
+ \label{fig:font:#1}
+\end{figure}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Parameters and Miscillaneous Commands}
+%
+% This is used --- as explaind in \texttt{doc.dvi} --- to give a
+% different prologue to the index, more suitable to our needs.
+% \begin{macrocode}
+\IndexPrologue{%
+ \section{Index}\markboth{Index}{Index}
+ The Numbers written in \textit{italic} refer to the pages, where
+ a macros usage is descriped, while those in \texttt{typewrite} refer
+ to line numbers in the files, mentioned before, where the definition
+ is, while \textsl{slanted} shows the places it is used. Normal letters
+ refer to pages, wether it be descriptions or usage.}
+\GlossaryPrologue{%
+ \section{Change History}\markboth{Change History}{Change History}
+ Below is listed the changes made to the \universal{} font and the
+ \LaTeX{} support package \textsf{uni}, from version~1.0 to 2.0.}
+
+% \end{macrocode}
+% Also we set the number of columns in the index to 2, since some
+% space is needed for the entries
+% \begin{macrocode}
+\setcounter{IndexColumns}{2}
+
+% \end{macrocode}
+% We don't want the index flutted with silly command sequences, so we
+% leave some of them out.
+% \begin{macrocode}
+\DoNotIndex{\@bsphack,\@empty,\@esphack,\@gobble,\@ifnextchar,%
+ \@ifundefined,\@indexfile,\@onlypreamble,\iffalse,\_,\,\accent,%
+ \aftergroup,\actualchar,\advance,\begin,\begingroup,\bgroup,%
+ \box,\bullet,\changes,\char,\chardef,\CheckModules,\CodeLineIndex,%
+ \cr,\crcr,\csname,\DeclareFontFamily,\DeclareFontShape,\DeclareMacro,%
+ \dim,\divide,\dp,\DeclareOption,\def,\DoNotIndex,\edef,\egroup,\else,%
+ \end,\endcsname,\EnableCrossrefs,\encapchar,\endgroup,\endmacro,%
+ \expandafter,\fbox,\fi,\font,\footnote,\fontemcoding,\fontfamuliy,%
+ \fontseries,\fontshape,\gdef,\global,\H,\h,\halign,\hbox,\hfil,%
+ \hidewidth,\hrule,\hrulefill,\hsize,\ht,\hyphenchar,\if@filesw,%
+ \ifdim,\IfFileExists,\ifnum,\ifskipping,\ifx,\immediate,\indexentry,%
+ \it,\itdefault,\kern,\lastpenalty,\LaTeX,\LaTeXe,\leavevmode,\let,%
+ \llap,\loop,\lower,\m,\macro,\MacroFont,\marginpar,\marginparwidth,%
+ \markboth,\mdseries,\meaning,\multiply,\multispan,\n,\newcommand,%
+ \newcount,\newdimen,\newif,\newline,\next,\noalign,\noexpand,%
+ \nointerlineskip,\not@math@alphabet,\null,\ooalign,\p,\par,\penalty,%
+ \ProcessOptions,\protect,\ProvidesFile,\ProvidesPackage,%
+ \RecordChanges,\raggedright,\raise,\relax,\renewcommand,\repeat,%
+ \RequirePackage,\rm,\saved@macroname,\scshape,\section,\selectfont,%
+ \setcounter,\setbox,\show,\skippingfalse,\skippingture,\sl,\slshape,%
+ \small,\smash,\space,\special@index,\SpecialMainIndex,\stop,\string,%
+ \strut,\tabskip,\TeX,\TeXbook,\textit,\textsf,\textsl,\texttt,\the,%
+ \thepage,\tt,\typeout,\unhbox,\universal,\upshape,\usefont,\vbox,%
+ \vcenter,\vrule,\write,\xdef,\z@,\PackageError,\PackageWarning,
+ \PassOptionsToPackage,\GlossaryPrologue,\',\0,\1,\bfseries,
+ \centerlargechars,\DeclareRobustCommand,\DeclareTextFontCommand,
+ \ExecuteOptions,\familydefault,\fontencoding,\fontfamily,\hex,\oct,
+ \IndexPrologue,\oddline}
+
+% \end{macrocode}
+% And then we define the behaviour of the \textsf{doc} package, by
+% setting a number of flags (as explained in the documentation of the
+% \textsf{doc} package). We also set the margin paragraph widths to be
+% a bit smaller then usual.
+% \begin{macrocode}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\CheckModules
+\marginparwidth=54pt
+% \end{macrocode}
+%
+% \begin{macro}{\NFSS}
+% \begin{macro}{\ftnguide}
+% \begin{macro}{\clsguide}
+% \begin{macro}{\MFbook}
+% \begin{macro}{\universal}
+%
+% Some utility macros used in the documentation.
+%
+% \begin{macrocode}
+\newcommand{\NFSS}{\textsf{NFSS}}
+\newcommand{\ftnguide}{\textit{\LaTeXe{} Font Selection}}
+\newcommand{\clsguide}{ \textit{\LaTeXe{} for Class and Packages
+ Writers}} \newcommand{\TeXbook}{\TeX\textsf{book}}
+\newcommand{\MFbook}{\MF\textsf{book}}
+\newcommand{\universal}{\textunibf{universal}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% %\iffalse
+%</docpackage>
+%\fi
+% \Finale
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% End:
+% \fi
diff --git a/fonts/universa/universa.ins b/fonts/universa/universa.ins
new file mode 100644
index 0000000000..415fce1026
--- /dev/null
+++ b/fonts/universa/universa.ins
@@ -0,0 +1,182 @@
+%% -*- mode: tex -*-
+%%
+%% This is file `universa.ins', the installation file for the
+%% `universal' package.
+%%
+%% Copyright (C) 1998 Christian Holm.
+%%
+%% The universal package 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.
+%%
+%% The universal package 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.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this package; if not, write to the Free Software
+%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%%
+
+\input docstrip.tex
+\keepsilent
+\declarepreamble\long
+
+Copyright (C) 1998 Christian Holm.
+
+This file is NOT the source for universal, because almost all
+comments have been stripped from it. It is NOT the preferred
+form of universal for making modifications to it.
+
+Therefore you can NOT redistribute and/or modify THIS file.
+You can however redistribute the complete source (universa.dtx
+and universa.ins) and/or modify it under the terms of the GNU
+General Public License as published by the Free Software
+Foundation; either version 2, or (at your option) any later
+version.
+
+The universal font and package 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.
+
+You should have received a copy of the GNU General Public
+License along with this package; if not, write to the
+ Free Software Foundation, Inc.,
+ 675 Mass Ave, Cambridge,
+ MA 02139, USA.
+
+See the file universa.dtx for further comments and documentation.
+
+\endpreamble
+
+\declarepreamble\short
+
+Copyright (C) 1998 Christian Holm.
+
+The universal font and package 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.
+
+See the file universa.dtx for further comments and documentation.
+
+
+\endpreamble
+
+\usepreamble\long
+\usedir{tex/latex/universa}
+\Msg{***********************************************************}
+\Msg{* Generating LaTeX files}
+\Msg{***********************************************************}
+\generate{\file{uni.sty}{\from{universa.dtx}{package}}
+ \file{omluni.fd}{\from{universa.dtx}{oml}}
+ \file{omsuni.fd}{\from{universa.dtx}{oms}}
+ \file{ot1uni.fd}{\from{universa.dtx}{ot1}}
+ \file{t1uni.fd}{\from{universa.dtx}{t1}}
+ \file{uuni.fd}{\from{universa.dtx}{u}}}
+\usedir{doc/latex/universa}
+\Msg{***********************************************************}
+\Msg{* Generating Documentation files}
+\Msg{***********************************************************}
+\generate{\file{unidoc.sty}{\from{universa.dtx}{docpackage}}
+ \file{copying}{\from{universa.dtx}{copyright}}}
+\usedir{fonts/source/public/universa}
+\Msg{***********************************************************}
+\Msg{* Generating METAFONT base file}
+\Msg{***********************************************************}
+\generate{\file{unibase.mf}{\from{universa.dtx}{unibase}}}
+\usepreamble\short
+\Msg{***********************************************************}
+\Msg{* Generating upright medium driver files}
+\Msg{***********************************************************}
+\generate{\file{fulmr8.mf}{\from{universa.dtx}{font,medium,eight}}
+ \file{fulmr9.mf}{\from{universa.dtx}{font,medium,nine}}
+ \file{fulmr10.mf}{\from{universa.dtx}{font,medium,ten}}
+ \file{fulmr12.mf}{\from{universa.dtx}{font,medium,twelve}}
+ \file{fulmr17.mf}{\from{universa.dtx}{font,medium,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating upright bold face driver files}
+\Msg{***********************************************************}
+\generate{\file{fulbr8.mf}{\from{universa.dtx}{font,bold,eight}}
+ \file{fulbr9.mf}{\from{universa.dtx}{font,bold,nine}}
+ \file{fulbr10.mf}{\from{universa.dtx}{font,bold,ten}}
+ \file{fulbr12.mf}{\from{universa.dtx}{font,bold,twelve}}
+ \file{fulbr17.mf}{\from{universa.dtx}{font,bold,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating slanted medium driver files}
+\Msg{***********************************************************}
+\generate{\file{fulmo8.mf}{\from{universa.dtx}{font,medium,slanted,eight}}
+ \file{fulmo9.mf}{\from{universa.dtx}{font,medium,slanted,nine}}
+ \file{fulmo10.mf}{\from{universa.dtx}{font,medium,slanted,ten}}
+ \file{fulmo12.mf}{\from{universa.dtx}{font,medium,slanted,twelve}}
+ \file{fulmo17.mf}{\from{universa.dtx}{font,medium,slanted,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating small caps medium driver files}
+\Msg{***********************************************************}
+\generate{\file{fulmc8.mf}{\from{universa.dtx}{font,medium,caps,eight}}
+ \file{fulmc9.mf}{\from{universa.dtx}{font,medium,caps,nine}}
+ \file{fulmc10.mf}{\from{universa.dtx}{font,medium,caps,ten}}
+ \file{fulmc12.mf}{\from{universa.dtx}{font,medium,caps,twelve}}
+ \file{fulmc17.mf}{\from{universa.dtx}{font,medium,caps,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating strict medium driver files}
+\Msg{***********************************************************}
+\generate{\file{fulmst8.mf}{\from{universa.dtx}{font,medium,strict,eight}}
+ \file{fulmst9.mf}{\from{universa.dtx}{font,medium,strict,nine}}
+ \file{fulmst10.mf}{\from{universa.dtx}{font,medium,strict,ten}}
+ \file{fulmst12.mf}{\from{universa.dtx}{font,medium,strict,twelve}}
+ \file{fulmst17.mf}{\from{universa.dtx}{font,medium,strict,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating slanted bold face driver files}
+\Msg{***********************************************************}
+\generate{\file{fulbo8.mf}{\from{universa.dtx}{font,bold,slanted,eight}}
+ \file{fulbo9.mf}{\from{universa.dtx}{font,bold,slanted,nine}}
+ \file{fulbo10.mf}{\from{universa.dtx}{font,bold,slanted,ten}}
+ \file{fulbo12.mf}{\from{universa.dtx}{font,bold,slanted,twelve}}
+ \file{fulbo17.mf}{\from{universa.dtx}{font,bold,slanted,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating small caps bold face driver files}
+\Msg{***********************************************************}
+\generate{\file{fulbc8.mf}{\from{universa.dtx}{font,bold,caps,eight}}
+ \file{fulbc9.mf}{\from{universa.dtx}{font,bold,caps,nine}}
+ \file{fulbc10.mf}{\from{universa.dtx}{font,bold,caps,ten}}
+ \file{fulbc12.mf}{\from{universa.dtx}{font,bold,caps,twelve}}
+ \file{fulbc17.mf}{\from{universa.dtx}{font,bold,caps,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating strict bold face driver files}
+\Msg{***********************************************************}
+\generate{\file{fulbst8.mf}{\from{universa.dtx}{font,bold,strict,eight}}
+ \file{fulbst9.mf}{\from{universa.dtx}{font,bold,strict,nine}}
+ \file{fulbst10.mf}{\from{universa.dtx}{font,bold,strict,ten}}
+ \file{fulbst12.mf}{\from{universa.dtx}{font,bold,strict,twelve}}
+ \file{fulbst17.mf}{\from{universa.dtx}{font,bold,strict,seventeen}}}
+\Msg{***********************************************************}
+\Msg{* Generating font program files}
+\Msg{***********************************************************}
+\generate{\file{uniupp.mf}{\from{universa.dtx}{upp}}
+ \file{unilow.mf}{\from{universa.dtx}{low}}
+ \file{unidig.mf}{\from{universa.dtx}{dig}}
+ \file{unispe.mf}{\from{universa.dtx}{spe}}
+ \file{unilig.mf}{\from{universa.dtx}{lig}}
+ \file{unipun.mf}{\from{universa.dtx}{pun}}
+ \file{uniacc.mf}{\from{universa.dtx}{acc}}
+ \file{uniext.mf}{\from{universa.dtx}{ext}}}
+
+\Msg{***********************************************************}
+\Msg{* To finish the installation you have to move the files}
+\Msg{* `uni.sty' `*.fd' into a directory searched by TeX, and}
+\Msg{* the files `*.mf' to a directory searched by Metafont.}
+\Msg{*}
+\Msg{* To produce the documentation do:}
+\Msg{*\space\space latex universa.dtx}
+\Msg{*\space\space latex universa.dtx}
+\Msg{*\space\space makeindex -s gind -o universa.ind universa.idx}
+\Msg{*\space\space makeindex -s gglo -o universa.gls universa.glo}
+\Msg{*\space\space latex universa.dtx}
+\Msg{*\space\space latex universa.dtx}
+\Msg{* or whatever appropiate for your system.}
+\Msg{***********************************************************}
+\endbatchfile
diff --git a/fonts/universa/universa.pdf b/fonts/universa/universa.pdf
new file mode 100644
index 0000000000..5e722edc22
--- /dev/null
+++ b/fonts/universa/universa.pdf
Binary files differ