metafont
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

tgothic.dtx
text/x-tex

Download raw (150.8 KB)

% \iffalse meta-comment
%
% tgothic.dtx
% Copyright 1999 Peter R. Wilson
%
% This program is provided under the terms of the
% LaTeX Project Public License distributed from CTAN
% archives in directory macros/latex/base/lppl.txt.
%
% Author: Peter Wilson (CUA) (now at: peter.r.wilson@boeing.com)
% 
% If you do not have the docmfp package (available from CTAN in
% tex-archive/macros/latex/contrib/supported), comment out the
% \usepackage{docmfp} line below and uncomment the line following it. 
% 
%<*driver>
\documentclass{ltxdoc}
\usepackage{docmfp}
%%%%%% \providecommand{\DescribeVariable}[1]{} \newenvironment{routine}[1]{}{}
\EnableCrossrefs
\CodelineIndex
%% comment out the next line to show the code
\OnlyDescription
\setcounter{StandardModuleDepth}{1}
\begin{document}
  \DocInput{tgothic.dtx}
\end{document}
%</driver>
%
% \fi
%
% \CheckSum{134}
%
% \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath}
% \DoNotIndex{\@centercr,\@cite}
% \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
% \DoNotIndex{\@input,\@ixpt,\@m}
% \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint}
% \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
% \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
% \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
% \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
% \DoNotIndex{\advance,\Alph,\alph}
% \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
% \DoNotIndex{\bullet}
% \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
% \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
% \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
% \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
% \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
% \DoNotIndex{\fbox}
% \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
% \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
% \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
% \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
% \DoNotIndex{\input}
% \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
% \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
% \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
% \DoNotIndex{\NeedsTeXFormat,\newdimen}
% \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
% \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
% \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
% \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
% \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman}
% \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength}
% \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
% \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
% \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
% \DoNotIndex{\viipt,\vipt,\vskip,\vspace}
% \DoNotIndex{\wd,\xiipt,\year,\z@}
%
% \changes{v1.0}{2002/12/30}{First public release}
%
% \def\fileversion{v1.0}
% \def\filedate{2002/12/30}
% \newcommand*{\Lpack}[1]{\textsf {#1}}           ^^A typeset a package
% \newcommand*{\Lopt}[1]{\textsf {#1}}            ^^A typeset an option
% \newcommand*{\file}[1]{\texttt {#1}}            ^^A typeset a file
% \newcommand*{\Lcount}[1]{\textsl {\small#1}}    ^^A typeset a counter
% \newcommand*{\pstyle}[1]{\textsl {#1}}          ^^A typeset a pagestyle
% \newcommand*{\Lenv}[1]{\texttt {#1}}            ^^A typeset an environment
% \newcommand*{\AD}{\textsc{ad}}
% \newcommand*{\thisfont}{Gothic Textura Quadrata}
%
% \title{The \Lpack{Gothic Textura Quadrata} fonts\thanks{This
%        file has version number \fileversion, last revised
%        \filedate.}}
%
% \author{%
% Peter Wilson\\
% Catholic University of America \\
% Now at \texttt{peter.r.wilson@boeing.com}
% }
% \date{\filedate}
% \maketitle
% \begin{abstract}
%    The \Lpack{tgothic} and \Lpack{alltgoth} packages provide a set of 
% Metafont \thisfont{} book-hands 
% as used
% for manuscripts in the 13th to the 15th century. This is one in a series
% of manuscript fonts.
% \end{abstract}
% \tableofcontents
% \listoftables
%
%
% 
%
% \section{Introduction}
%
%    The \Lpack{tgothic} and \Lpack{alltgoth} packages provide a Metafont~\cite{METAFONT} version
% of the \thisfont{} manuscript book-hand that was in use between about the
% thirteenth and fifteenth centuries~\AD. It is part of a project to provide fonts
% covering the major manuscript hands between the first century~\AD{} and
% the invention of printing. The principal resources used in this project
% are listed in the Bibliography.
%
% This manual is typeset according to the conventions of the
% \LaTeX{} \textsc{docstrip} utility which enables the automatic
% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}.
% The \Lpack{docmfp} package is used for documenting the Metafont portions
% of the distribution~\cite{DOCMFP}.
%
%    Section~\ref{sec:usc} describes the usage of the package.
% Commented code for the fonts is in Sections~\ref{sec:mf} and~\ref{sec:fd}
% and source code for the package is in Section~\ref{sec:code}.
%
% \subsection{Manuscript book-hands}
%
% Before the invention of printing all books were written by hand. The book-hands
% used by the scribes and copyists for the manuscripts changed as time 
% went on. Table~\ref{tab:1} lists some of the common book-hands which were used
% between the 1st and 15th centuries. The later book-hands formed the basis of the
% fonts used by the early printers, which in turn form the basis of the printing
% fonts in use today.
%
%    The manuscript book-hands were written with a broad nibbed reed or quill
% pen. Among the distinguishing characteristics of a hand, apart from the 
% actual shape of the letters, are the angle of the pen (which controls the
% variation between thick and thin strokes) and the height of a letter compared
% to the width of the nib. The lower the ratio of the letter height to nib
% width, the more condensed is the script. The scripts also varied in their
% typical height. 
%
%    Table~\ref{tab:1} gives an `average' x-height for each
% script, which I obtained by measuring a sample of photographs of
% manuscripts written in the various hands. About a dozen examples
% of each book-hand were measured. This figure should not be taken too
% seriously.
% 
%    There was not a sharp division between the use of one hand and another.
% Many manuscripts exhibit a variety of hands in the same document. For example,
% the scribe writing in an Uncial hand may have used Roman Rustic letters
% for capitals. Usually the same pen was used for the two different scripts.
%
%    Generally speaking, as a hand got older it became more embelished, and 
% therefore took longer to write. As this happened a new hand would appear that
% was faster, and which would eventually make the earlier one obsolete.
%
%    Many of the book-hands were single-cased; that is, they did not have an
% upper- and lower-case as we do nowadays in Western scripts. On the other
% hand, a script might be majuscule or minuscule. A \textit{majuscule} script
% is one, like our upper-case, where the letters are drawn between two lines
% and are of a uniform height with no ascenders or descenders. 
% A \textit{minuscule} script, like our lower-case, is drawn between four lines 
% and has ascenders and  descenders.
%
% \begin{table}
% \centering
% \caption{The main manuscript book-hands} \label{tab:1}
% \begin{tabular}{lccccc} \hline
% Name                  & Century  & x-height & Height     & Pen  & Normalised \\
%                       &          & (mm)   & (nib widths) & angle & height  \\ \hline
% Roman Rustic          & 1--6     & 5.7    & 4--6         & 45     & 1.90 \\
% Uncial                & 3--6     & 4.1    & 4--5         & 30     & 1.37 \\
% Half Uncial           & 3--9     & 3.2    & 3--6         & 20--30 & 1.07 \\
% Artificial Uncial     & 6--10    & 4.2    & 3--6         & 10     & 1.40 \\
% Insular majuscule     & 6--9     & 4.2    & 5            & 0--20  & 1.40 \\
% Insular minuscule     & 6 onward & 4.1    & 5--6         & 45--70 & 1.37 \\
% Carolingian minuscule & 8--12    & 3.0    & 3--5         & 45     & 1.00 \\
% Early Gothic          & 11--12   & 3.8    & 4--6         & 20--45 & 1.27 \\
% Gothic Textura        & 13--15   & 3.9    & 3--5         & 30--45 & 1.30 \\
% Gothic Prescius       & 13 onward & 3.3   & 4--5         & 45     & 1.10 \\
% Rotunda               & 13--15   & 3.2    & 4--6         & 30     & 1.07 \\
% Humanist minuscule    & 14 onward & 3.0   & 4--5         & 30--40 & 1.00 \\ \hline
% \end{tabular}
% \end{table}
%
%    During the period under consideration arabic numerals were effectively
% not used. At the beginning they were unknown and even though some knew
% of them towards the end, the glyphs used for them are not recognisable ---
% to me they look somewhat like cryllic letters --- and each locality
% and time had its own highly individualistic rendering. The general rule
% when using one of these book-hands is to write all numbers using
% roman numerals.
%
%    The Roman alphabet consisted of 23 capital letters --- the J, U and W 
% were absent. The book-hands initially used both a `u' and a `v' interchangeably
% but by the 10th century the practice had become to use the `v' before a vowel 
% and the `u' otherwise. The letter corresponding to the W sound appeared 
% in England around the 7th century in
% the form of the runic \textit{wen} character and by about the 11th century
% the `w' chacter was generally used. The `J' is the newest letter of all, not
% appearing until about the mid 16th century.
%
%    In the first century punctuation was virtually unknown, and typically
% would not even be any additional space between individual words, never
% mind denoting ends of sentences. Sometimes a dot at mid-height would be
% used as a word seperator, or to mark off the end of a paragraph. Effectively
% a text was a continuous stream of letters. By the time that printing was
% invented, though, all of our modern punctuation marks were being used.
%
%    Among all these manuscript hands, the Carolingian minuscule is the
% most important as our modern fonts are based on its letter shapes, and it is
% also at this point in time where the division occured between the black letter
% scripts as used even today in Germany, and the lighter fonts used elesewhere.
% The Rotunda and Humanist minuscule hands were developed in Italy and were
% essentially a rediscovery of the Carolingian minusucle. Guthenberg took the
% Gothic scripts as the model for his types. Later printers, 
% such as Nicholas Jenson of Venice,
% took the Humanist scripts as their models.
%
%
% \subsection{The \thisfont{} script}
%
%    With the Gothic hands, used from the thirteenth century, the attention of
% the scribes moved from the individual letter to the word. The scripts
% changed to accomodate this interest so the appearance of the letters
% became subordinate to the overall appearance of the words they formed.
% Many of the letters appear to be indistinguishable today but the contemporary
% reading public seemed to have no difficulty.
%
%    It was during the heyday of the Gothic scripts that separate capital
% letters were introduced. Also, as a small concession to legibility,
% the lowecase `i' acquired a small mark above it. Ligatures were similar
% to those in Early Gothic. The letter `w' was added to the hand early on
% and `j' started to appear after 1400, providing the full 26 letter alphabet
% for the first time.
%
%    This font includes both lowercase and (fancy) uppercase letters. Guthenberg
% used this script as a model.
%
% \section{The \Lpack{tgothic} and \Lpack{alltgoth} packages} \label{sec:usc}
%
%     The \thisfont{} font family is called |tgoth|. The font is supplied in both
% OT1 and T1 encodings.
%
% \subsection{The \Lpack{tgothic} package}
%
%    This is intended for the occasions when some short pieces of text have
% to be written in \thisfont{} while the majority of the document is in another
% font. The normal baselineskips are used.
%
% \DescribeMacro{\tgothfamily}
%    The |\tgothfamily| declaration starts typesetting with the \thisfont{} fonts.
% Use of the \thisfont{} font will continue until either there is another |\...family|
% declaration or the current group (e.g., environment) is closed.
%
% \DescribeMacro{\texttgoth}
%    The command |\texttgoth{|\meta{text}|}| will typeset \meta{text} using the
% \thisfont{} fonts.
%
% \subsection{The \Lpack{alltgoth} package}
%
%
%    This package is for when the entire document will be typeset with the
% \thisfont{} font. The baselineskips are set to those appropriate to the
% book-hand. 
%
%    This is a minimalist package. Apart from declaring \thisfont{} to be the
% default font and setting the baselineskips appropriately, it makes no other
% alterations. 
% Vertical spacing
% before and after section titles and before and after lists, etc., will be
% too small as the \LaTeX{} design assumes a font comparable in size to
% normal printing fonts, and the book-hand is much taller.
% To capture more of the flavour of the time, all numbers
% should be written using roman numerals. 
% The \Lpack{romannum} package~\cite{ROMANNUM}
% can be used so that \LaTeX{} will typeset the numbers that it generates,
% like sectioning or caption numbers, using roman numerals instead of arabic 
% digits. 
%
% \DescribeMacro{\cmrfamily}
% \DescribeMacro{\textcmr}
% \DescribeMacro{\cmssfamily}
% \DescribeMacro{\textcmss}
% \DescribeMacro{\cmttfamily}
% \DescribeMacro{\textcmtt}
%    The |...family| declarations start typesetting with the Computer Modern Roman
% (|\cmrfamily|), the Computer Modern Sans (|\cmssfamily|), and the Computer
% Modern Typewriter (|\cmttfamily|) font families. The |\textcm..{|\meta{text}|}|
% commands will typeset \meta{text} in the corresponding Computer Modern font.
%
%    The \Lpack{alltgoth} package automatically loads the \Lpack{tgothic} package,
% so its font commands are available if necessary.
%
% \StopEventually{
% \bibliographystyle{alpha}
% \renewcommand{\refname}{Bibliography}
% \begin{thebibliography}{GMS94}
% \addcontentsline{toc}{section}{\refname}
%
% \bibitem[And69]{ANDERSON69}
% Donald M.~Anderson.
% \newblock {\em The Art of Written Forms: The Theory and Practice of Calligraphy}.
% \newblock Holt, Rinehart and Winston, 1969.
%
% \bibitem[Bol95]{BOLOGNA95}
% Giulia Bologna.
% \newblock {\em Illuminated Manuscripts: The Book before Gutenberg}.
% \newblock Crescent Books, 1995.
%
% \bibitem[Day95]{DAY95}
% Lewis F.~Day.
% \newblock {\em Alphabets Old \& New}.
% \newblock (3rd edition originally published by B.~T.~Batsford, 1910) 
% \newblock Senate, 1995.
%
% \bibitem[Dro80]{DROGIN80}
% Marc Drogin.
% \newblock {\em Medieval Calligraphy: Its History and Technique}.
% \newblock Allenheld, Osmun \& Co., 1980.
%
% \bibitem[Dru95]{DRUCKER95}
% Johanna Drucker.
% \newblock {\em The Alphabetic Labyrinth}.
% \newblock Thames \& Hudson, 1995.
%
% \bibitem[Fir93]{FIRMAGE93}
% Richard A.~Firmage.
% \newblock {\em The Alphabet Abecedarium}.
% \newblock David R~Goodine, 1993.
%
% \bibitem[Fli98]{LETTRINE}
% Daniel Flipo.
% \newblock {\em The LETTRINE package}.
% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}). 
% \newblock 1998.
%
% \bibitem[Har95]{HARRIS95}
% David Harris.
% \newblock {\em The Art of Calligraphy}.
% \newblock DK Publishing, 1995.
%
% \bibitem[Jen95]{BETON}
% Frank Jensen.
% \newblock {\em The BETON package}.
% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}). 
% \newblock 1995.
%
% \bibitem[Joh71]{JOHNSTON75}
% Edward Johnston (ed. Heather Child).
% \newblock {\em Formal Penship and Other Papers}.
% \newblock Penthalic, 1971.
%
% \bibitem[Knu87]{CM}
% Donald E.~Knuth.
% \newblock {\em Computer Modern Typefaces}.
% \newblock Addison-Wesley, 1987.
%
% \bibitem[Knu92]{METAFONT}
% Donald E.~Knuth.
% \newblock {\em The METAFONTbook}.
% \newblock Addison-Wesley, 1992.
%
% \bibitem[GMS94]{GOOSSENS94}
% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
% \newblock {\em The LaTeX Companion}.
% \newblock Addison-Wesley Publishing Company, 1994.
%
% \bibitem[Tho75]{THOMAS75}
% Alan G.~Thomas.
% \newblock {\em Great Books and Book Collectors}.
% \newblock Weidenfield and Nichoson, 1975.
%
% \bibitem[Wil99]{DOCMFP}
% Peter R.~Wilson.
% \newblock {\em The DOCMFP Package}.
% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}). 
% \newblock 1999.
%
% \bibitem[Wil99b]{ROMANNUM}
% Peter R.~Wilson.
% \newblock {\em The ROMANNUM Package}.
% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}). 
% \newblock 1999.
%
% \end{thebibliography}
% }
%
% \section{The Metafont code} \label{sec:mf}
%
%
%    As previously noted, this work is part of a larger project to provide
% fonts covering the main manuscript book-hands. As such, one of the
% aims is to produce a coordinated set of fonts, especially as multiple
% hands might be used in a single document. 
%
%    Noting that the hands tend to be somewhat larger than the typical 10pt
% size (where the x-height is approximately 1.5mm) used for modern books, 
% I have also designed the fonts
% at a larger than normal size, then applied some non-linear factors when reducing
% them down to a 10pt size.
%    Further, I have used the height of the Carolingian minuscule as a 
% normalising factor when deciding on the absolute height of any particular
% script. The x-height of the Carolingian font is made equal to the
% x-height of the Computer Modern Roman (CMR) font.
%
%    Modern fonts are effectively drawn. That is, the outline of the letter is
% drawn carefully and the center is filled with ink. This is shown to good
% effect in the Metafont code for the Computer Modern fonts~\cite{CM}.
% In contrast, the manuscript letters were inked by single pen strokes in
% a calligraphic manner. I have tried to repeat this calligraphic style
% in the Metafont code.
%
%    As much as possible I have tried to use parameter values from the
% Computer Modern Roman (CMR) fonts in order to reduce possible
% infelicities if the CM and manuscript fonts are used together. However,
% few of the CMR parameters are applicable to the calligraphic style.
%
%
% \subsection{The parameter file}
%
%    We deal with the parameter files first, and start by announcing
% what they are for. The \thisfont{} font comes in three sizes and also as a normal
% and a bold font.
%    \begin{macrocode}
%<*base7|base10|base17|base7b|base10b|base17b>
%<base7>%%% TGOTH7.MF    Gothic Textura Quadrata at 7 point design size.
%<base10>%%% TGOTH10.MF  Gothic Textura Quadrata at 10 point design size.
%<base17>%%% TGOTH17.MF  Gothic Textura Quadrata at 17 point design size.
%<base7b>%%% TGOTHB7.MF    Gothic Textura Quadrata Bold at 7 point design size.
%<base10b>%%% TGOTHB10.MF  Gothic Textura Quadrata Bold at 10 point design size.
%<base17b>%%% TGOTHB17.MF  Gothic Textura Quadrata Bold at 17 point design size.
%
%    \end{macrocode}
%    Parameters from CMR are used as much as possible. We also
% make sure that \Lpack{cmbase} is loaded as well as plain Metafont.
%    \begin{macrocode}
if unknown cmbase: input cmbase fi

%<base7>font_identifier:="TGOTH"; font_size 7pt#;
%<base10>font_identifier:="TGOTH"; font_size 10pt#;
%<base17>font_identifier:="TGOTH"; font_size 17.28pt#;
%<base7b>font_identifier:="TGOTHB"; font_size 7pt#;
%<base10b>font_identifier:="TGOTHB"; font_size 10pt#;
%<base17b>font_identifier:="TGOTHB"; font_size 17.28pt#;

%    \end{macrocode}
%
% \DescribeVariable{jutstretch}
%    The CMR scaling for lowercase serifs wrt 17pt size.
%    \begin{macrocode}
%<base7|base7b> jutstretch:=1.19; 
%<base10|base10b> jutstretch:=1.152; 
%<base17|base17b> jutstretch:=1.0;
%    \end{macrocode}
%
% \DescribeVariable{stemstretch}
%    The CMR scaling for lowercase stem widths wrt 17pt size.
%    \begin{macrocode}
%<base7|base7b> stemstretch:=1.50;
%<base10|base10b> stemstretch:=1.31;
%<base17|base17b> stemstretch:=1.0;
%    \end{macrocode}
%
% \DescribeVariable{caprat}
%    The scaling for capitals wrt lowercase. 
% (the ratio for CMR10 is 1.59).
%    \begin{macrocode}
 caprat:=7/5;          % ratio of capital height to minuscule height
%    \end{macrocode}
%
% \DescribeVariable{cap_jutstretch}
%    The CMR scaling for uppercase serifs wrt 17pt size.
%    \begin{macrocode}
%<base7|base7b> cap_jutstretch:=1.3;   
%<base10|base10b> cap_jutstretch:=1.2;   
%<base17|base17b> cap_jutstretch:=1.0;   
%    \end{macrocode}
%
% \DescribeVariable{cap_stemstretch}
%    The CMR scaling for uppercase stem width wrt 17pt size.
%    \begin{macrocode}
%<base7|base7b> cap_stemstretch:=1.45;  
%<base10|base10b> cap_stemstretch:=1.31;  
%<base17|base17b> cap_stemstretch:=1.0;  
%    \end{macrocode}
%
% \DescribeVariable{bfudge}
%    Letter width scaling for bold font wrt normal font. We don't really
% need to change this for bold fonts as the letter width is in terms
% of the pen, not the x-height.
% 
%    \begin{macrocode}
%<base7|base10|base17> bfudge:=1.0;
%<base7b|base10b|base17b> bfudge:=1.0;  %% normally 1.2
%    \end{macrocode}
%
% \DescribeVariable{szfudge}
%    Width scaling wrt 17pt letter width.
%    \begin{macrocode}
%<base7|base7b> szfudge:=1.18; 
%<base10|base10b> szfudge:=1.0; 
%<base17|base17b> szfudge:=1.0; 
%    \end{macrocode}
%
% \DescribeVariable{hstretch}
%    Horizontal stretching factor wrt 17pt size letter width.
%    \begin{macrocode}
 hstretch:=szfudge*bfudge;
%    \end{macrocode}
%
% \DescribeVariable{carol_height}
%    The x-height of the Carolingian gothic font.
%    \begin{macrocode}
%<base7|base7b> carol_height#:=108.5/36pt#; 
%<base10|base10b> carol_height#:=155/36pt#; 
%<base17|base17b> carol_height#:=268/36pt#; 
%    \end{macrocode}
%
% \DescribeVariable{vstretch}
%    The height of this font wrt the Carolingian font.
%    \begin{macrocode}
 vstretch:=1.3;   

%    \end{macrocode}
%
% \DescribeVariable{x_height} 
%    The x-height of lower case letters. Scaled from the Carolingian font.
%    \begin{macrocode}
 x_height#:=vstretch*carol_height#; 
%    \end{macrocode}
%
% \DescribeVariable{u}
%    The unit width. The CMR values are used.
%    \begin{macrocode}
%<base7> u#:=15.5/36pt#;  
%<base10> u#:=20/36pt#;  
%<base17> u#:=32.5/36pt#;  
%<base7b> u#:=17.9/36pt#;  
%<base10b> u#:=23/36pt#;  
%<base17b> u#:=37/36pt#;  
%    \end{macrocode}
%
% \DescribeVariable{width_adj}
% \DescribeVariable{serif_fit}
% \DescribeVariable{cap_serif_fit}
% \DescribeVariable{letter_fit}
%    The majority of these parameters and values are constant.
% They are for fine adjustements of characters. The CM values are used.
%    \begin{macrocode}
 width_adj#:=0pt#;         % width adjustment for certain characters
 serif_fit#:=0pt#;         % extra sidebar near lowercase serifs
%<base7|base7b> cap_serif_fit#:=3.5/36pt#;  % extra sidebar near uppercase serifs
%<base10|base10b> cap_serif_fit#:=5/36pt#;  % extra sidebar near uppercase serifs
%<base17|base17b> cap_serif_fit#:=8/36pt#;  % extra sidebar near uppercase serifs
%<base7|base7b> letter_fit#:=0pt#;        % extra space added to all sidebars
%<base10|base10b> letter_fit#:=0pt#;        % extra space added to all sidebars
%<base17|base17b> letter_fit#:=-0.1pt#;        % extra space added to all sidebars
%    \end{macrocode}
%
% \DescribeVariable{sb}
%    A length used for adjusting the side bearings of characters. Normally
% |1/2u| but want it less (1/2) for a Gothic.
%    \begin{macrocode}
%<base7|base7b> sb#:=1/4u#;                   % unit for side bearings
%<base10|base10b> sb#:=1/4u#;                 % unit for side bearings
%<base17|base17b> sb#:=1/4u#;                 % unit for side bearings

%    \end{macrocode}
%
% \DescribeVariable{cap_sb}
%    A length used for adjusting the side bearings of uppercase characters.
%    \begin{macrocode}
%<base7|base7b> cap_sb#:=2sb#;           % unit for uppercase side bearings
%<base10|base10b> cap_sb#:=2sb#;         % unit for uppercase side bearings
%<base17|base17b> cap_sb#:=2sb#;         % unit for uppercase side bearings

%    \end{macrocode}
%
% \DescribeVariable{cap_height} 
%    The height of capital letters.
%    \begin{macrocode}
%<base7|base7b> cap_height#:=172.2/36pt#;        % height of caps
%<base10|base10b> cap_height#:=246/36pt#;        % height of caps
%<base17|base17b> cap_height#:=425/36pt#;        % height of caps
%    \end{macrocode}
%
% \DescribeVariable{thickfudge}
%    The reciprocal of the font height in nib widths. Normal font height
% is 5 nib widths and the bold font height is 4 nib widths.
%    \begin{macrocode}
%<base7|base10|base17> thickfudge:=1/5;     
%<base7b|base10b|base17b> thickfudge:=1/4;     
%    \end{macrocode}
%
% \DescribeVariable{thinfudge}
%    The nib sharpness.
%    \begin{macrocode}
thinfudge:=1/6;      
%    \end{macrocode}
%
% \DescribeVariable{thick}
%    The maximum nib width. 
% That is, the width of the thickest line that can be penned.
%    \begin{macrocode}
thick#:=stemstretch*thickfudge*x_height#;    % max pen breadth
%    \end{macrocode}
%
% \DescribeVariable{thin}
%    The nib thinness. 
% That is, the width of the thinnest line that can be penned.
%    \begin{macrocode}
thin#:=thinfudge*thick#;  
%    \end{macrocode}
%
% \DescribeVariable{pangle}
%  The pen angle (in degrees).
%    \begin{macrocode} 
pangle:=45;                  % pen angle
%    \end{macrocode}
%
% \DescribeVariable{stem_width}
%   The width of a vertical stem.
%    \begin{macrocode}
stem_width#:= thick#*(cosd pangle);
%    \end{macrocode}
%
% \DescribeVariable{perpdec}
% \DescribeVariable{angdec}
% The perpendicular shift between pairs of thin decorative lines in capitals
% is |perpdec| and between angled lines is |angdec|.
%    \begin{macrocode}
perpdec#:= 3thin#;
angdec#:= perpdec#/(cosd pangle);
%    \end{macrocode}
%
%
% \DescribeVariable{ascratio}
%    The height of lower case ascenders wrt |x_height|.
%    \begin{macrocode}
  ascratio:=5/4;
%    \end{macrocode}
%
% \DescribeVariable{asc_height} 
%    The height of lower case ascenders.
%    \begin{macrocode}
  asc_height#:=ascratio*x_height#;
%    \end{macrocode}
%
% \DescribeVariable{descratio}
%    The depth of lower case descenders wrt |x_height|.
%    \begin{macrocode}
  descratio:=2/4;
%    \end{macrocode}
%
% \DescribeVariable{desc_depth} 
%    The depth of lower case descenders.
%    \begin{macrocode}
  desc_depth#:=descratio*x_height#;
%    \end{macrocode}
%
% \DescribeVariable{body_height} 
%    The height of the tallest character.
%    \begin{macrocode}
 body_height#:=caprat*asc_height#;    
%    \end{macrocode}
%
% \DescribeVariable{body_depth} 
%    The depth of the lowest character.
%    \begin{macrocode}
 body_depth#:=caprat*desc_depth#;    
%    \end{macrocode}
%
% \DescribeVariable{half_height} 
%    Half the normal letter height.
%    \begin{macrocode}
 half_height#:=1/2x_height#;    % half the height of x height letters

%    \end{macrocode}
%
% \DescribeVariable{side}
%    We might be using a square for the character design.
%    \begin{macrocode}
side#:=x_height#;     
%    \end{macrocode}
%
% \DescribeVariable{rule_thickness}
%    Thickness of rules (in math symbols). The CMR values are used.
%    \begin{macrocode}
%<base7|base7b> rule_thickness#:=.34pt#; 
%<base10|base10b> rule_thickness#:=.4pt#; 
%<base17|base17b> rule_thickness#:=.6pt#; 

%    \end{macrocode}
%
% \DescribeVariable{jutfudge}
%    Controls the protrusion of serifs.
%    \begin{macrocode}
%%%jutfudge:= 3/4;
jutfudge:= 1/2;
%    \end{macrocode}
%
% \DescribeVariable{jut} 
%    The lowercase serif protrusion.
%    \begin{macrocode}
jut#:=jutstretch*jutfudge*thick#; 
%    \end{macrocode}
%
% \DescribeVariable{srad}
%    |srad| with |0 < srad < 1| controls the serif radius.
%    \begin{macrocode}
srad:=0.8;   % was 0.5
%    \end{macrocode}
%
% \DescribeVariable{trijut}
%    The lowercase triangular serif protrusion.
%    \begin{macrocode}
trijut#:=0.75jutstretch*thick#;
%    \end{macrocode}
%
% \DescribeVariable{clubjutfudge}
%    The fractional protusion of a club serif.
%    \begin{macrocode}
clubjutfudge:=1/2;
%    \end{macrocode}
%
% \DescribeVariable{clubjut}
%    The lowercase club serif protrusion.
%    \begin{macrocode}
clubjut#:=jutstretch*clubjutfudge*thick#;
%    \end{macrocode}
%
% \DescribeVariable{wided}
% \DescribeVariable{widedmin}
%  Default juts of wide (touching) diamonds.
%    \begin{macrocode}
wided:= 0.75;
widedmin := 1.05 - wided;
%    \end{macrocode}
%
% \DescribeVariable{narrowd}
% \DescribeVariable{narrowdmin}
%  Default juts of narrow (non-touching) diamonds.
%    \begin{macrocode}
narrowd:= 0.5;
narrowdmin := 0.7 - narrowd;
%    \end{macrocode}
%
% \DescribeVariable{diawd}
% \DescribeVariable{diang}
%  Default width and angle of diamonds.
%    \begin{macrocode}
diawd := 1.0;
diang := 30;
%    \end{macrocode}
%
% \DescribeVariable{fig_height} 
%    The height of numerals. Make these midway between normal and capital
% letters.
%    \begin{macrocode}
  fig_height#:=(0.5[1,caprat])*x_height#;
%    \end{macrocode}
%
% \DescribeVariable{fig_width} 
%    The width of numerals. All numerals are the same width (roughly, an `o').
%    \begin{macrocode}
  fig_width#:=hstretch*(4+wided+widedmin)*stem_width#;
%    \end{macrocode}
%
%
%
% \DescribeVariable{o}
%    Amount of overshoot for curves (as in an `o'). Use CMR values.
%    \begin{macrocode} 
%<base7|base7b> o#:=5/36pt#;   
%<base10|base10b> o#:=8/36pt#;   
%<base17|base17b> o#:=10/36pt#;   

%    \end{macrocode}
%
% \DescribeVariable{slant}
% |slant| is the amount the font slopes to the right. \\
% 5 degrees = 9/100; 10 degrees = 11/50.
%    \begin{macrocode}
slant:=0;      % tilt ratio $(\Delta x/\Delta y)$
%%%%%%slant:= sind 10/cosd 10;  %% 10 degree slant

%    \end{macrocode}
% 
% \DescribeVariable{monospace} 
%    We are generating a variable-width font.
%    \begin{macrocode}
monospace:=false;    % should all characters have the same width?

%    \end{macrocode}
%
% \DescribeVariable{dot_size}
%    The size of (punctuation) dots.
%    \begin{macrocode}
dot_size#:=5thin#;   % size of dots
%    \end{macrocode}
%
% \DescribeVariable{comma_width}
%    The horizontal width of a comma.
%    \begin{macrocode}
comma_width#:=5/4dot_size#; 

%    \end{macrocode}
%
%    Finally, call the driver file for the font.
%    \begin{macrocode} 
generate tgothtitle      %% switch to the driver file

%    \end{macrocode}
%
%    The end of this code section.
%    \begin{macrocode}
%</base7|base10|base17|base7b|base10b|base17b>
%    \end{macrocode}
%
%
% \subsection{The driver file}
%
%    The driver file sets up the font parameters and also contains
% the macros used in the definition of the characters.
%
%    \begin{macrocode}
%<*mfd>
% This is TGOTHTITLE.MF for the Gothic Textura Quadrata font.
% This makes a short font.
% This file also contains special macros universally needed in the 
% font but either not in the cmbase.mf file or modifications of these.
%
%    \end{macrocode}
%
% \begin{routine}{makebox}
%    This is a new version of the \Lpack{cmbase.mf} |makebox| macro.
% Essentially, as we are only generating a single case font, we don't
% need all the horizontals for the CMR characters.
%
%    \begin{macrocode}
% A new version of cmbase.mf makebox macro
def makebox(text rule) =
  for y=0,half_height,cap_height,body_height,x_height,-desc_depth,-body_depth:
    rule((l,y)t_,(r,y)t_); endfor  % horizontals
  for x=l,r: rule((x,-body_depth)t_,(x,body_height)t_); endfor % verticals
  for x=u*(1+floor(1/u)) step u until r-1:
    rule((x,-body_depth)t_,(x,body_height)t_); endfor         % more verticals
  if charic<>0:
    rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_)); fi  % italic correction
enddef;

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{proofpcbb}
%    The macro |proofpcbb(S, xoff, yoff)| draws crosses at the corners of the
% square, and at the bottom and top midpoints, where the point |zS| is at
% position |(xoff,yoff)| in the square. 
%    \begin{macrocode}

% A macro to delineate a letter's bounding square in proof mode.
% Point z$ is at (xoff,yoff) in the bounding square.
def proofpcbb(suffix $)(expr xoff, yoff) =
if proofing > 0:
  x$bl = x$ - xoff; y$bl = y$ - yoff;         % Bottom Left Hand Corner
  z$br = (x$bl+side, y$bl);                   % BRHC
  z$tr = (x$bl+side, y$bl+side);              % TRHC
  z$tl = (x$bl, y$bl+side);                   % TLHC
  z$bc = 1/2[z$bl,z$br]; z$tc = 1/2[z$tl,z$tr];  % horizontal mid points
  pair hc, vc;
  hc = (2u,0); vc = (0,2u);
  pickup pensquare scaled 2;
  for s = z$bl, z$br, z$tr, z$tl, z$bc, z$tc:
    draw s-hc--s+hc;
    draw s-vc--s+vc;
  endfor
fi
enddef;

%    \end{macrocode}
% \end{routine}
%
%
%
% \begin{routine}{tgothic_font_setup}
%    This macro contains the set up for the \thisfont{} fonts.
%    \begin{macrocode}
 
def tgothic_font_setup= % contains special stuff for tgothic fonts
  define_pixels(side,half_height,carol_height,comma_width);
  define_pixels(u,dot_size,letter_size,cap_height,width_adj,serif_fit,
                cap_serif_fit,jut,clubjut,cap_jut,trijut);
  define_pixels(fig_width);
  define_whole_pixels(letter_fit,sb,cap_sb);
  define_whole_vertical_pixels(body_height,asc_height,cap_height,x_height,
                               desc_depth,body_depth,fig_height);
  define_corrected_pixels(o);
  define_blacker_pixels(thick,thin);
  define_pixels(stem_width);
  define_pixels(perpdec,angdec);
  let adjust_fit = normal_adjust_fit;
%    \end{macrocode}
% \DescribeVariable{stylus}
%  The pen for drawing the thinnest lines is |stylus|.
%    \begin{macrocode}
  pickup pencircle scaled thin;
  stylus:=savepen;
%    \end{macrocode}
% \DescribeVariable{thickstylus}
%  The pen for drawing lines a bit thicker than the thinnest is |thickstylus|.
%    \begin{macrocode}
  pickup pencircle scaled (1.5thin);
  thickstylus:=savepen;
%    \end{macrocode}
% \DescribeVariable{quill}
%  The normal calligraphic pen is |quill|.
%    \begin{macrocode}
  pickup pencircle xscaled thick yscaled thin rotated pangle;
  quill:=savepen;

%    \end{macrocode}
%
% \DescribeVariable{threequarterquill}
% A pen with 3/4 of the width as quill (but with the same thinness).
%    \begin{macrocode}
  pickup pencircle xscaled 3/4thick yscaled thin rotated pangle;
  threequarterquill := savepen;

%    \end{macrocode}
%
% \DescribeVariable{halfquill}
% A pen with 1/2 of the width as quill (but with the same thinness).
%    \begin{macrocode}
  pickup pencircle xscaled 1/2thick yscaled thin rotated pangle;
  halfquill := savepen;

%    \end{macrocode}
%
% \DescribeVariable{quarterquill}
% A pen with 1/4 of the width as quill (but with the same thinness).
%    \begin{macrocode}
  pickup pencircle xscaled 1/4thick yscaled thin rotated pangle;
  quarterquill := savepen;

%    \end{macrocode}
%
%
%    \begin{macrocode}
  numeric pcshiftx#; % x value of LHS of box wrt origin of char box
  define_pixels(pcshiftx);
  numeric sqxside#;   % x size of the square
  numeric sqyside#;   % y size of the square
  define_pixels(sqxside,sqyside);

enddef; % end of tgothic_font_setup

%    \end{macrocode}
% \end{routine}
%
%
% \DescribeVariable{ductus}
% A boolean to control drawing the ductus (TRUE) or the full letter (FALSE).
%    \begin{macrocode}
boolean ductus;
ductus:=false;
%    \end{macrocode}
%
% \DescribeVariable{qhor}
% \DescribeVariable{qvert}
% The cosine and sine of the pen angle.
%    \begin{macrocode}
numeric qhor, qvert;
qhor:=cosd(pangle); qvert:=sind(pangle);
%    \end{macrocode}
%
% \DescribeVariable{pdir}
% The vector corresponding to the pen angle.
%    \begin{macrocode}
pair pdir; pdir=dir(pangle);
%    \end{macrocode}
%
% \DescribeVariable{ppdir}
% The vector that is perpendicular (anticlockwise) to the pen angle.
%    \begin{macrocode}
pair ppdir; ppdir=dir(pangle+90);
%    \end{macrocode}
%
% \begin{routine}{draw_upforkstem}
% A macro to draw a vertical stem with a fork at the top.
% |draw_upforkstem(1,2)| uses the current pen to draw a vertical line, whose absolute
% top and bottom are at |z1| and |z2|. The top (|z1|) has a wedge shaped slit.
%    \begin{macrocode}

def draw_upforkstem(suffix $, $$)=
  pen oldpen; oldpen:=currentpen;
  x$a=x$; top y$a = bot y$;         % top of straight stem
  draw z$a--z$$;                    % straight part
  z$b = (rt x$, y$); z$c = (x$b, top y$a);
  z$d = (lft x$, bot y$a); z$e = (x$d, y$);
  pickup stylus;
  rt x$cc = x$c;  y$cc = y$c;
  lft x$bb = x$b; y$bb = y$b;
  lft x$dd = x$d; y$dd = y$d;
  rt x$ee = x$e;  y$ee = y$e;
  filldraw z$a--z$bb..z$cc--cycle;    % fork
  filldraw z$a--z$dd..z$ee--cycle;
  pickup oldpen;
  labels($a,$b,$c,$d,$e);
enddef; % end of draw_upforkstem

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_downforkstem}
% A macro to draw a vertical stem with a fork at the bottom.
% |draw_downforkstem(1,2)| uses the current pen to draw a vertical line, whose absolute
% top and bottom are at |z1| and |z2|. The bottom (|z2|) has a wedge shaped slit.
%    \begin{macrocode}

def draw_downforkstem(suffix $, $$)=
  pen oldpen; oldpen:=currentpen;
  x$$a=x$$; bot y$$a = top y$$;         % bottom of straight stem
  draw z$--z$$a;                        % straight part
  z$$b = (rt x$$, y$$); z$$c = (x$$b, top y$$a);
  z$$d = (lft x$$, bot y$$a); z$$e = (x$$d, y$$);
  pickup stylus;
  rt x$$cc = x$$c;  y$$cc = y$$c;
  lft x$$bb = x$$b; y$$bb = y$$b;
  lft x$$dd = x$$d; y$$dd = y$$d;
  rt x$$ee = x$$e;  y$$ee = y$$e;
  filldraw z$$a--z$$bb..z$$cc--cycle;    % fork
  filldraw z$$a--z$$dd..z$$ee--cycle;
  pickup oldpen;
  labels($$a,$$b,$$c,$$d,$$e);
enddef; % end of draw_downforkstem

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{draw_upcurlstem}
% A macro to draw a vertical stem with a curl to the left at the top.
% |draw_upcurlstem(1,2)| uses the current pen to draw a vertical line, whose absolute
% top and bottom are at |z1| and |z2|. The top (|z1|) has a fancy curl to the left,
% jutting out 3 stem widths.
%    \begin{macrocode}

def draw_upcurlstem(suffix $, $$)=
  pen oldpen; oldpen:=currentpen;
  path curlp[]; numeric curln[];
  x$a=x$; top y$a = y$;         % top of straight stem
  draw z$a--z$$;                    % straight part
  curln1 := rt x$a - lft x$a;       % stem width
  x$b = x$a - 4/2curln1; y$b = y$a;      % left jut
  curlp1 := z$a{-pdir}..{left}z$b;
  draw curlp1;

  x$c = x$a-3curln1; top y$c = bot y$a-1/2curln1;
  x$f = x$b; y$f = 1/3[y$c,y$b];
  x$tb = rt x$b; y$tb = top y$b;
  x$bb = lft x$b; y$bb = bot y$b;
  curlp2 := z$tb--z$bb..{down}z$c..{ppdir}z$f;
  pickup stylus;
  draw curlp2;
  pickup oldpen;
  labels($a,$b,$c,$d,$e,$f);
enddef; % end of draw_upcurlstem

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_updiamondstem}
% A macro to draw a vertical stem with a diamond at the top.
% |draw_updiamondstem(1,2,fr,minfr,wd,ang)| uses the quill pen to draw a vertical line, 
% whose absolute
% top and bottom are at |z1| and |z2|. The top (|z1|) has a leftward diamond, whose
% left jut is |fr| times the width of the stem, right jut is |minfr*stem_width|, width
% is |wd*stem_width| and angle above the horizontal is |ang|.
%    \begin{macrocode}

def draw_updiamondstem(suffix $, $$)(expr fr, minfr, wd, phi)=
  pen oldpen; oldpen:=currentpen;
  numeric sj; sj := fr*stem_width;             % jut distance
  numeric sjr; sjr := minfr*stem_width;        % right jut distance
  numeric jw;  jw := wd*stem_width;            % jut width
  %% $b is bottom left of jut, on LHS of stem
  %% $c is leftmost point on jut
  %% $d is topmost point on jut
  %% $g is topmost point on stem
  %% $e is on exprapolation of line from $d through $g
  %%    i.e., the rightmost point on jut
  %% $f is on RHS of stem
  pickup quill;
  x$b = lft x$;
  x$c = x$b - sj; y$c = y$ - jw*(cosd phi);    % $c done
  y$b = y$c - sj*(sind phi);                   % $b done
  x$d = x$c + jw*(sind phi); y$d = y$;         % $d done
  x$g = x$f = rt x$;
  y$g = y$ - (x$g-x$d)*(sind phi)/(cosd phi);  % $g done
  x$a = x$; top y$a = y$g;                     % $a done
  x$e = x$g + sjr;  z$e = whatever[z$d,z$g];  % $e done
  z$f-z$e = whatever*(z$c-z$d);                % $f done
  x$h = x$b; y$h = bot y$a;
  draw z$a--z$$;                    % straight part
  pickup stylus;
  lft x$cc = x$c; y$cc = y$c;
  x$dd = x$d; top y$dd = y$d;
  rt x$ee = x$e; bot y$ee=y$e;
  filldraw z$b--z$cc--z$dd--z$ee--z$f--cycle;    % diamond
  if y$b > y$h:
    lft x$hh = x$h; y$hh=y$h; 
    filldraw z$b--z$hh--z$g--cycle;
  fi
  pickup oldpen;
  labels($a,$b,$c,$d,$e,$f);
enddef; % end of draw_updiamondstem

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{draw_downdiamondstem}
% A macro to draw a vertical stem with a diamond at the bottom.
% |draw_downdiamondstem(1,2,fr,minfr,wd,ang)| uses the quill pen to draw a vertical line, 
% whose absolute
% top and bottom are at |z1| and |z2|. The bottom (|z2|) has a rightward diamond, whose
% right jut is |fr| times the width of the stem, left jut is |minfr*stem_width|,
% width is |wd*stem_width| and is at |ang| degrees below the horizontal.
%    \begin{macrocode}

def draw_downdiamondstem(suffix $, $$)(expr fr, minfr, wd, phi)=
  pen oldpen; oldpen:=currentpen;
  numeric sj; sj := fr*stem_width;              % (left) jut distance
  numeric sjr; sjr := minfr*stem_width;;        % right jut distance
  numeric jw;  jw := wd*stem_width;             % jut width
  %% $$b is top right of jut, on RHS of stem
  %% $$c is rightmost point on jut
  %% $$d is bottommost point on jut
  %% $$g is bottommost point on stem
  %% $$e is on exprapolation of line from $d through $g
  %%    i.e., the leftmost point on jut
  %% $$f is on LHS of stem
  pickup quill;
  x$$b = rt x$$;
  x$$c = x$$b + sj; y$$c = y$$ + jw*(cosd phi);    % $$c done
  y$$b = y$$c + sj*(sind phi);                     % $$b done
  x$$d = x$$c - jw*(sind phi); y$$d = y$$;         % $$d done
  x$$g = x$$f = lft x$$;
  y$$g = y$$ + (x$$d-x$$g)*(sind phi)/(cosd phi);  % $$g done
  x$$a = x$$; bot y$$a = y$$g;                     % $$a done
  x$$e = x$$g - sjr;  z$$e = whatever[z$$d,z$$g];  % $$e done
  z$$f-z$$e = whatever*(z$$c-z$$d);                % $$f done
  x$$h = x$$b; y$$h = top y$$a;
  draw z$--z$$a;                    % straight part
  pickup stylus;
  rt x$$cc = x$$c; y$$cc=y$$c;
  x$$dd = x$$d; bot y$$dd = y$$d;
  lft x$$ee = x$$e; top y$$ee = y$$e;
  filldraw z$$b--z$$cc--z$$dd--z$$ee--z$$f--cycle;    % diamond
  if y$$b < y$$h:
    rt x$$hh = x$$h; y$$hh=y$$h; 
    filldraw z$$b--z$$hh--z$$g--cycle;
  fi
  pickup oldpen;
  labels($$a,$$b,$$c,$$d,$$e,$$f);
enddef; % end of draw_downdiamondstem

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_serif}
% A macro to draw a serif. |draw_serif(1,2,f)| uses the current pen to
% draw a serif of extent |jut| at |z1| to the left of the line from |z2| 
% to |z1|. The
% radius is controlled by |f|, where $0<f<1$. The `stem' from |z1| to |z2|
% starts at the point |z1a|.
%    \begin{macrocode}

def draw_serif(suffix $, $$)(expr fr)=
  numeric beta, ajut, bjut;
%    \end{macrocode}
% |fr| and |beta| control the serif radius.
%    \begin{macrocode}
  beta=1-fr;
  ajut=fr*jut; bjut=beta*jut;
%    \end{macrocode}
% The points |$c|, |$b| and |$a| define the serif. For a top (bottom) serif
% the leftmost (rightmost) point is 
% |$c| and |$a| is on the stem. |$a| is moved from |$| towards |$$| by the 
% distance |ajut|, and the other points are calculated from this. If the stem
% is not vertical, then we have to rotate |$b| to match.
%    \begin{macrocode}
  pair vec[]; vec1=unitvector(z$$-z$);
  vec2=ajut*vec1;
  z$a=z$ shifted vec2;
  z$b=z$a rotatedaround (z$,-90);
  boolean top_serif;
  if y$>y$$:
    top_serif := true;
    z$c=z$b shifted (-bjut*pdir);
  else:
    top_serif:=false;
    z$c=z$b shifted (bjut*pdir);
  fi
%    \end{macrocode}
% Draw the parts, and finish off.
%    \begin{macrocode}
  if top_serif:
    draw z$c--z$b{pdir}..{z$$-z$}z$a;    % the serif
  else:
    draw z$c--z$b{-pdir}..{z$$-z$}z$a;
  fi
  labels($a,$b,$c);
enddef; % end of draw_serif

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_roundserif}
% The |draw_serif| routine can leave a bump at the end of the stem.
% The |draw_roundserif| routine, which takes the same arguments,
% is meant to eliminate the bump.
%    \begin{macrocode}

def draw_roundserif(suffix $, $$)(expr fr)=
  draw_serif($, $$, fr);
  undraw z$--z$a;
enddef; % end of draw_roundserif

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{draw_flatserif}
% A macro to draw a serif. |draw_serif(1,2,f)| uses the current pen to
% draw a serif of extent |jut| at |z1| to the left of the line from |z2| 
% to |z1|. The
% radius is controlled by |f|, where $0<f<1$. The `stem' from |z1| to |z2|
% starts at the point |z1a|. This produces a serif like |draw_serif| except
% that one side of the seerif is flat.
%    \begin{macrocode}

def draw_flatserif(suffix $, $$)(expr fr)=
  numeric beta, ajut, bjut;
%    \end{macrocode}
% |fr| and |beta| control the serif radius.
%    \begin{macrocode}
  beta=1-fr;
  ajut=fr*jut; bjut=beta*jut;
%    \end{macrocode}
% The points |$c|, |$b| and |$a| define the serif. For a top (bottom) serif
% the leftmost (rightmost) point is 
% |$c| and |$a| is on the stem. |$a| is moved from |$| towards |$$| by the 
% distance |ajut|, and the other points are calculated from this. If the stem
% is not vertical, then we have to rotate |$b| to match.
%    \begin{macrocode}
  pair vec[]; vec1=unitvector(z$$-z$);
  vec2=ajut*vec1;
  z$a=z$ shifted vec2;
%%%  z$b=z$a rotatedaround (z$,-90);
  boolean top_serif;
  if y$>y$$:
    top_serif := true;
    z$c=z$ shifted (-jut*pdir);
  else:
    top_serif:=false;
    z$c=z$ shifted (jut*pdir);
  fi
  z$b = fr[z$,z$c];
%    \end{macrocode}
% Draw the parts, and finish off.
%    \begin{macrocode}
  draw z$a--z$;
  if top_serif:
    draw z$c--z$b{pdir}..{z$$-z$}z$a;    % the serif
  else:
    draw z$c--z$b{-pdir}..{z$$-z$}z$a;
  fi
  labels($a,$b,$c);
enddef; % end of draw_flatserif

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{draw_clubserif}
% A macro to draw a clubbed serif. |draw_clubserif(1,2,f)| uses the current 
% pen to
% draw a clubbed serif of extent |clubjut| at |z1| to the left of the line 
% from |z2| 
% to |z1|. The serif matches |z1| like the flatserif does and ends at the
% point |f[z1,z2]|.
%    \begin{macrocode}

def draw_clubserif(suffix $, $$)(expr fr)=
  numeric beta, ajut, bjut;
%    \end{macrocode}
% |fr| controls the length of the serif.
%    \begin{macrocode}
%%  beta=1-fr;
  ajut=clubjut; bjut=beta*jut;
%    \end{macrocode}
% The points |$c|, |$b| and |$a| define the serif. For a top (bottom) serif
% the leftmost (rightmost) point is 
% |$c| and |$a| is on the stem, |fr| between |$| and |$$|.
%    \begin{macrocode}
  pair vec[]; vec1=unitvector(z$$-z$);
%%  vec2=ajut*vec1;
%%  z$a=z$ shifted vec2;
  boolean top_serif;
  if y$>y$$:
    top_serif := true;
    z$c=z$ shifted (-clubjut*pdir);
  else:
    top_serif:=false;
    z$c=z$ shifted (clubjut*pdir);
  fi
  z$a = fr[z$,z$$];
%    \end{macrocode}
% Draw the parts, and finish off.
%    \begin{macrocode}
  draw z$c..z$a{vec1};
  labels($a,$b,$c);
enddef; % end of draw_clubserif

%    \end{macrocode}
% \end{routine}
%
%
%
% \begin{routine}{draw_triserif}
% A macro to draw a triangular top left serif.
% |draw_triserif(1,tj)| draws a serif at |z1| with its leftmost x
% value at |x1-tj|, where it is assumed that the
% top point on the stem is at |z1| and the stem was drawn with |quill|.
%    \begin{macrocode}

def draw_triserif(suffix $)(expr tj)=
  pen oldpen; oldpen:=currentpen;
  pickup quill;
  x$ts1'=lft x$; y$ts1'=bot y$;
  pickup stylus;
  lft x$ts1=x$ts1'; bot y$ts1=y$ts1';
  x$ts2=x$ts1-tj; z$ts2=whatever[z$,z$ts1];
  x$ts3=x$ts1; y$ts3=y$ts2-tj;
  pickup stylus;
%%  filldraw z$ts1--z$ts2--z$ts3--cycle;
  filldraw z$--z$ts2--z$ts3--cycle;
  pickup oldpen;
  labels($ts1,$ts2,$ts3);
enddef; % end of draw_triserif

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_istem}
%  A macro to draw the shape of an i. |draw_istem(1,2,f)| draws a stem whose
% top is at |z1| and bottom at |z2|. It draws with the current pen and the serifs
% are of extent |jut|. There is a top left and bottom right serif.
% The serif radius is controlled by |f|, with $0<f<1$.
%    \begin{macrocode}

def draw_istem(suffix $, $$)(expr fr)=
  draw_serif($, $$, fr);  % top serif
  draw_serif($$, $, fr);  % bottom serif
  draw z$a--z$$a;  % the stem
enddef; % end of draw_istem

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_tstem}
%  A macro to draw the shape of the stem of a `t'. |draw_tstem(1,2,f)| draws a 
% stem whose
% top is at |z1| and bottom at |z2| with a right serif at |z2|. The radius
% is controlled by |f|, with $0 < f < 1$.
% It draws with the current pen and the serif is of extent |jut|.
% NOTE: for the TGOTH font, just the stem is drawn --- no serif!
%    \begin{macrocode}

def draw_tstem(suffix $, $$)(expr fr)=
%%  draw_serif($$, $, fr);  % the serif
%%  draw z$--z$$a;                      % the stem
  draw z$--z$$;
enddef; % end of draw_tstem

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_tlserif}
%  A macro to draw a top left serif. |draw_tlserif(1,2,f)| draws a serif on top
% of a stem whose absolute 
% top is at |z1| and bottom at |z2|. It draws with the current pen and the serif
% is of extent |jut|. It also draws the stem to the point |z2|. The serif
% radius is controlled by |f|, with $0<f<1$.
%    \begin{macrocode}

def draw_tlserif(suffix $, $$)(expr fr)=
  draw_serif($, $$, fr);  % the serif
  draw z$a--z$$;                       % the stem
enddef; % end of draw_tlserif

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{draw_flick}
%  A macro to draw a flick (like an eyebrow). 
% |draw_flick(1,rise,fall,fjut)| draws a stroke starting at |z1| rising up by
% |rise| and falling down by |fall| wrt |z1|. The overall stroke distance is
% |fjut| to the right of |z1|. It is drawn with the current pen.
%    \begin{macrocode}

def draw_flick(suffix $)(expr rise, fall, fjut)=
%    \end{macrocode}
% The points |z$a| and |z$b|, together with |z$| make up three points on the
% ductus.
%    \begin{macrocode}
  rt x$b = x1+fjut; top y$b=y$-fall;
  x$a=0.5[x$,x$b]; top y$a=y$+rise;
%    \end{macrocode}
% Draw the part, and finish off.
%    \begin{macrocode}
  draw z$..z$a..z$b; 
  labels($a,$b);
enddef; % end of draw_flick

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{draw_wave}
% A macro to draw a (horizontal) stroke with a flick at each end 
% (down at the left and up at the right). |draw_wave(1,2,f)| uses the current
% pen to draw from |z1wl| to |z1wr|, where |x1wl=x1|, |y1wl=y1-f|, and
% |x1wr=x2|, |y1wr=y2+f|, with |z1| assumed to be at the left of |z2|.
%    \begin{macrocode}

def draw_wave(suffix $,$$)(expr f)=
  x$wl=x$; y$wl=y$-f;
  x$wr=x$$; y$wr=y$$+f;
  z$wc=0.5[z$wl,z$wr];
  draw z$wl{pdir}..z$wc{right}..{pdir}z$wr;
  labels($wl,$wc,$wr);
enddef; % end of draw_wave
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_tail}
% A macro to draw a tail at the bottom of a (vertical) stem.
% |draw_tail(1,fjut)| draws a tail at the bottom of the stem which ends at |z1|.
% The depth is controlled by the |desc_depth| value and the jut by |fjut|.
%    \begin{macrocode}

def draw_tail(suffix $)(expr fj)=
  pen oldpen; oldpen:=currentpen;
  pickup quill;
  x$tl' = lft x$; y$tl=bot y$;
  pickup stylus;
  lft x$tl=x$tl';
  x$tb=x$tl-fj; bot y$tb=y$tl-1/2desc_depth;
  filldraw z${down}..{-pdir}z$tb & z$tb{pdir}..{up}z$tl--cycle;
  pickup oldpen;
  labels($tb,$tl);
enddef; % end of draw_tail
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_triangle}
% A macro to draw a downward pointing equilateral triangle.
% |draw_triangle(1,sz)| draws a triangle of side length |sz| with |z1| in the middle
% of the base.
%    \begin{macrocode}

def draw_triangle(suffix $)(expr sz)=
  pen oldpen; oldpen:=currentpen;
  pickup stylus;
  x$t1=x$-sz/2; x$t3=x$+sz/2;
  y$t1=y$t3=y$;
  x$t2=x$; y$t2=y$-0.9sz;   % approx sqrt(3)/2
  filldraw z$t1--z$t2--z$t3--cycle;
  pickup oldpen;
  labels($t1,$t2,$t3);
enddef; % end of draw_triangle
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_utriangle}
% A macro to draw an upward pointing equilateral triangle.
% |draw_utriangle(1,sz)| draws a triangle of side length |sz| with |z1| in the middle
% of the base.
%    \begin{macrocode}

def draw_utriangle(suffix $)(expr sz)=
  pen oldpen; oldpen:=currentpen;
  pickup stylus;
  x$t1=x$-sz/2; x$t3=x$+sz/2;
  y$t1=y$t3=y$;
  x$t2=x$; y$t2=y$+0.9sz;   % approx sqrt(3)/2
  filldraw z$t1--z$t2--z$t3--cycle;
  pickup oldpen;
  labels($t1,$t2,$t3);
enddef; % end of draw_utriangle
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_rtriangle}
% A macro to draw a downward pointing right angled triangle.
% |draw_rtriangle(1,sz)| draws a triangle of side length |sz| with |z1| at the
% right (where the right angle is).
%    \begin{macrocode}

def draw_rtriangle(suffix $)(expr sz)=
  pen oldpen; oldpen:=currentpen;
  pickup stylus;
  x$t1=x$-sz; rt x$t3=x$;
  y$t1=y$t3=y$;
  x$t2=x$t3; y$t2=y$-sz;
  filldraw z$t1--z$t2--z$t3--cycle;
  pickup oldpen;
  labels($t1,$t2,$t3);
enddef; % end of draw_rtriangle
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_rutriangle}
% A macro to draw an upward pointing right angled triangle.
% |draw_rutriangle(1,sz)| draws a triangle of side length |sz| with |z1| at the
% right (where the right angle is).
%    \begin{macrocode}

def draw_rutriangle(suffix $)(expr sz)=
  pen oldpen; oldpen:=currentpen;
  pickup stylus;
  x$t1=x$-sz; rt x$t3=x$;
  y$t1=y$t3=y$;
  x$t2=x$t3; y$t2=y$+sz;
  filldraw z$t1--z$t2--z$t3--cycle;
  pickup oldpen;
  labels($t1,$t2,$t3);
enddef; % end of draw_rutriangle
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_fork}
% A macro to draw a forked line.
% |draw_fork(1,2,sz)| draws a graduated line from |z1| to |z2| with a forked
% end of size |sz|.
%    \begin{macrocode}

def draw_fork(suffix $, $$)(expr sz)=
  pen oldpen; oldpen:=currentpen;
  pickup quill;
  x$f1'=lft x$; y$f1'=bot y$;
  x$f3'=rt x$;  y$f3'=top y$;
  pickup stylus;
  lft x$f1=x$f1'; bot y$f1=y$f1';
  rt x$f3=x$f3';  y$f3-y$=2*(y$-y$f1);
  rt x$f2=x$$-sz; bot y$f2=y$$;
  rt x$f4= rt x$f5=x$$;
  bot y$f5=y$$-sz; top y$f4=y$$+1/2sz;
  filldraw z$f1--z$f2--z$f3--cycle;   % the line
  draw z$f2{right}..z$f4;             % upper fork
  draw z$f2{right}..z$f5;             % lower fork
  pickup oldpen;
  labels($f1,$f2,$f3,$f4,$f5);
enddef; % end of draw_fork
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_urswish}
% A macro to draw a line up and to the right with an under curl at the end.
% |draw_urswish(1,2)| draws from |z1| towards |z2|, which is the max upper right
% of a bounding box, where the curl is.
%    \begin{macrocode}

def draw_urswish(suffix $, $$)=
  pen oldpen; oldpen:=currentpen;
  pickup quill;
  rt x$$s1=x$$-thick; top y$$s1=y$$;
  rt x$$s2=x$$; 
%%  x$$s3=x$$-thick;
  lft x$$s3=x$$s1;
  bot y$$s3=y$$-thick; y$$s2=0.5[y$$s1,y$$s3];
%%  draw z$---z$$s1{right}..z$$s2{down}..{-pdir}z$$s3;
  draw z$..z$$s1{pdir}..z$$s2{down};
  labels($$s1,$$s2,$$s3); 
enddef; % end of draw_urswish
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{bowl_stem}
%  Calculate where a bowl should meet a stem so that the pen is moving in the
% pen direction.
% |bowl_stem(1,2)| calculates the point |z1i|, where |z1| is on the bowl and
% there is a vertical line at |x2|.
%
%    \begin{macrocode}

def bowl_stem(suffix $, $$)=
  x$'=0.5[x$,x$$]; y$'=y$;    % the mid-point
  z$''=z$' shifted (thick*pdir);
  x$i=x$$; z$i=whatever[z$',z$''];
  labels($',$i);
enddef; % end of bowl_stem
%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_clubbase}
% Draw a clubbed bottom of a vertical stem for the TGOTH font.
% |draw_clubbase(1, 2, st, left, right)| draws from |st[z2,z1]| to |z2|. 
% At |z2| the pen
% is shifted |left| fraction of the pen width and |right| fraction of the
% pen width, both in the direction of the pen angle. Pen draws smoothly the
% path |z1|, |left|, |right|, |z1|.
%    \begin{macrocode}

% draw clubbed bottom of vertical stem for TGOTH font.
def draw_clubbase(suffix $, $$)(expr st, lft, rt)=
  z$$l = z$$ shifted (lft*thick*(-pdir));
  z$$r = z$$ shifted (rt*thick*(pdir));
  z$$t = st[z$$,z$];
  draw z$$t{z$$-z$}..z$$l--z$$r..{z$-z$$}z$$t;
  labels($$t,$$l,$$r);
enddef; % end of draw_clubbase

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_pdot}
%  A macro to draw a period dot.
% |draw_pdot(1,sz)| uses |stylus| to draw a dot centered at |z1| of overall size |sz|.
%    \begin{macrocode}

def draw_pdot(suffix $)(expr sz)=
%    \end{macrocode}
% Draw a square rotated 45 degrees.
%    \begin{macrocode}
  z$s = z$ shifted (0.5sz*left);
  z$t = z$ shifted (0.5sz*up);
  z$u = z$s shifted (sz*right);
  z$v = z$t shifted (sz*down);
  pickup stylus;
  filldraw z$s--z$t--z$u--z$v--cycle;
  labels($s,$t,$u,$v);
enddef; % end of draw_pdot

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_pcomma}
%  A macro to draw a period comma.
% |draw_pcomma(1,t,w)| draws a comma placed at |z1| (the top), line width is |t|
% and bottom of line is |w| horizontally from |z1|. The pen is |stylus|.
%    \begin{macrocode}

def draw_pcomma(suffix $)(expr sz, ar)=
%    \end{macrocode}
% Draw a line of at |z$| of width |sz| sloping back and down 
% for a total width of |ar| and deptrh of |2ar|.
%    \begin{macrocode}
  z$s = z$ shifted (0.5sz*left);
  z$t = z$s shifted (sz*right);
  x$v=x$s-ar; y$v=y$s-2ar;
  z$u = z$v shifted (sz*right);
  z$sv = (x$s, 1/3[y$s,y$v]);
  z$tu = (x$t, y$sv);
  z$uv = 1/3[z$u,z$v];
  z$vu = 1/3[z$v,z$u];
  pickup stylus;
%%  filldraw z$s--z$t--z$u--z$v--cycle;
  filldraw z$s--z$t--z$tu--z$uv--z$vu--z$v--z$sv--cycle;
  labels($s,$t,$u,$v);
enddef; % end of draw_pcomma

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{draw_plq}
%  A macro to draw a period left quote.
% |draw_pcomma(1,t,w)| draws a left quote placed at |z1| (the top), line width is |t|
% and bottom of line is |w| horizontally from |z1|.
%    \begin{macrocode}

def draw_plq(suffix $)(expr sz, ar)=
%    \end{macrocode}
% Draw a line of at |z$| of width |sz| sloping forward and down 
% for a total width of |ar| and depth |2ar|.
%    \begin{macrocode}
  z$s = z$ shifted (0.5sz*left);
  z$t = z$s shifted (sz*right);
  x$v=x$s+ar; y$v=y$s-2ar;
  z$u = z$v shifted (sz*right);
  z$sv = (x$s, 1/3[y$s,y$v]);
  z$tu = (x$t, y$sv);
  z$uv = 1/3[z$u,z$v];
  z$vu = 1/3[z$v,z$u];
  pickup stylus;
%%  filldraw z$s--z$t--z$u--z$v--cycle;
  filldraw z$s--z$t--z$tu--z$uv--z$vu--z$v--z$sv--cycle;
  labels($s,$t,$u,$v);
enddef; % end of draw_plq

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{offsetbowl}
%    A macro to calculate the outer and inner paths (|obouter| and |obinner|)
% for a non-centered letter `o'. |offsetbowl($, sx, sy, fx, fy)| 
% calculates the paths for an `o'
% enclosed in a rectangle size |sx| by |sy| with its bottom lefthand corner
% located at |z$|, where the center of the o is at |(fx*sx, fy*sy)| in the
% bounding rectangle.
%
%    Two construction paths, namely |obfirst| and |obsecond| are also
% available. They should be identical.
%
%    All paths have points listed in a clockwise direction, starting with
% |z$nh| or |z$minl| as appropriate.
%
%  |offsetbowl($, sx, sy, 1/2, 1/2)| gives the same results as |obowl($, sx, sy)|.
%    \begin{macrocode}

path obouter, obinner, obfirst, obsecond;
def offsetbowl(suffix $)(expr sx, sy, fx, fy)=
  numeric inx, iny, cx, cy;
  pair pt[];
  path pth[];
  inx := 1/2thick*cosd(pangle); iny := 1/2thick*sind(pangle);
  cx := x$+fx*sx; cy := y$+fy*sy;
  z$obc = (cx,cy);
%    \end{macrocode}
% Calulate points on the centre path of the pen. These are offset by |inx|
% from the rectangles vertical sides and by |iny| from the horizontal sides.
% If the pen is parallel to a side, offset the point by half the pen's 
% dimension. First do the West, East, North and South points.
%    \begin{macrocode}
  if pangle = 90:
    z$wt=(x$+1/2thin, cy);
    z$et=(x$+sx-1/2thin, cy);
  else:
    z$wt=(x$+inx, cy);
    z$et=(x$+sx-inx, cy);
    penpos$wt(thick,pangle);
    penpos$et(thick,pangle);
  fi
  if pangle = 0:
    z$nh=(cx, y$+sy-1/2thin);
    z$sh=(cx, y$+1/2thin);
  else:
    z$nh=(cx, y$+sy-iny);
    z$sh=(cx, y$+iny);
    penpos$nh(thick,pangle);
    penpos$sh(thick,pangle);
  fi
  obfirst := z$nh{right}..z$et{down}..z$sh{left}..z$wt{up}..cycle;
%    \end{macrocode}
% Now calculate the points on the path |obfirst| where the pen will
% draw the min width lines (i.e., the points where the pen will be
% moving parallel to |pangle|).
%    \begin{macrocode}
  if pangle = 90:
      z$minl = z$wt; z$maxr = z$nh; z$minr = z$et; z$maxl = z$sh;
  else:
    if pangle = 0:
      z$minl = z$nh; z$maxr = z$et; z$minr = z$sh; z$maxl = z$wt;
    else:
      z$minl = directionpoint dir(pangle)     of obfirst;
      z$minr = directionpoint -dir(pangle)    of obfirst;
%    \end{macrocode}
% The max points are roughly where the inner and outer diverge 
% the most. These are simple for 0 and 90 degree pens and have
% been calculated above. It's not so simple for intermediate
% angles. For a reasonable looking result, we pick the max
% points to be halfway between the min points. This involves
% calculating some angles, paths and intersections.
%    \begin{macrocode}
      pt1 := z$minr - z$minl;           % direction
      pt2 := (- ypart pt1, xpart pt1);  % perpendicular
      pt3 := 1/2[z$minl, z$minr];
      pt4 := pt3 shifted pt2;
      pt5 := pt3 shifted -pt2;
      pth1 := pt3--pt4;
      pth2 := pt3--pt5;
      z$maxr = pth1 intersectionpoint obfirst;
      z$maxl = pth2 intersectionpoint obfirst;
    \fi
  \fi
%    \end{macrocode}
% Place the pen at each of these points to get the outer and inner points.
%    \begin{macrocode}
  penpos$minl(thin,pangle+90);
  penpos$maxr(thick,pangle);
  penpos$minr(thin,pangle+90);
  penpos$maxl(thick,pangle);
%    \end{macrocode}
% Finally, the outer and inner paths.
%    \begin{macrocode}
  obsecond := z$minl..z$maxr..z$minr..z$maxl..cycle;
  z$minlo = z$minl.r; z$maxro = z$maxr.r;
  z$minro = z$minr.l; z$maxlo = z$maxl.l;
  obouter := z$minlo{dir(pangle)}...z$maxro...z$minro{-dir(pangle)}...z$maxlo...cycle;
  z$minli = z$minl.l; z$maxri = z$maxr.l;
  z$minri = z$minr.r; z$maxli = z$maxl.r;
  obinner := z$minli...z$maxri...z$minri...z$maxli...cycle;
  labels($obc, $nh, $et, $sh, $wt);
  labels($minl, $maxr, $minr, $maxl);
  labels($minlo, $maxro, $minro, $maxlo);
  labels($minli, $maxri, $minri, $maxli);
enddef;

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{obowl}
%    A macro to calculate the outer and inner paths (|obouter| and |obinner|)
% for the letter `o'. |obowl($, sx, sy)| calculates the paths for an `o'
% centered and enclosed in a rectangle size |sx| by |sy| with its bottom 
% lefthand corner located at |z$|.
%    \begin{macrocode}

def obowl(suffix $)(expr sx, sy)=
  offsetbowl($, sx, sy, 1/2, 1/2);
enddef;

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{scalarprod}
%  |v scalarprod w| calulates the scalar product between the
% two vectors |v| and |w|.
%    \begin{macrocode}

primarydef v scalarprod w =
  (xpart v * ypart w - ypart v * xpart w)
enddef;

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{tangentpoint}
% |tangentpoint($, path)| calculates the point |z$tan| on the |path|
% so that |z$tan--z$| is tangent to the path. It uses a binary search
% to find a point on the path such that the path direction is
% (anti-) parallel to the dirction from that point to the given point.
%    \begin{macrocode}

def tangentpoint(suffix $)(expr pth)=
  pair vecll, veclr, veclm;    % "tangent" line directions
  numeric pl, pr, pm;          % path parameter values
  pair vecpl, vecpr, vecpm;    % path directions
  pair ptl, ptr, ptm;          % path points
  numeric sl, sr, sm;          % scalar products of path/line directions
  numeric stpsize;             % size of current binary step
  numeric tantol;              % tolerance
  boolean wtest;               % a boolean

  tantol := eps;
%    \end{macrocode}
% Initialise using the left right and middle points on the path.
%    \begin{macrocode}
  pl:=0; pr:=length pth; pm:=0.5(pl+pr); stpsize:=pr-pl;
  ptl := point pl of pth;
  ptm := point pm of pth;
  ptr := point pr of pth;
%    \end{macrocode}
% Now the various vectors, and make sure they are unit vectors to
% have a consistent measure scale when we take the scalar products.
%    \begin{macrocode}
  vecll := unitvector (z$-ptl);
  veclm := unitvector (z$-ptm);
  veclr := unitvector (z$-ptr);
  vecpl := unitvector (direction pl of pth);
  vecpm := unitvector (direction pm of pth);
  vecpr := unitvector (direction pr of pth);
  sl := vecll scalarprod vecpl;
  sm := veclm scalarprod vecpm;
  sr := veclr scalarprod vecpr;
%    \end{macrocode}
% We stop if any of the points is the tangent point, or if the step
% size is too small, or if the signs of the left and right scalar
% products are the same.
%    \begin{macrocode}
  wtest := (stpsize < tantol) or (sl*sr > 0) or
           (abs sl < tantol) or (abs sm < tantol) or (abs sr < tantol);
  if wtest:
    if (stpsize < tantol):
      z$tan=(0,0);
      errmessage("No tangent; path too short");
    else:
      if (sl*sr > 0):
        z$tan=(0,0);
        errmessage("No tangent; end products have the same sign");
      else:
        if (abs sl < tantol):
          z$tan=ptl;
        else:
          if (abs sm < tantol):
            z$tan=ptm;
          else:
            z$tan=ptr;
          fi
        fi
      fi
    fi
  else:
%    \end{macrocode}
% There should be a tangent and we iterate to find it, using
% bisection. If there is one to be found it will be at the
% current middle point. The tangent point will be somewhere
% between the two points that lead to opposite signed scalar 
% products. 
%    \begin{macrocode}
    forever:
      if (sl*sm < 0):  % opposite signs, look between pl & pm
        pr:=pm; pm:=0.5(pr+pl);
        vecpr := vecpm; veclr := veclm; sr:=sm;
      else:
        pl:=pm; pm:=0.5(pr+pl);
        vecpl:=vecpm; vecll:=veclm; sl:=sm;
      fi
      stpsize:=pr-pl;
      ptm := point pm of pth;
      veclm := unitvector (z$-ptm);
      vecpm := unitvector (direction pm of pth);
      sm := veclm scalarprod vecpm;
%    \end{macrocode}
%  We stop the iteration if the step size is too small or the
% middle point is the tangent point. In either case, the
% middle point is the best guess that can be made.
%    \begin{macrocode}
      wtest := (stpsize < tantol) or (abs sm < tantol);
      if wtest:
        if (abs sm < tantol):
          z$tan = ptm;
        else:
          z$tan = ptm;
%%%%%%          errmessage("Warning: tangent approximated");
        fi
      fi
      exitif wtest;
    endfor
  fi
enddef;

%    \end{macrocode}
% \end{routine}
%
%
%    Set the mode and font setup.
%    \begin{macrocode}
 
font_coding_scheme:="ASCII minuscules and punctuation";
mode_setup; 
tgothic_font_setup;

%    \end{macrocode}
%
%
%    We generate letters, together with some punctuation and
% analphabetics.
%    \begin{macrocode}
 
input tgothl;        % lower case
input tgothu;        % capitals
input tgothpunct;    % punctuation
input tgothlig;      % the several dashes
input tgothdig;      % arabic digits

%    \end{macrocode}
%
% Set up the spacings, stretches and shrinks.
%
%    \begin{macrocode}
 
font_slant slant; font_x_height x_height#;
if monospace: 
  font_normal_space 2vstretch*stem_width#; % no stretching or shrinking
  font_quad vstretch*18u#;
  font_extra_space vstretch*9u#;
else: 
  font_normal_space 2vstretch*stem_width#+2letter_fit#;
  font_normal_stretch vstretch*3u#; font_normal_shrink vstretch*2u#;
  font_quad vstretch*18u#+4letter_fit#;
  font_extra_space vstretch*2u#;

%    \end{macrocode}
%
% Finally, do the ligtables, but I don't think they are needed (yet?).
%
%    \begin{macrocode}

fi

bye.

  k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of kerning
  kks#:=-4u#;  kkx#:=-1.5u#; kkj#:=-2u#; kkr#:=-5u#; kkrs#:=-2u#; kkrl#:=-8u#;
  ligtable "s":
                "a" kern kks#, "A" kern kks#,
                "c" kern kks#, "C" kern kks#,
                "d" kern kks#, "D" kern kks#,
                "e" kern kks#, "E" kern kks#,
                "f" kern kks#, "F" kern kks#,
                "g" kern kks#, "G" kern kks#,
                "i" kern kks#, "I" kern kks#,
                "j" kern kks#, "J" kern kks#,
                "k" kern kks#, "K" kern kks#,
                "m" kern kks#, "M" kern kks#,
                "n" kern kks#, "N" kern kks#,
                "o" kern kks#, "O" kern kks#,
                "p" kern kks#, "P" kern kks#,
                "q" kern kks#, "Q" kern kks#,
                "r" kern kks#, "R" kern kks#,
                "t" kern kks#, "T" kern kks#,
                "u" kern kks#, "U" kern kks#,
                "v" kern kks#, "V" kern kks#,
                "w" kern kks#, "W" kern kks#,
                "x" kern kks#, "X" kern kks#,
                "y" kern kks#, "Y" kern kks#,
                "z" kern kks#, "Z" kern kks#;

  ligtable "S":
                "a" kern kks#, "A" kern kks#,
                "c" kern kks#, "C" kern kks#,
                "d" kern kks#, "D" kern kks#,
                "e" kern kks#, "E" kern kks#,
                "f" kern kks#, "F" kern kks#,
                "g" kern kks#, "G" kern kks#,
                "i" kern kks#, "I" kern kks#,
                "j" kern kks#, "J" kern kks#,
                "k" kern kks#, "K" kern kks#,
                "m" kern kks#, "M" kern kks#,
                "n" kern kks#, "N" kern kks#,
                "o" kern kks#, "O" kern kks#,
                "p" kern kks#, "P" kern kks#,
                "q" kern kks#, "Q" kern kks#,
                "r" kern kks#, "R" kern kks#,
                "t" kern kks#, "T" kern kks#,
                "u" kern kks#, "U" kern kks#,
                "v" kern kks#, "V" kern kks#,
                "w" kern kks#, "W" kern kks#,
                "x" kern kks#, "X" kern kks#,
                "y" kern kks#, "Y" kern kks#,
                "z" kern kks#, "Z" kern kks#;

  ligtable "x": 
                "a" kern kkx#, "A" kern kkx#,
                "b" kern kkx#, "B" kern kkx#,
                "c" kern kkx#, "C" kern kkx#,
                "d" kern kkx#, "D" kern kkx#,
                "e" kern kkx#, "E" kern kkx#,
                "g" kern kkx#, "G" kern kkx#,
                "j" kern kkx#, "J" kern kkx#,
                "l" kern kkx#, "L" kern kkx#,
                "o" kern kkx#, "O" kern kkx#,
                "q" kern kkx#, "Q" kern kkx#,
                "t" kern kkx#, "T" kern kkx#,
                "u" kern kkx#, "U" kern kkx#,
                "v" kern kkx#, "V" kern kkx#,
                "w" kern kkx#, "W" kern kkx#,
                "y" kern kkx#, "Y" kern kkx#;

  ligtable "X": 
                "a" kern kkx#, "A" kern kkx#,
                "b" kern kkx#, "B" kern kkx#,
                "c" kern kkx#, "C" kern kkx#,
                "d" kern kkx#, "D" kern kkx#,
                "e" kern kkx#, "E" kern kkx#,
                "g" kern kkx#, "G" kern kkx#,
                "j" kern kkx#, "J" kern kkx#,
                "l" kern kkx#, "L" kern kkx#,
                "o" kern kkx#, "O" kern kkx#,
                "q" kern kkx#, "Q" kern kkx#,
                "t" kern kkx#, "T" kern kkx#,
                "u" kern kkx#, "U" kern kkx#,
                "v" kern kkx#, "V" kern kkx#,
                "w" kern kkx#, "W" kern kkx#,
                "y" kern kkx#, "Y" kern kkx#;

  ligtable "a": "A":
           "b": "B":
           "c": "C":
           "d": "D":
           "e": "E":
           "h": "H":
           "i": "I":
           "k": "K":
           "l": "L":
           "m": "M":
           "n": "N":
           "o": "O":
           "p": "P":
           "t": "T":
           "u": "U":
           "v": "V":
           "w": "W":
           "z": "Z":
           "j" kern kkj#, "J" kern kkj#;

  ligtable "r":
                "a" kern kkr#, "A" kern kkr#,
                "b" kern kkr#, "B" kern kkr#,
                "c" kern kkr#, "C" kern kkr#,
                "d" kern kkr#, "D" kern kkr#,
                "e" kern kkr#, "E" kern kkr#,
                "f" kern kkrs#, "F" kern kkrs#,
                "g" kern kkrs#, "G" kern kkrs#,
                "h" kern kkr#, "H" kern kkr#,
                "i" kern kkr#, "I" kern kkr#,
                "j" kern kkj#, "J" kern kkj#,
                "k" kern kkrs#, "K" kern kkrs#,
                "l" kern kkr#, "L" kern kkr#,
                "m" kern kkr#, "M" kern kkr#,
                "n" kern kkrs#, "N" kern kkrs#,
                "o" kern kkr#, "O" kern kkr#,
                "p" kern kkrs#, "P" kern kkrs#,
                "q" kern kkr#, "Q" kern kkr#,
                "r" kern kkrs#, "R" kern kkrs#,
                "s" kern kkr#, "S" kern kkr#,
                "t" kern kkr#, "T" kern kkr#,
                "u" kern kkr#, "U" kern kkr#,
                "v" kern kkr#, "V" kern kkr#,
                "w" kern kkr#, "W" kern kkr#,
                "x" kern kkx#, "X" kern kkx#,
                "y" kern kkr#, "Y" kern kkr#,
                "z" kern kkr#, "Z" kern kkr#;

  ligtable "R":
                "a" kern kkr#, "A" kern kkr#,
                "b" kern kkr#, "B" kern kkr#,
                "c" kern kkr#, "C" kern kkr#,
                "d" kern kkr#, "D" kern kkr#,
                "e" kern kkr#, "E" kern kkr#,
                "f" kern kkrs#, "F" kern kkrs#,
                "g" kern kkrs#, "G" kern kkrs#,
                "h" kern kkr#, "H" kern kkr#,
                "i" kern kkr#, "I" kern kkr#,
                "j" kern kkj#, "J" kern kkj#,
                "k" kern kkrs#, "K" kern kkrs#,
                "l" kern kkr#, "L" kern kkr#,
                "m" kern kkr#, "M" kern kkr#,
                "n" kern kkrs#, "N" kern kkrs#,
                "o" kern kkr#, "O" kern kkr#,
                "p" kern kkrs#, "P" kern kkrs#,
                "q" kern kkr#, "Q" kern kkr#,
                "r" kern kkrs#, "R" kern kkrs#,
                "s" kern kkr#, "S" kern kkr#,
                "t" kern kkr#, "T" kern kkr#,
                "u" kern kkr#, "U" kern kkr#,
                "v" kern kkr#, "V" kern kkr#,
                "w" kern kkr#, "W" kern kkr#,
                "x" kern kkx#, "X" kern kkx#,
                "y" kern kkr#, "Y" kern kkr#,
                "z" kern kkr#, "Z" kern kkr#;


fi

bye.

%</mfd>
%    \end{macrocode}
%
% \subsection{The code for normal letters}
%
%    The following code is for the lower case characters.
%
%    \begin{macrocode}
%<*min>
% TGOTHL.MF Program file for Gothic Textura Quadrata lower case
%

%    \end{macrocode}
%
%
% \begin{routine}{a}
% The letter `a'.
%    \begin{macrocode}
cmchar "TGOTH letter a";
beginchar("a", 2sb#+hstretch*((3+widedmin+wided)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
path pth[];
pair pr[];
pickup quill;
%% left hand
lft x1 = pcshiftx + widedmin*stem_width; y1 = 1/2h;
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);
%% right stem
rt x3 = w - pcshiftx - wided*stem_width; y3=h;
x4=x3; y4=0;
z34=1/2[z3,z4];
draw_updiamondstem(3,34,1.0,0.1,diawd,diang);
draw_downdiamondstem(34,4,wided,widedmin,diawd,diang);
%% swirl
x11=rt x1; y11 = top y1;
pickup stylus;
draw z3d--z3c..{-ppdir}z11;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,11,12,13,14,15,100);
endchar; % end "a"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{b}
% The letter `b'. 
%    \begin{macrocode}
cmchar "TGOTH letter b";
beginchar("b", 2sb#+hstretch*((3 + widedmin + narrowdmin)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := sb;
pickup quill;
n1:=w-2pcshiftx;    % actual letter width
n2:=h/ascratio;    % top of bowl
%%ductus:=true;
lft x1 = pcshiftx + widedmin*st; y1=h;
x2 = x1; y2=0;
z3=1/2[z1,z2];
draw_upforkstem(1,3);
draw_downdiamondstem(3,2,1.0,widedmin,diawd,diang);
lft x6 = x2c; bot y6 = y2c;
x4 = x6; y4=n2;
draw_updiamondstem(4,6,narrowd,narrowdmin,diawd,diang);
x7 = x1; z7 = whatever[z4d,z4c];
pickup stylus;
draw z4d--z7;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,100);
endchar; % end "b"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{c}
% The letter `c'.
%    \begin{macrocode}
cmchar "TGOTH letter c";
beginchar("c", 2sb#+hstretch*((3+wided)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st;
st := stem_width;
pcshiftx := sb;
pickup quill;
%% left
lft x1 = pcshiftx+wided*st; y1 = 3/4h;
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);
%% top
lft x3 = rt x1; bot y3 = top y1;
rt x4 = w - pcshiftx;
z3 - z4 = -whatever*ppdir;
draw z3--z4;
z11-z2c = z2c - z2d;
pickup stylus;
draw z2d--z11;
ductus:=false;
penlabels(1,2,3,4,5,6,14,16,17,18,100);
endchar; % end "c"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{d}
% The letter `d'. 
%    \begin{macrocode}
cmchar "TGOTH letter d";
beginchar("d", 2sb#+hstretch*((3+widedmin+narrowdmin)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := sb;
pickup quill;
n1 = h/ascratio;    %  x-height
%% left
n2 := st*(cosd diang);
lft x1 = pcshiftx + widedmin*st; top y1 = 12/16n1;
x2=x1; y2=0;
draw_downdiamondstem(1,2, 1.0, widedmin, diawd,diang);
%% right
rt x3 = w-pcshiftx-narrowdmin*st; y3=h;
x4 = x3; bot y4 = y2c;
draw_updiamondstem(3,4, 2.0, narrowdmin, diawd,diang);
x31 = lft x1; y31 = bot y1;
x32 = rt x1; y32 = top y1;
z33 = whatever[z31,z32] = whatever[z3e,z3c];
pickup stylus;
draw z31--z33;
ductus:=false;
penlabels(0,1,2,3,4,5,6,7,8,100);
endchar; % end "d"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{e}
% The letter `e'.
%    \begin{macrocode}
cmchar "TGOTH letter e";
beginchar("e", 2sb#+hstretch*((3+wided)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st;
st := stem_width;
path pth[];
pickup quill;
%% left
lft x1 = pcshiftx+wided*st; y1 = 3/4h;
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);
%% top
lft x3 = rt x1; bot y3 = top y1;
rt x4 = w - pcshiftx;
z3 - z4 = -whatever*ppdir;
draw z3--z4;
x5 = x1;
z4-z5 = whatever*pdir;
pickup stylus;
draw z4--z5;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,17,27,34,70,100);
endchar; % end "e"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{f}
% The letter `f'. 
%    \begin{macrocode}
cmchar "TGOTH letter f";
beginchar("f", 2sb#+hstretch*((3+widedmin)*stem_width#), 
               (asc_height#), 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
pcshiftx := sb;
pickup quill;
n1 := h/ascratio;      % x-height
%% stem
lft x1=lft x2=pcshiftx+widedmin*st; y2=0; top y1 = h - (top y2 - bot y2);
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);
%% top bar
lft x3 = rt x1; rt x5 = w-pcshiftx; bot y3 = top y1; y5=y3;
draw z3--z5;
%% middle bar
lft x7 = pcshiftx; rt x9 = x5;
y7 = y9 = 10/16h;
draw z7--z9; 
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,14,15,16,100);
endchar; % end "f"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{g}
% The letter `g'. 
%    \begin{macrocode}
cmchar "TGOTH letter g";
beginchar("g", 2sb#+hstretch*((4)*stem_width#), 
               x_height#, desc_depth#);
adjust_fit(0,0);
path pth[];
pair vec[];
numeric n[];
numeric st; st := stem_width;
pcshiftx := sb;
pickup quill;
%% left
lft x1 = pcshiftx;
x2 = x1; bot y2 = 0; top y1 = h - (top y2 - bot y2);
draw z1--z2;
x3 = x4 = x1 + 2st; y4 = y2;
lft x13 = rt x1; bot y13 = top y1;
(z3-z13) = whatever*(dir -diang);
draw z13--z3--z4;
z34 = 1/2[z13,z3]; rt x37 = w-pcshiftx; top y37 = h;
draw z34{right}..{pdir}z37;
pickup stylus;
bot y5 = -d;
(z4-z5) = whatever*pdir;
draw z4--z5;
pickup quill;
%% bottom loop
z21 = z2;
lft x25 = x5; bot y25=-d;
x29 = 1/2[x3,x37];
(z29-z21) = whatever*(dir -diang);
x23 = x29; y23 = 1/2[y29,y25];
draw z21{dir - diang}..z23{down}..{left}z25;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,12,13,31,32,33,34,35,36,100);
endchar; % end "g"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{h}
% The letter `h'.
%    \begin{macrocode}
cmchar "TGOTH letter h";
beginchar("h", 2sb#+hstretch*((3 + narrowd + narrowdmin)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
numeric n[];
n1 = h/ascratio;
%% stem
lft x1=lft x2=pcshiftx + narrowdmin*stem_width;
y1=h; y2=0;
z12 = 1/2[z1,z2];
draw_upforkstem(1,12);
draw_downdiamondstem(12,2,narrowd,narrowdmin,diawd,diang);
%% bowl
x3 = x1 + 2stem_width; x4 = x3;
y3 = n1; y4=0;
z34 = 1/2[z3,z4];
draw_updiamondstem(3,34,narrowd,narrowdmin,diawd,diang);
draw_downdiamondstem(34,4,narrowd,narrowdmin,diawd,diang);
x7 = x1; z7 = whatever[z3d,z3c];
pickup stylus;
draw z3d--z7;
penlabels(1,2,3,4,5,6,100);
endchar; % end "h"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{i}
% The letter `i'.
%    \begin{macrocode}
cmchar "TGOTH letter i";
beginchar("i", 2sb#+hstretch*(2stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
x1 = x2 = 1/2w; y1 = h; y2 = 0;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,1/2,1/2,diawd,diang);
draw_downdiamondstem(12,2,1/2,1/2,diawd,diang);
x3= x1-thin; bot y3 = h + 1/2stem_width;
z4 = (x3+3thin,y3);
pickup halfquill;
draw z3--z4;
penlabels(1,2,100);
endchar; % end "i"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{j}
% The letter `j'. This letter was not in the script, it being a later invention.
%    \begin{macrocode}
cmchar "TGOTH letter j";
beginchar("j", sb#+hstretch*(5/2stem_width#), 
               x_height#, desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% stem
rt x1 = w-pcshiftx - 1/2stem_width; y1 = h;
x2=x1; y2=-1/2d;
%% bottom hook
lft x3 = pcshiftx; bot y3 = -d;
draw_updiamondstem(1,2,narrowd,narrowdmin,diawd,diang);
draw z2{down}..z3{-pdir};               % hook
ductus:=false;
penlabels(1,2,3,100);
endchar; % end "j"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{k}
% The letter `k'.
%    \begin{macrocode}
cmchar "TGOTH letter k";
beginchar("k", 2sb#+hstretch*((3 + narrowd + narrowdmin)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
path pth[];
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
n1 = h/ascratio;                 % x-height
lft x1=lft x2=pcshiftx + narrowdmin*st;
y1=h; y2=0;
z12 = 1/2[z1,z2];
draw_upforkstem(1,12);
draw_downdiamondstem(12,2, narrowd, narrowdmin, diawd,diang);
%% right leg
x3 = x1 + 2st; y3 = 8/16n1;
x4 = x3; y4 = 0;
z34 = 1/2[z3,z4];
draw_downdiamondstem(34,4, narrowd, narrowdmin, diawd,diang);
draw z3--z34;
lft x5 = rt x1;
(z3-z5) = whatever*(dir -diang);
draw z5--z3;

%% top arm
x6 = 1/2[x3, rt x3];
(z6-z5) = whatever*(pdir);
rt x8 = lft x5; top y8 = bot y5+thick;
(z7-z8) = whatever*(z6-z5);
(z7-z6)=whatver*(z5-z3);
draw z6--z7;
pickup stylus;
draw z5--z6--z7--z8;

ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,13,14,100);
endchar; % end "k"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{l}
% The letter `l'. 
%    \begin{macrocode}
cmchar "TGOTH letter l";
beginchar("l", 2sb#+hstretch*((2 + widedmin)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
numeric st; st := stem_width;
pcshiftx := sb;
pickup quill;
lft x1=pcshiftx + widedmin*st; y1=h;
x2=x1; y2 =0;
z3 = 1/2[z1,z2];
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_upforkstem(1,3);
draw_downdiamondstem(3,2,1.0,widedmin,diawd,diang);
ductus:=false;
penlabels(1,2,3,4,100);
endchar; % end "l"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{m}
% The letter `m'. 
%    \begin{macrocode}
cmchar "TGOTH letter m";
beginchar("m", 2sb#+hstretch*((5+wided+narrowd)*stem_width#),   
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
path pth[];
pickup quill;
%% left stem
lft x1=pcshiftx+wided*stem_width; y1 = y3 = y5 = h;
x2=x1; y2=y4=y6=0;
z12=1/2[z1,z2];
draw_updiamondstem(1,12,wided,widedmin,diawd,diang);
draw_downdiamondstem(12,2,narrowd,narrowdmin,diawd,diang);
%% right stem
rt x5 = rt x6 = w-pcshiftx-narrowd*stem_width;
z56 = 1/2[z5,z6];
draw_updiamondstem(5,56,wided,widedmin,diawd,diang);
draw_downdiamondstem(56,6,narrowd,narrowdmin,diawd,diang);
%% middle stem
z3=1/2[z1,z5]; z4 = 1/2[z2,z6]; z34=1/2[z3,z4];
draw_updiamondstem(3,34,wided,widedmin,diawd,diang);
draw_downdiamondstem(34,4,narrowd,narrowdmin,diawd,diang);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,13,14,33,34,100);
endchar; % end "m"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{n}
% The letter `n'. 
%    \begin{macrocode}
cmchar "TGOTH letter n";
beginchar("n", 2sb#+hstretch*((3+wided+narrowd)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% left stem
lft x1 = pcshiftx + wided*stem_width; y1 = h;
x2 = x1; y2 = 0;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,wided,widedmin,diawd,diang);
draw_downdiamondstem(12,2,narrowd,narrowdmin,diawd,diang);
%% right stem
rt x3 = w-pcshiftx - narrowd*stem_width; y3=y1;
x4=x3;y4=y2;
z34=1/2[z3,z4];
draw_updiamondstem(3,34,wided,widedmin,diawd,diang);
draw_downdiamondstem(34,4,narrowd,narrowdmin,diawd,diang);
penlabels(1,2,3,4,5,6,13,14,100);
endchar; % end "n"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{o}
% The letter `o'.
%    \begin{macrocode}
cmchar "TGOTH letter o";
beginchar("o", 2sb#+hstretch*((3 + narrowdmin + narrowdmin)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[]; 
numeric st; st := stem_width;
pickup quill;
%% bottom left
lft x12 = pcshiftx + narrowdmin*st; y12 = 1/2h;
x2 = x12; y2 = 0;
draw_downdiamondstem(12,2, 1.0, narrowdmin, diawd,diang);
%% right
rt x3 = w - pcshiftx - narrowdmin*st; x4=x3;
y3 = h; bot y4 = y2c;
draw_updiamondstem(3,4, 1.0, narrowdmin, diawd,diang);
%% top left
x1 = x12; top y1 = y3c;
draw z1--z12;
ductus:=false;
penlabels(1,2,3,4,5,100);
endchar; % end "o"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{p}
% The letter `p'.
%    \begin{macrocode}
cmchar "TGOTH letter p";
beginchar("p", 2sb#+hstretch*((3 + wided + widedmin)*stem_width#), 
               x_height#, desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+wided*st;
y1=h; y2=-d;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,wided,widedmin,diawd,diang);
draw_downforkstem(12,2);
%% bowl
x3 = x4 = x1 + 2st;
y3 = y1; bot y4 = 0;
draw_updiamondstem(3,4,wided,widedmin,diawd,diang);
lft x5 = pcshiftx; y5 = y4;
draw z5--z4;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,100);
endchar; % end "p"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{q}
% The letter `q'. 
%    \begin{macrocode}
cmchar "TGOTH letter q";
beginchar("q", 2sb#+hstretch*((3 + widedmin)*stem_width#), 
               x_height#, desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% left/bottom of bowl
y99 = 0;
lft x1 = pcshiftx +widedmin*st; top y1 = h - (top y99 - bot y99);
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2, 1.0, widedmin,diawd,diang);
%% rest
x3 = x1 + 2st; x4 = x3; y3 = y1; y4 = -d;
lft x5 = rt x1; bot y5 = top y1;
draw_downforkstem(3,4);
draw z5--z3;
ductus:=false;
penlabels(0,1,2,3,4,5,6,7,8,100);
endchar; % end "q"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{r}
% The letter `r'.
%    \begin{macrocode}
cmchar "TGOTH letter r";
beginchar("r", 2sb#+hstretch*((3+wided)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
lft x1=lft x2=pcshiftx + wided*st;
y1=h; y2=0;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,wided,widedmin,diawd,diang);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
%% bar
lft x3 = rt x1; rt x4 = w-pcshiftx; top y3 = top y4 = h;
draw z3--z4;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,100);
endchar; % end "r"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{s}
% The letter `s'. This is a short S.
%    \begin{macrocode}
cmchar "TGOTH letter s";
beginchar("s", 2sb#+hstretch*((4)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
pcshiftx := sb;
pickup stylus;
%% the diagonal
lft x2 = pcshiftx; bot y2 = 0;
rt x1 = w-pcshiftx; top y1 = h;
draw z1--z2;
pickup quill;
z211 = 13/32[z2,z1];   %% 10/32 too small, 16/32 too large
z213 = 24/32[z2,z1];   %% 26/32 too large
z212 = 1/2[z211,z213];
%% bottom bowl
lft x21 = x2; bot y21 = 0;
rt x22 = w - pcshiftx; bot y22 = 0;
x23 = x22; z24 = z212;
(z24-z23) = whatever*(dir (180-diang));
draw z21{pdir}..z22--z23--z24;
%% top bowl
z14 = z211; z11 = z213;
lft x12 = lft x13 = pcshiftx;
(z13-z14) = whatever*(dir (180-diang));
(z12-z11) = whatever*(dir (180-diang));
draw z11--z12--z13--z14;
ductus:=false;
penlabels(1,2,3,4,5,6,7,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,100);
endchar; % end "s"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{t}
% The letter `t'.
%    \begin{macrocode}
cmchar "TGOTH letter t";
beginchar("t", 2sb#+hstretch*((2+1.0)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% bar
lft x3 = pcshiftx; top y1 = h;
top y3 = bot y1;
rt x4 = w-pcshiftx; y4=y3;
draw z3--z4;
%% stem
lft x1 = rt x3;
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);
ductus:=false;
penlabels(1,2,3,4,5,6,11,12,100);
endchar; % end "t"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{u}
% The letter `u'. 
%    \begin{macrocode}
cmchar "TGOTH letter u";
beginchar("u", 2sb#+hstretch*((3+narrowd+wided)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% left stem
lft x1 = pcshiftx + narrowd*stem_width; y1 = h;
x2 = x1; y2 = 0;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,narrowd,narrowdmin,diawd,diang);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
rt x3 = w - pcshiftx - wided*stem_width; y3=y1;
x4=x3;y4=y2;
z34=1/2[z3,z4];
draw_updiamondstem(3,34,narrowd,narrowdmin,diawd,diang);
draw_downdiamondstem(34,4,wided,widedmin,diawd,diang);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,13,14,16,33,100);
endchar; % end "u"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{v}
% The letter `v'. 
%    \begin{macrocode}
cmchar "TGOTH letter v";
beginchar("v", 2sb#+hstretch*((4 + narrowdmin)*stem_width#),   
               asc_height#, 0);
adjust_fit(0,0);
numeric n[]; numeric st;
pcshiftx := sb;
st := stem_width;
n1 := h/ascratio;  % x-height
pickup quill;
%% bottom left stem
%% right and bottom left stems
rt x23 = w - pcshiftx - narrowdmin*st; y23 = n1; x24=x23;
x1 = x23 - 2st; y1 = 1/2n1;
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2, 1.0, widedmin, diawd, diang);
bot y24 = y2c;
draw_updiamondstem(23, 24, narrowd, narrowdmin, diawd, diang);
%% curly bit
x11=x1; top y11 = h;
lft x12 = pcshiftx; y12 = 1/2[y11,y1];
draw z11{down}..z12{down}..{down}z1;
ductus:=false;
penlabels(1,2,3,4,5,11,13,14,23,26,100);
endchar; % end "v"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{w}
% The letter `w'. This is a modern version as the font did not have a W.
%    \begin{macrocode}
cmchar "TGOTH letter w";
beginchar("w", 2sb#+hstretch*((5+wided+narrowd)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
%% left stem
lft x1 = pcshiftx + narrowd*stem_width; y1 = y3 = y5 = h;
x2 = x1; y2 = y4 = y6 = 0;
z12=1/2[z1,z2];
draw_updiamondstem(1,12, narrowd, narrowdmin, diawd, diang);
draw_downdiamondstem(12,2, wided, widedmin, diawd, diang);
%% right stem
rt x5 = w -pcshiftx-wided*stem_width; x6 = x5;
z56 = 1/2[z5,z6];
draw_updiamondstem(5,56, narrowd, narrowdmin, diawd, diang);
draw_downdiamondstem(56,6, wided, widedmin, diawd, diang);
%% middle stem
z3 = 1/2[z1,z5]; z4 = 1/2[z2,z6]; z34 = 1/2[z3,z4];
draw_updiamondstem(3,34, narrowd, narrowdmin, diawd, diang);
draw_downdiamondstem(34,4, wided, widedmin, diawd, diang);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,13,14,33,34,53,16,100);
endchar; % end "w"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{x}
% The letter `x'.
%    \begin{macrocode}
cmchar "TGOTH letter x";
beginchar("x", 2sb#+hstretch*((4)*stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
path pth[];
numeric n[];
numeric st; st := stem_width;
pcshiftx := sb;
pickup quill;
%% upright
x1 = 1/2w; y1 = h;
x2 = x1; y2 = 0;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12, 1.5, widedmin,diawd,2/3diang);
draw_downdiamondstem(12,2, 1.5, widedmin,diawd,2/3diang);
%% top right bar
lft x3 = rt x1; top y3 = h;
rt x4 = w - pcshiftx; y4=y3;
draw z3--z4;
%% middle bar
n1 := h-y3;
lft x5 = pcshiftx; rt x6 = w - pcshiftx;
y5 = 1/2h - n1; y6 = 1/2h;
z56 = 1/2[z5,z6];
draw z5{pdir}..z56..{pdir}z6;
%% bottom left
pickup stylus;
lft x11 = pcshiftx; bot y11 = 0;
draw z2e--z11;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,10,25,251,252,40,50,150,60,160,100);
endchar; % end "x"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{y}
% The letter `y'. Modern, but with a dot on top.
%    \begin{macrocode}
cmchar "TGOTH letter y";
beginchar("y", 2sb#+hstretch*((3 + narrowd+ narrowdmin)*stem_width#), 
               x_height#, desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
path pth[];
numeric n[];
numeric st; st = stem_width;
pickup quill;
%% right side
rt x3 = w - pcshiftx - narrowdmin*st; y3 = h;
x33 = x3; y33 = 0;
%%draw_updiamondstem(3,4,narrowd,narrowdmin, diawd,diang);
%% left side
x1 = x3 - 2st; y1 = y3;
x2 = x1; y2 = 0;
n1 := top y2 - y2;
draw_updiamondstem(1,2,narrowd,narrowdmin, diawd,diang);
%% tail
x11 = rt x2; y11 = top y2;
x12 = lft x2; y12 = bot y2;
pickup stylus;
lft x14 = x1 - 2st; y14 = -d + n1;
x15 = x14+n1; bot y15 = -d;
z4 = whatever[z11,z12] = whatever[z3,z33];
x10=x4; bot y10 = y4;
draw z10--z11--z12..{down}z14..{-ppdir}z15;
pickup quill;
draw_updiamondstem(3,4,narrowd,narrowdmin, diawd,diang);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,10,11,12,14,15,33,100);
endchar; % end "y"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{z}
% The letter `z'.
%    \begin{macrocode}
cmchar "TGOTH letter z";
beginchar("z", 2sb#+hstretch*(3stem_width#), 
               x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := sb;
pickup quill;
%% top bar ends
top y12 = h;
n1 := h - y12;
lft x1 = pcshiftx; rt x2 = w-pcshiftx;
%%y1 = y12-n1; y2=y12+n1;
y1 = y12-n1/2; y2=y12;
x12 = 1/2[x1,x2];
pth1 := z1{pdir}..z12{right}..z2{pdir};
%% bottom bar ends
bot y34 = 0;
x3=x1; x4=x2;
%%y3=y34-n1; y4=y34+n1;
y3=y34-n1/2; y4=y34;
x34 = 1/2[x3,x4];
pth2 := z3{pdir}..z34{right}..z4{pdir};
%% centre bar
z5 = 1/2[z1,z3]; z6 = 1/2[z2,z4]; z56 = 1/2[z5,z6];
pth3 := z5{pdir}..z56{right}..z6{pdir};
draw pth1; draw pth2; draw pth3;              %  bars
draw z2--z3;
ductus:=false;
penlabels(1,2,3,4,5,6,10o,10i,20o,20i,100);
endchar; % end "z"

%    \end{macrocode}
% \end{routine}
%
%
%    The end of this file
%    \begin{macrocode} 
%</min>
%    \end{macrocode}
%
%
% \subsection{The code for capital letters}
%
%    \thisfont{} `capitals' were drawn with the same pen as for the minuscules.
% The letters are pretty fancy.
%
%    \begin{macrocode}
%<*maj>
% TGOTHU.MF Program file for Early Gothic `capitals'
%

%    \end{macrocode}
%
%
% \begin{routine}{A}
% The letter `A'.
%    \begin{macrocode}
cmchar "TGOTH letter A";
beginchar("A", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric n[];
numeric st; st := stem_width;
path pth[];
pair pr[];
pickup quill;
%% stem
rt x1 = w - pcshiftx - wided*st; y1 = h;
x2 = x1; y2 = 0;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
%% leg
x21 = x1; top y21 = h;
lft x22 = pcshiftx + widedmin*st; bot y22 = 0;
draw z21--z22;
draw (x22-widedmin*st, y22)--(x22+wided*st, y22);
%% bar
z13 = z12;
y16 = y13; z16 = whatever[z21,z22];
x14 = 1/2[x13,x16]; (z13-z14) = whatever*pdir;
pickup threequarterquill;
draw z13--z14;
draw z14{ppdir}..{left}z16;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,11,12,13,14,15,100);
endchar; % end "A"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{B}
% The letter `B'. 
%    \begin{macrocode}
cmchar "TGOTH letter B";
beginchar("B", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% stem
lft x1 = pcshiftx; bot y1 = 0;
n1 := top y1;
lft x99 = 2/5w; bot y99 = 12/16h;
rt x12 = lft x99; top y12 = bot y99;
x14 = x1; y14 = y12;
x13 = 1/2[x14,x12]; y13 = 1/2[y12,(h-n1/2)];
pth1 := z1{pdir}..z12..{left}z13..{-pdir}z14;
%% stem decoration
z101=z99;
z181 = (x99,-h);
z102 = (x101,y1);
z112 = 1/2[z101,z102];
lft x8 = x112; y8 = y112;
%% lower bowl
x113 = w-pcshiftx;
(z113-z112) = whatever*(pdir);
rt x5 = w-pcshiftx; y5 = 6/16y113;
x3 = 10/16[x1,x5]; y3 = y1;
z7 = 2/16[z8,z113];
pth2 := z1{pdir}..{right}z3..{up}z5..{-pdir}z7--z8;

%% upper bowl
x10 = 1/2[x7,x5]; y10 = 1/2[y12,y99]; 
x19 = 1/2[x99,x10]; top y19 = h;
pth3 := z8--z7{pdir}..{up}z10..{left}z19..{-pdir}z99;
%% angled decoration

z105 = 1/4[z102,z112];
x185 = 2w;
(z185-z105) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth2;

z107 = 1/4[z112,z101];
x187 = 2w;
(z187-z107) = whatever*(pdir);
z108 = (z107--z187) intersectionpoint pth3;

if ductus:
  pickup stylus;
fi
draw pth1;
draw pth2;
draw pth3;
pickup stylus;
draw z101--z102; 
draw z105--z106; draw z107--z108; 

ductus:=false;
penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,99,100);
endchar; % end "B"


%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{C}
% The letter `C'.
%    \begin{macrocode}
cmchar "TGOTH letter C";
beginchar("C", 2cap_sb#+hstretch*((5)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% bowl
n1:=w-2pcshiftx;     % actual letter width
n2:=6/5w-2pcshiftx;  % width of full bowl
x1=pcshiftx + 1/2n1; top y1 = h;
lft x2 = pcshiftx; y2 = 1/2h;
x3 = x1; bot y3 = 0;
rt x4 = w-pcshiftx; y4 = 1/4h;
x24 = x4; y24 = 3/4h;
pth1 := z24..z1{left}..z2{down}..z3{right}..z4{pdir};
%% decoration
z101 = (x1,y1); z102 = (x1,y3);
z103 = (x1+perpdec, y1); z104 = (x103,y102+thin);
z105 = 1/2[z101,z102]; z107 = (x105,y105+angdec);
x185 = -w; (z105-z185) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth1;
x187 = -w; (z107-z187) = whatever*(pdir);
z108 = (z107--z187) intersectionpoint pth1;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;      %% bowl
pickup stylus;
draw z101--z102; draw z103--z104;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,14,16,17,18,100,101,102,103,104,105,106,107,108,185);
endchar; % end "C"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{D}
% The letter `D'. 
%    \begin{macrocode}
cmchar "TGOTH letter D";
beginchar("D", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% bowl
lft x1 = pcshiftx; bot y1 = 0;
rt x5 = w-pcshiftx; y5 = 1/2h;
x3 = 10/16[x1,x5]; y3 = y1;
x7 = x3; top y7 = h;
lft x9 = 2/5w; bot y9 = 12/16h;
pth1 := z1{pdir}..{right}z3..{up}z5..{left}z7..{-pdir}z9;
%% stem
rt x12 = lft x9; top y12 = bot y9;
x14 = x1; y14 = y12;
x13 = 1/2[x14,x12]; y13 = 1/2[y12,y7];
pth2 := z1{pdir}..z12..{left}z13..{-pdir}z14;
%% vertical decoration
z101=z9;
z181 = (x9,-h);
z102 = ((x101,h/2)--z181) intersectionpoint pth1;
z103a=(x101+perpdec,h); z103b=(x103a,h/2); z103c=(x103a,-h);
z103 = (z103a--z103b) intersectionpoint pth1;
z104 = (z103b--z103c) intersectionpoint pth1;
%% angled decoration
z106 = (lft x5, y5);
x105 = x103; (z106-z105) = whatever*(pdir);
z107 = (x105, y105+angdec);
x108a = 2w; (z108a-z107) = whatever*(pdir);
z108 = (z108a--z107) intersectionpoint pth1;
if ductus:
  pickup stylus;
fi
draw pth1;
draw pth2;
pickup stylus;
draw z101--z102; draw z103--z104;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,100);
endchar; % end "D"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{E}
% The letter `E'.
%    \begin{macrocode}
cmchar "TGOTH letter E";
beginchar("E", 2cap_sb#+hstretch*((6)*stem_width#),   %% (5) too small
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% bowl
n1:=w-2pcshiftx;     % actual letter width
n2:=6/5w-2pcshiftx;  % width of full bowl
x1=pcshiftx + 1/2n1; top y1 = h;
lft x2 = pcshiftx; y2 = 1/2h;
x3 = x1; bot y3 = 0;
rt x4 = w-pcshiftx; y4 = 1/4h;
x24 = x4; y24 = 3/4h;
pth1 := z24..z1{left}..z2{down}..z3{right}..z4{pdir};
%% decoration
z101 = (x1,y1); z102 = (x1,y3);
z103 = (x1+perpdec, y1); z104 = (x103,y102+thin);
z105 = 1/2[z101,z102]; z107 = (x105,y105+angdec);
x185 = -w; (z105-z185) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth1;
x187 = -w; (z107-z187) = whatever*(pdir);
z108 = (z107--z187) intersectionpoint pth1;
%% bar
lft x31 = x103; top y31 = y105;
rt x32 = w-pcshiftx; y32=y31;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;      %% bowl
draw z31--z32;  %% bar
pickup stylus;
draw z101--z102; draw z103--z104;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,14,16,17,18,100,105,185,106);
endchar; % end "E"


%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{F}
% The letter `F'. 
%    \begin{macrocode}
cmchar "TGOTH letter F";
beginchar("F", 2cap_sb#+hstretch*((5)*stem_width#), 
               5/4caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% stem (1--2) and top bar (21--22)
lft x1=lft x2=pcshiftx+widedmin*st; y2 = 0;
top y21 = top y22 = h - (top y2 - bot y2); x22 = w-pcshiftx-st;
lft x21 = rt x1; top y1 = bot y21;
z12 = 1/3[z1,z2];
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
draw z1--z12;
draw z21--z22;
%% vertical decoration
z102 = 2/3[z2b,z2c];
x101 = x102; y101 = y21;
%% bar
lft x14 = x101; y14 = y12;
rt x16 = w-pcshiftx; y16 = y14;
draw z14--z16;
z16tr = (rt x16, top y16);
pickup stylus;
draw z101--z102;
%% Other decoration
%% bottom bar
rt x201 = x16tr; top y201 = y16tr;
y202 = y201 - 2st; (z201-z202) = whatever*pdir;
draw z201--z202;
%% top bar
pickup quill;
z22tb = (rt x22, top y22);
x22bb - x22 = x22 - x22tb; y22bb - y22 = y22 - y22tb;
x22c = x22 + st; bot y22c = top y22 + 1/2st;
x22f = x22; y22f = 1/3[y22c, y22];
pickup stylus;
x22br = x22bb; bot y22br = y22bb;
pth3 := z22br--z22tb..{up}z22c..{-ppdir}z22f;
draw pth3;

penlabels(1,2,3,4,5,6,7,14,15,16,21,22,100);
endchar; % end "F"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{G}
% The letter `G'. 
%    \begin{macrocode}
cmchar "TGOTH letter G";
beginchar("G", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric n[];
numeric st; st := stem_width;
path pth[];
pickup quill;
%% bar
top y3=h; n3 := h - top y3;
lft x1 = pcshiftx; rt x2=w-pcshiftx;
y1 = y3-n3; y2=y3;
x3=1/2[x1,x2];
pth1 := z1{pdir}..z3..z2{pdir};
%% bowl
n1 := w;     % width of bowl
n2 := h;     % height of bowl
lft x4 = pcshiftx; y4 = 1/2h;
x5=x3; bot y5 = 0;
rt x6 = w-pcshiftx; y6 = 6/16h;
%% decoration
x101 = lft x3; y101=y3;
x181 = x101; y181=-h/4; z191 = 1/2[z101,z181];
z102=(x101,y5);
z103 = (x101+3thin, y101); z104 = (x103,y102);
lft x7 = x104; y7 = 10/16[y104,y103];
%%pth2 := z3..z4{down}..z5{right}..z6{up}..{-pdir}z7;
%%pth2 := z2{-pdir}..z3..z4{down}..z5{right}..z6{up}..{-pdir}z7;
pth2 := z2--z3..z4{down}..z5{right}..z6{up}..{-pdir}z7;
z105 = (x104,y104+4thin); z107=(x105,y105+3thin);
x185 = 2w; (z185-z105) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth2;
z108 = (x106,y106+3thin);
%% fork
z2tr = (rt x2, top y2);
x2a = x2tr; y2a = y2tr + thin;
x2b = x2a; y2b - y2 = y2 - y2a;
x2d = x2 - thick; y2d = y2;
pickup stylus;
% finish off the fork
x2c = x2d = x2e;
top y2e = y2tr; y2c - y2d = y2d - y2e;
%%filldraw z2d--z2c{right}..z2b--cycle;
%%filldraw z2d--z2a..{left}z2e--cycle;
filldraw z2e--z2c{right}..z2b--cycle;
filldraw z2c--z2a..{left}z2e--cycle;
pth9 := (rt x2a,y2a)--(rt x2b,y2b)--(rt x2d,y2d)--cycle;
unfill pth9;
unfill pth9;
unfill pth9;
draw z101--z102; draw z103--z104;
draw z105--z106; draw z107--z108;
pickup quill;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
%%draw pth1;             %% bar
draw pth2;             %% bowl
ductus:=false;
penlabels(1,2,2a,2b,2c,2d,2e,3,4,5,6,11,12,100,101,102,103,104,181,191);
endchar; % end "G"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{H}
% The letter `H'.
%    \begin{macrocode}
cmchar "TGOTH letter H";
beginchar("H", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric st; st := stem_width;
numeric n[];
path pth[];
pickup quill;
%% left stem
lft x1=pcshiftx+3st; y1=h;
x2=x1; y2=0;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
% start of bowl
n1 := 12/16h;    %% take this as the top of the bowl
x13=x1; y13=3/4n1;
rt x3 = w-pcshiftx; y3 = 8/16n1;
x14 = 8/16[x13,x3]; top y14 = n1;
x4 = 1/2[x14,x3]; bot y4=0;
pth1 := z13{pdir}..{right}z14..{down}z3..{-pdir}z4;
%% bottom curl
z21 = z4;
x24 = x3; top y24 = 0;
x23 = 1/2[x21,x24]; top y23 = bot y24;
pth2 := z21{-pdir}..z23..{ppdir}z24;
%% vertical decoration
z102 = 2/3[z2b,z2c];
z182 = (x102,h);
z101 = (z102--z182) intersectionpoint pth1;
z105 = 1/2[z102,z101];
x185 = 2w;
(z185-z105) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth1;
z107 = (x105, y105-angdec); z187 = (x185, y185-angdec);
z108 = (z107--z187) intersectionpoint pth1;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;
pickup stylus;
draw pth2;
draw z101--z102;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,13,14,100);
endchar; % end "H"


%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{I}
% The letter `I'.
%    \begin{macrocode}
cmchar "TGOTH letter I";
beginchar("I", 2cap_sb#+hstretch*((4+wided)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric st; st := stem_width;
pickup quill;
lft x1=lft x2=pcshiftx+3st;
y1=h; y2=0;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided, widedmin,diawd,diang);
%% vertical decoration
z102 = 2/3[z2b,z2c];
pickup stylus;
x101=x102; top y101 = h;
draw z101--z102;
ductus:=false;
penlabels(1,2,101,102,100);
endchar; % end "I"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{J}
% The letter `J'. This letter was not in the script, it being a later invention.
%    \begin{macrocode}
cmchar "TGOTH letter J";
beginchar("J", cap_sb#+hstretch*((4+wided)*stem_width#), 
               caprat*x_height#, 1/2caprat*x_height#);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
lft x1 = pcshiftx+3st; y1 = h;
x2=x1; y2=-d + (top y1 - bot y1);
%% bottom hook
lft x3 = pcshiftx; bot y3 = -d;
draw_upcurlstem(1,2);
draw z2{ppdir}..{-pdir}z3;
%% vertical decoration
x201 = rt x1;
x101 = x201 + 2/3wided*st;
pickup stylus;
top y101 = h; y201=y101;
z102=(x101,0);
draw z201--z101--z102;
ductus:=false;
penlabels(1,2,3,101,102,100);
endchar; % end "J"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{K}
% The letter `K'.
%    \begin{macrocode}
cmchar "TGOTH letter K";
beginchar("K", 2cap_sb#+hstretch*((8+wided)*stem_width#), 
               5/4caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
path pth[];
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
n1 = 4/5h;                 % x-height
lft x1=lft x2=pcshiftx+3st;
y1=h; y2=0;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
%% top arm
%%z3=(x1,1/2n1);
x3 = x1; top y3 = 14/16n1;
z7c = 1/2[z2,z3];
top y3a = n1; (z3a-z3) = whatever*pdir;
rt x7a = w - pcshiftx - 2st; (z7a-z7c) = whatever*pdir;
x4 = 1/2[x3a,x7a]; y4 = y3a;
x5 = x7a; y5 = 1/2[y3a, y7a];
z7 = (rt x7c, y7c);
pth1 := z3{pdir}..z4..z5..{-pdir}z7;
%% lower arm
z21=z7;
z24=(x5+st,y2a);
x23 = x24; y23 = 1/2[y21,y24];
rt x25 = w-pcshiftx; bot y25 = 0;
pth2 := z21{pdir}..{down}z23..z24..{pdir}z25;
pickup quill;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;                        % upper bowl
draw pth2;                        % lower half
%% decorations
z1tr = (rt x1, top y1);
pickup stylus;
z102 = 2/3[z2b,z2c]; x101 = x102; top y101 = h;
x103 = x1tr; y103 = y101;
draw z103--z101--z102;
x105 = x101; y105 = 1/2[y7,y3];
y185 = 2w; (z185-z105) = whatever*pdir;
z106 = (z105--z185) intersectionpoint pth1;
x107 = x105; y107 = y105-angdec;
x187 = x185; y187-y185 = y107-y105;
%%z108 = (z107--z187) intersectionpoint pth1;
draw z105--z106; 
%%draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,13,14,21,22,23,24,25,100);
endchar; % end "K"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{L}
% The letter `L'. 
%    \begin{macrocode}
cmchar "TGOTH letter L";
beginchar("L", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric st; st := stem_width;
pickup quill;
lft x1=pcshiftx+3st; y1=h;
x2=x1; bot y2 =0;
draw_upcurlstem(1,2);
rt x4 = w-pcshiftx; bot y4 = 0;
draw z2{right}..{pdir}z4;
%% vertical decoration
x201 = rt x1;
x101 = x201+2/3wided*st;
pickup stylus;
top y101 = h; y201 = y101;
x102 = x101; bot y102=0;
draw z201--z101--z102;
ductus:=false;
penlabels(1,2,3,4,101,102,201,100);
endchar; % end "L"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{M}
% The letter `M'. 
%    \begin{macrocode}
cmchar "TGOTH letter M";
beginchar("M", 2cap_sb#+hstretch*((11)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric st; st := stem_width;
path pth[];
pickup quill;
%%% left part
lft x301 = pcshiftx+3st; y301 = h;
x302 = x301; y302 = 0;
z312 = 1/2[z301,z302];
draw_upcurlstem(301,312);
draw_downdiamondstem(312,302,wided,widedmin,diawd,diang);

%% left N stem (and N part)
%%%lft x1=pcshiftx+3st; y1=h;
x1 = x301 + 3st; y1 = h;
x2=x1; y2=0;
z12 = 1/2[z1,z2];
%%draw_upcurlstem(1,12);
%%draw_updiamondstem(1,12,wided,widedmin,diawd,diang);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
% start of bowl
x13=x1; y13=3/4h;
rt x3 = w-pcshiftx; y3 = 8/16h;
x14 = 8/16[x13,x3]; top y14 = h;
x4 = 1/2[x14,x3]; bot y4=0;
pth1 := z13{pdir}..{right}z14..{down}z3..{-pdir}z4;
%% bottom curl
z21 = z4;
x24 = x3; top y24 = 0;
x23 = 1/2[x21,x24]; top y23 = bot y24;
pth2 := z21{-pdir}..z23..{ppdir}z24;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;
pickup stylus;
draw pth2;
pickup quill;
%% finish off the left part
x3011 = 1/2[x301,x1]; top y3011 = h;
z3123 = (x301,3/4h); z123 = (x1,y3123);
draw z3123--z3011--z123--z12;
%% vertical decorations
  %% left part
z402 = 2/3[z302b,z302c];
x401 = x402; z401 = whatever[z3123,z3011];
  %% right part
z102 = 2/3[z2b,z2c];
z182 = (x102,h);
z101 = (z102--z182) intersectionpoint pth1;
%% angled decorations
  %% left part
z406 = z13;
x405 = x402; (z406-z405) = whatever*pdir;
z407 = (x405, y405-angdec); z408 = (x406, y406-angdec);
  %% right part
z105 = (x102,y405);
x185 = 2w;
(z185-z105) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth1;
z107 = (x105, y105-angdec); z187 = (x185, y185-angdec);
z108 = (z107--z187) intersectionpoint pth1;
pickup stylus;
draw z401--z402;
draw z405--z406; draw z407--z408;
draw z101--z102;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,13,14,101,102,105,106,107,108,301,302,100);
endchar; % end "M"


%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{N}
% The letter `N'. 
%    \begin{macrocode}
cmchar "TGOTH letter N";
beginchar("N", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric st; st := stem_width;
path pth[];
pickup quill;
%% left stem
lft x1=pcshiftx+3st; y1=h;
x2=x1; y2=0;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
% start of bowl
x13=x1; y13=3/4h;
rt x3 = w-pcshiftx; y3 = 8/16h;
x14 = 8/16[x13,x3]; top y14 = h;
x4 = 1/2[x14,x3]; bot y4=0;
pth1 := z13{pdir}..{right}z14..{down}z3..{-pdir}z4;
%% bottom curl
z21 = z4;
x24 = x3; top y24 = 0;
x23 = 1/2[x21,x24]; top y23 = bot y24;
pth2 := z21{-pdir}..z23..{ppdir}z24;
%% vertical decoration
z102 = 2/3[z2b,z2c];
z182 = (x102,h);
z101 = (z102--z182) intersectionpoint pth1;
z105 = 1/2[z102,z101];
x185 = 2w;
(z185-z105) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth1;
z107 = (x105, y105-angdec); z187 = (x185, y185-angdec);
z108 = (z107--z187) intersectionpoint pth1;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;
pickup stylus;
draw pth2;
draw z101--z102;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,13,14,100);
endchar; % end "N"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{O}
% The letter `O'.
%    \begin{macrocode}
cmchar "TGOTH letter O";
beginchar("O", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
path pth[];
pickup quill;
lft x1=pcshiftx; rt x3=w-pcshiftx; y1=y3=h/2;
x2=x4=w/2; top y2=h; bot y4=0;
pth1 := z1..z2..z3..z4..cycle;
%% vertical decoration
z101=z2; z102=z4;
z103 = (x101-perpdec, y101); z104 = (x103,y102);
%% angled decoration
z108 = (lft x3,y3);
x107 = x101; (z108-z107) = whatever*(pdir);
z105 = (x107, y107+angdec);
x106a = 2w; (z106a-z105) = whatever*(pdir);
z106 = (z105--z106a) intersectionpoint pth1;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;
pickup stylus;
draw z101--z102; draw z103--z104; 
draw z105--z106; draw z107--z108; 
ductus:=false;
penlabels(1,2,3,4,5,100);
endchar; % end "O"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{P}
% The letter `P'.
%    \begin{macrocode}
cmchar "TGOTH letter P";
beginchar("P", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 1/2caprat*x_height#);
adjust_fit(0,0);
pcshiftx := cap_sb;
path pth[];
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+3st;
y1=h; y2=-d;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
%% vertical decoration
z1tr = (rt x1, top y1);
z102 = 2/3[z2b,z2c];
pickup stylus;
x101 = x102; top y101 = h;
x103 = x1tr; y103 = y101;
draw z103--z101--z102;
pickup quill;
%% bowl
lft x22 = x101; top y22 = h;
x21 = x1; (z22-z21) = whatever*pdir;
rt x24 = w - pcshiftx; y24 = 1/2h;
x25 = 1/2[x22,x24]; bot y25 = 0;
pth1 := z21--z22{down}..{down}z24..{-pdir}z25;
z31 = z25;
lft x33 = pcshiftx; bot y33 = 0;
pth2 := z33{pdir}..{right}z31;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1; draw pth2;
%% angled decoration
x105 = x101; y105 = 1/3h;
x185 = 2w;
(z185-z105) = whatever*pdir;
z106 = (z105--z185) intersectionpoint pth1;
z107 = (x105,y105-angdec); 
x187 = x185; y107 - y105 = y187 - y185;
z108 = (z107--z187) intersectionpoint pth1;
pickup stylus;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,100);
endchar; % end "P"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{Q}
% The letter `Q'. 
%    \begin{macrocode}
cmchar "TGOTH letter Q";
beginchar("Q", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
path pth[];
pickup quill;
lft x1=pcshiftx; rt x3=w-pcshiftx-stem_width; y1=y3=h/2;
x2=x4=w/2; top y2=h; bot y4=0;
pth1 := z1..z2..z3..z4..cycle;
%% tail
pth2 := z1..z4..z3;
z11 = directionpoint pdir of pth2;
rt x13 = w-pcshiftx; bot y13 = 0;
pth3 := z11{pdir}..{pdir}z13;
%% vertical decoration
z101=z2; z102=z4;
z103 = (x101-perpdec, y101); z104 = (x103,y102);
%% angled decoration
z108 = (lft x3,y3);
x107 = x101; (z108-z107) = whatever*(pdir);
z105 = (x107, y107+angdec);
x106a = 2w; (z106a-z105) = whatever*(pdir);
z106 = (z105--z106a) intersectionpoint pth1;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1; draw pth3;
pickup stylus;
draw z101--z102; draw z103--z104; 
draw z105--z106; draw z107--z108; 
ductus:=false;
penlabels(1,2,3,4,5,100);
endchar; % end "Q"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{R}
% The letter `R'.
%    \begin{macrocode}
cmchar "TGOTH letter R";
beginchar("R", 2cap_sb#+hstretch*((8+wided)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
path pth[];
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% stem
n1 = h;                 % x-height
lft x1=lft x2=pcshiftx+3st;
y1=h; y2=0;
z12 = 1/2[z1,z2];
draw_upcurlstem(1,12);
draw_downdiamondstem(12,2,wided,widedmin,diawd,diang);
%% top arm
%%z3=(x1,1/2n1);
x3 = x1; top y3 = 14/16n1;
z7c = 1/2[z2,z3];
top y3a = n1; (z3a-z3) = whatever*pdir;
rt x7a = w - pcshiftx - 2st; (z7a-z7c) = whatever*pdir;
x4 = 1/2[x3a,x7a]; y4 = y3a;
x5 = x7a; y5 = 1/2[y3a, y7a];
z7 = (rt x7c, y7c);
pth1 := z3{pdir}..z4..z5..{-pdir}z7;
%% lower arm
z21=z7;
z24=(x5,y2a);
x23 = x24; y23 = 1/2[y21,y24];
rt x25 = w-pcshiftx; bot y25 = 0;
pth2 := z21{pdir}..{down}z23..z24..{pdir}z25;
pickup quill;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;                        % upper bowl
draw pth2;                        % lower half
%% decorations
z1tr = (rt x1, top y1);
pickup stylus;
z102 = 2/3[z2b,z2c]; x101 = x102; top y101 = h;
x103 = x1tr; y103 = y101;
draw z103--z101--z102;
x105 = x101; y105 = 1/2[y7,y3];
y185 = 2w; (z185-z105) = whatever*pdir;
z106 = (z105--z185) intersectionpoint pth1;
x107 = x105; y107 = y105-angdec;
x187 = x185; y187-y185 = y107-y105;
%%z108 = (z107--z187) intersectionpoint pth1;
draw z105--z106; 
%%draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,13,14,21,22,23,24,25,100);
endchar; % end "R"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{S}
% The letter `S'. 
%    \begin{macrocode}
cmchar "TGOTH letter S";
beginchar("S", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
pickup threequarterquill;
%% top
n1 := 1;
lft x1 = pcshiftx + n1*st; top y1 = h;
rt x3 = w - pcshiftx; y3 = y1;
x2 = 1/2[x1,x3]; top y2 = y1;
pth1 := z1..z2..{pdir}z3;
draw pth1;
%% bottom
lft x4 = pcshiftx; bot y4 = 0;
rt x6 = w -pcshiftx - n1*st; y6 = y4;
x5 = 1/2[x4,x6]; bot y5 = y4;
pth2 := z4{pdir}..z5..z6;
draw pth2;
%% top path
z100 = (1/2w, 1/2h);
z11 = z1; z15 = z6;
x13 = x100; y13 = y100 + st;
pth3 := z11..{right}z13{right}..z15;
draw pth3;
%% bottom path
z21 = z11; z25 = z6;
x23 = x100; y100 - y23 = y13 - y100;
pth4 := z21..{right}z23{right}..z25;
draw pth4;
%% decorations
  %% top
z101 = (x2+angdec,y2); y181 = 0; (z101-z181) = whatever*pdir;
z102 = (z101--z181) intersectionpoint pth3;
z103 = (x101-angdec, y101); x183-x181 = x103-x101; y183 = 0;
z104 = (z103--z183) intersectionpoint pth3;
  %% bottom
z201 = (x5,y5); y281 = h; (z201-z281) = whatever*pdir;
z202 = (z201--z281) intersectionpoint pth4;
z203 = (x201-angdec, y201); x283-x281 = x203-x201; y283 = h;
z204 = (z203--z283) intersectionpoint pth4;
pickup stylus;
draw z101--z102; draw z103--z104;
draw z201--z202; draw z203--z204;


%%ductus:=true;
if ductus:
  pickup stylus;
fi
ductus:=false;
penlabels(1,2,3,4,5,6,7,11,17,20,26,27,28,100,101,102,103,104,201,202,203,204);
endchar; % end "S"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{T}
% The letter `T'.
%    \begin{macrocode}
cmchar "TGOTH letter T";
beginchar("T", 2cap_sb#+hstretch*((7)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric n[];
numeric st; st := stem_width;
path pth[];
pickup quill;
%% bar
top y3=h; n3 := h - top y3;
lft x1 = pcshiftx; rt x2=w-pcshiftx;
y1 = y3-n3; y2=y3;
x3=1/2[x1,x2];
pth1 := z1{pdir}..z3..z2{pdir};
%% bowl
n1 := w;     % width of bowl
n2 := h;     % height of bowl
lft x4 = pcshiftx; y4 = 1/2h;
x5=x3; bot y5 = 0;
rt x6 = w-pcshiftx; y6 = 6/16h;
%%pth2 := z3..z4{down}..z5{right}..z6{pdir};
%% decoration
x101 = lft x3; y101=y3;
x181 = x101; y181=-h/4; z191 = 1/2[z101,z181];
%%z102 = z191--z181 intersectionpoint pth2;   %%% ???? NO INTERSECTION!!!!!!
z102=(x101,y5);
z103 = (x101+3thin, y101); z104 = (x103,y102);
lft x7 = x104; y7 = 10/16[y104,y103];
pth2 := z3..z4{down}..z5{right}..z6{up}..{-pdir}z7;
z105 = (x104,y104+4thin); z107=(x105,y105+3thin);
x185 = 2w; (z185-z105) = whatever*(pdir);
z106 = (z105--z185) intersectionpoint pth2;
z108 = (x106,y106+3thin);
pickup stylus;
draw z101--z102; draw z103--z104;
draw z105--z106; draw z107--z108;
pickup quill;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw pth1;             %% bar
draw pth2;             %% bowl
ductus:=false;
penlabels(1,2,3,4,5,6,11,12,100,101,102,103,104,181,191);
endchar; % end "T"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{U}
% The letter `U'. 
%    \begin{macrocode}
cmchar "TGOTH letter U";
beginchar("U", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := cap_sb;
numeric n[];
numeric st; st := stem_width;
path pth[];
pickup quill;
%% stem tops
lft x1 = pcshiftx + 3st; y1 = h;
rt x3 = w - pcshiftx - widedmin*st; y3 = h;
% bottom of bowl
x7 = x1 - 3/2st; bot y7 = 0;
rt x9 = lft x3; bot y9 = 0;
pth1 := z7{pdir}..{pdir}z9;
draw pth1;
%% stem bottoms
z2 = (z1 -- (x1,-h)) intersectionpoint pth1;
x4 = x3; bot y4 = top y9;
draw_upcurlstem(1,2);
draw_updiamondstem(3,4,wided,widedmin,diawd,diang);
%% decorations
z1tr = (rt x1, top y1);
pickup stylus;
z99 = 2/3[z3b,z3c];
x101 - x1 = x3 - x99; top y101 = h;
x102 = x101; y102 = y2;
x103 = x1tr; y103 = y101;
draw z103--z101--z102;
x105 = x101; y105 = 1/3h;
x106 = x3; (z106-z105) = whatever*pdir;
z107 = (x105, y105-angdec); x108 = x106; y108-y106 = y107-y105;
draw z105--z106; draw z107--z108;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,13,14,16,33,100);
endchar; % end "U"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{V}
% The letter `V'. 
%    \begin{macrocode}
cmchar "TGOTH letter V";
beginchar("V", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% left stem top
lft x1 = pcshiftx + 3st; y1 = h;
% bottom of bowl
x7 = x1 - 3/2st; bot y7 = 0;
x9 = w/2; bot y9 = 0;
pth1 := z7{pdir}..{right}z9;
draw pth1;
%% left stem bottom
x81 = x1; y81 = - h;
z2 = (z1--z81) intersectionpoint pth1;
draw_upcurlstem(1,2);
%% right stem
z6 = z9;
rt x5 = w - pcshiftx; top y5 = 3/4h;
x3 = 1/2[rt x1, lft x5];
x4 = 1/2[x3,x5]; top y4 = h;
y3 = 1/2[y4,y5];
pth2 := z6{pdir}..{up}z5..{left}z4..{-pdir}z3;
draw pth2;
pth3 := pth1 & pth2;
%% decoration
z1tr = (rt x1, top y1);
x101 = x1tr + 2/3wided*st;
pickup stylus;
top y101 = h;
z103 = (x1tr,y101);
z181 = (x101,-w);
z102 = (z101--z181) intersectionpoint pth3;
draw z103--z101--z102;
x105 = x101; y105 = 1/3[y102,y101];
x185 = 2w; (z185-z105) = whatever*pdir;
z106 = (z105--z185) intersectionpoint pth2;
z107 = (x105, y105-angdec); 
x187 = x185; y187-y185 = y107-y105;
z108 = (z107--z187) intersectionpoint pth2;
draw z105--z106; draw z107--z108;

%%ductus:=true;
if ductus:
  pickup stylus;
fi

ductus:=false;
penlabels(1,2,3,4,5,11,13,14,23,26,100);
endchar; % end "V"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{W}
% The letter `W'. This is a modern version as the font did not have a W.
%    \begin{macrocode}
cmchar "TGOTH letter W";
beginchar("W", 2cap_sb#+hstretch*((12)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% top of stems
lft x1 = pcshiftx + 3st; y1 = h;
rt x999 = w - pcshiftx;
x3 = 1/2[x1,x999]; y3 = h;
%% bowl bottoms
x21 = x1 - 3/2st; bot y21 = 0;
rt x23 = lft x3; bot y23 = 0;
pth1 := z21{pdir}..z23;
draw pth1;
lft x31 = rt x23; bot y31 = top y23;
x33 = 1/2[x31,x999]; bot y33 = 0;
pth2 := z31{pdir}..z33;
draw pth2;
%% bottom of stems
z2 = (z1--(x1,0)) intersectionpoint pth1;
x4 = x3; bot y4 = top y23;
draw_upcurlstem(1,2);
draw_updiamondstem(3,4,wided,widedmin,diawd,diang);
%% right V stem
z16 = z33;
x15 = x999; top y15 = 3/4h;
x13 = 1/2[rt x3, lft x15];
x14 = 1/2[x13,x15]; top y14 = h;
y13 = 1/2[y14,y15];
pth3 = z16{pdir}..{up}z15..{left}z14..{-pdir}z13;
draw pth3;
%% decorations
z1tr = (rt x1, top y1);
z3tr = (rt x3, top y3);
pickup stylus;
%% for U
z99 = 2/3[z3b,z3c];
x101 - x1 = x3 - x99; top y101 = h;
x102 = x101; y102 = y2;
x103 = x1tr; y103 = y101;
draw z103--z101--z102;
x105 = x101; y105 = 1/3h;
x106 = x3; (z106-z105) = whatever*pdir;
z107 = (x105, y105-angdec); x108 = x106; y108-y106 = y107-y105;
draw z105--z106; draw z107--z108;
%% for V

x301 = x3tr+2/3wided*st; top y301 = y3e;
z381 = (x301,-w);
z302 = (z301--z381) intersectionpoint pth2;
draw z3e--z301--z302;
x305 = x301; y305 = 1/3[y302,y301];
x385 = 2w; (z385-z305) = whatever*pdir;
z306 = (z305--z385) intersectionpoint pth3;
z307 = (x305, y305-angdec); 
x387 = x385; y387-y385 = y307-y305;
z308 = (z307--z387) intersectionpoint pth3;
draw z305--z306; draw z307--z308;



ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,13,14,33,34,53,16,100);
endchar; % end "W"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{X}
% The letter `X'.
%    \begin{macrocode}
cmchar "TGOTH letter X";
beginchar("X", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
path pth[];
numeric n[];
numeric st; st := stem_width;
pcshiftx := cap_sb;
pickup quill;
%% center stem
lft x1 = lft x2 = pcshiftx + 3st;
y1 = 3/4h; y2 = 1/4h;
draw z1--z2;
%% top right
z21 = z1; top y22 = h; (z22-z21) = whatever*pdir;
rt x24 = w-pcshiftx; y24 = y21;
pth1 := z21--z22{-ppdir}..{pdir}z24;
draw pth1;
%% bottom right
z31 = z2; 
rt x33 = w-pcshiftx; bot y33 = 0;
pth2 := z31{-ppdir}..{pdir}z33;
draw pth2;
%% bottom left
z41 = z2; 
bot y43 = -1/4h; (z41-z43) = whatever*pdir;
x45 = x43 + st; y45=y43;
pth3 := z41--z43{-pdir}..{pdir}z45;
pickup stylus;
draw pth3;
pickup quill;
%% top left
x11 = x1; y11 = h;
draw_upcurlstem(11,1);
%% decoration
x81 = rt x1;
pickup stylus;
x101 = x102 = x81 + 2/3wided*st;
z101 = whatever[z1,z22];
z102 = (z101--(x101,0)) intersectionpoint pth2;
draw z101--z102;
pickup quill;
%% middle arms
z120 = 1/2[z1,z2];
z51 = z120;
lft x53 = pcshiftx; top y53 = y51;
x52 = 1/2[x51,x53]; y52 = y51;
pth5 := z51--z52{left}..{-pdir}z53;
draw pth5;
lft x61 = x101; y61 = y120;
rt x63 = w-pcshiftx; bot y63 = y61;
x62 = 1/2[x61,x63]; y62 = y61;
pth6 := z61--z62{right}..{pdir}z63;
draw pth6;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,10,25,251,252,40,50,51,52,53,61,62,63,101,102,150,60,160,100);
endchar; % end "X"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{Y}
% The letter `Y'. 
%    \begin{macrocode}
cmchar "TGOTH letter Y";
beginchar("Y", 2cap_sb#+hstretch*((8)*stem_width#), 
               caprat*x_height#, 1/2caprat*x_height#);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% stem tops
lft x1 = pcshiftx + 3st; y1 = h;
rt x3 = w - pcshiftx - widedmin*st; y3 = h;
% bottom of bowl
x7 = x1 - 3/2st; bot y7 = 0;
x9 = 1/2[x1,x3]; bot y9 = 0;
pth1 := z7{pdir}..{right}z9;
draw pth1;
%% left stem bottom
x81 = x1; y81 = - h;
z2 = (z1--z81) intersectionpoint pth1;
draw_upcurlstem(1,2);
%% right stem
x4 = x3; y4 = 0;
x5 = x4; y5 = -1/4d;
lft x6 = x9; bot y6 = -d;
draw_updiamondstem(3,4,wided,widedmin,diawd,diang);
draw z6{pdir}..{up}z5--z4;
z3cd = 1/2[z3c,z3d];
pth2 = z5--z3a--z3cd;
%% fill bowl bottom
x91 = x3; (z91-z9) = whatever*pdir;
draw z9--z91;

%% decoration
z1tr = (rt x1, top y1);
x101 = x1tr + 2/3wided*st;
pickup stylus;
top y101 = h;
z103 = (x1tr,y101);
z181 = (x101,-w);
z102 = (z101--z181) intersectionpoint pth1;
draw z103--z101--z102;
x105 = x101; y105 = 1/3[y102,y101];
x185 = 2w; (z185-z105) = whatever*pdir;
z106 = (z105--z185) intersectionpoint pth2;
z107 = (x105, y105-angdec); 
x187 = x185; y187-y185 = y107-y105;
z108 = (z107--z187) intersectionpoint pth2;
draw z105--z106; draw z107--z108;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,10,100,101,102,181);
endchar; % end "Y"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{Z}
% The letter `Z'.
%    \begin{macrocode}
cmchar "TGOTH letter Z";
beginchar("Z", 2cap_sb#+hstretch*((5)*stem_width#), 
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
path pth[];
pcshiftx := cap_sb;
pickup quill;
%% top bar ends
top y12 = h;
n1 := h - y12;
lft x1 = pcshiftx; rt x2 = w-pcshiftx-perpdec;
%%y1 = y12-n1; y2=y12+n1;
y1 = y12-n1/2; y2=y12;
x12 = 1/2[x1,x2];
pth1 := z1{pdir}..z12{right}..z2{pdir};
x102 = rt x2; y102 = top y2; x202 = x102+perpdec; y202=y102;
%% bottom bar ends
bot y34 = 0;
x3=x1+perpdec; rt x4= w-pcshiftx;
y3=y34-n1/2; y4=y34;
x34 = 1/2[x3,x4];
pth2 := z3{pdir}..z34{right}..z4{pdir};
x203 = lft x3; y203 = bot y3; x103 = x203-perpdec; y103=y203;
%% centre bar
z5 = (x1,1/2[y1,y3]); z6 = (x4,1/2[y2,y4]); z56 = 1/2[z5,z6];
pth3 := z5{pdir}..z56{right}..z6{pdir};
draw pth1; draw pth2;            %  bars
draw pth3;
%% decorations
pickup stylus;
draw z102--z103; draw z202--z203;
unfill z102--z103--z203--z202--cycle;
draw z102--z103; draw z202--z203;
ductus:=false;
penlabels(1,2,3,4,5,6,10o,10i,20o,20i,100);
endchar; % end "Z"

%    \end{macrocode}
% \end{routine}
%
%
%
%    The end of this file
%    \begin{macrocode} 
%</maj>
%    \end{macrocode}
%
%
%
% \subsection{The punctuation file}
%
% The main punctuation marks are defined in this file.
%
%    \begin{macrocode}
%<*punct>
% TGOTHPUNCT.MF This file contains punctuation marks

%    \end{macrocode}
%
%
% \begin{routine}{!}
%    The `!' character, which had not been invented at this time.
%    \begin{macrocode}

cmchar "Exclamation mark";
beginchar("!", 2sb#+hstretch*(thick#+trijut#),
               asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
x1=w/2; top y1 = h;
z3=(x1, 1/2dot_size);
z2=(x1, y3+3/2dot_size);
draw z1--z2;
draw_pdot(3,dot_size);
penlabels(1,2,3);

endchar;  % end of "!"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{?}
%    The `?' character, which had not been invented at this time.
%    \begin{macrocode}

cmchar "Question mark";
beginchar("?", 2sb#+hstretch*((3+wided+widedmin)*stem_width#),
               asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
path pth[];
pickup quill;
n1 := w-2pcshiftx;     % actual character width
n2 := 1/3h;            % height of top bowl
n3 := n2;              % height of bottom bowl
z5=(1/2w,1/2dot_size);
x45 = x5; y45=y5+3/2dot_size;
lft x1 = pcshiftx; y1 = 3/4h;
x2 = 1/2w; top y2 = h;
rt x3 = w-pcshiftx; y3 = 11/16h;

x4 = x45;
(z3-z4) = whatever*pdir;

%%ductus:= true;
if ductus:
  pickup stylus;
fi
%%draw z1..z2{right}..z3{down}..z4{down};
draw z1--z2--z3--z4--z45;
draw_pdot(5, dot_size);
penlabels(1,2,3,4,45,5);
endchar;  % end of "?"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{,}
%    The `,' character.
%    \begin{macrocode}

cmchar "Comma";
beginchar(",",2sb#+hstretch*(comma_width#+dot_size#),x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb;
x1=w-pcshiftx-(0.5hstretch*dot_size); y1=1/2dot_size;
draw_pcomma(1,dot_size,comma_width);
penlabels(1); 
endchar; % end of ","

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{.}
%    The `.' character.
%    \begin{macrocode}

cmchar "Period";
beginchar(".",2sb#+hstretch*(dot_size#),x_height#,0);
pcshiftx:=sb;
z1=(w/2, 1/2dot_size);
draw_pdot(1,dot_size);
penlabels(1); 
endchar; % end of "."

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{:}
%    The `:' character.
%    \begin{macrocode}

cmchar "Colon";
beginchar(":",2sb#+hstretch*(dot_size#),x_height#,0);
pcshiftx:=sb;
x1=x2=w/2; y1=3/4h; y2=1/4h;
draw_pdot(1,dot_size);
draw_pdot(2,dot_size);
penlabels(1,2); 
endchar; % end ":"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{;}
%    The `;' character.
%    \begin{macrocode}

cmchar "Semicolon";
beginchar(";",2sb#+hstretch*(comma_width#+dot_size#),x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb;
x1=x2=w-pcshiftx-(0.5hstretch*dot_size); y1=3/4h; y2=1/2dot_size;
draw_pdot(1,dot_size);
draw_pcomma(2,dot_size,comma_width);
penlabels(1,2); 
endchar; % end of ";"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{'}
%    The `'' character.
%    \begin{macrocode}

cmchar "Apostrophe";
beginchar("'",2sb#+hstretch*(comma_width#+dot_size#),4/3x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb;
x1=w-pcshiftx-(0.5hstretch*dot_size); y1=h;
draw_pcomma(1,dot_size,comma_width);
penlabels(1); 
endchar;  % end of "'"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{`}
%    The ``' character.
%    \begin{macrocode}

cmchar "Reverse apostrophe";
beginchar("`",2sb#+hstretch*(comma_width#+dot_size#),4/3x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb;
x1=pcshiftx+(0.5hstretch*dot_size); y1=h;
draw_plq(1,dot_size,comma_width);
penlabels(1); 
endchar;  % end of "`"

%    \end{macrocode}
% \end{routine}
%
% The end of this file.
%    \begin{macrocode}
%</punct>
%    \end{macrocode}
%
%
% \subsection{The ligatures and dashes file}
%
%    The ligatured letters, punctuation marks and dashes are defined in this file.
%    \begin{macrocode}
%<*lig>
% TGOTHLIG.MF Uncial ligatured letters, punctation and dashes

%    \end{macrocode}
%  First the ligtables.
%    \begin{macrocode}

ligtable "`": "`"=:oct"134";
ligtable "'": "'"=:oct"042"; %% , "?" kern 2u#, "!" kern 2u#;

ligtable "-": "-"=:oct"173";
ligtable oct"173": "-"=:oct"174";

%%%%ligtable "c": "t"=:oct"014";
ligtable "s": "t"=:oct"015";

%    \end{macrocode}
%
%
%
% \begin{routine}{st}
%    The `st' ligature.
%    \begin{macrocode}

cmchar "TGOTH st ligature";
beginchar(oct"015", 2sb#+hstretch*((1 + narrowd + 3)*stem_width#), 
               asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st; st := stem_width;
n1 := h/ascratio;  % x-height
pickup quill;
%% the S (long)
lft x1 = pcshiftx + narrowd*st;
x2 = x1; y2 = 0; y1 = h - (top y2 - bot y2);
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,narrowd, 1/4narrowdmin, diawd, diang);
draw_downdiamondstem(12,2,narrowd, narrowdmin, diawd, diang);
%% the T
%% bar
lft x23 = rt x1 + pcshiftx; top y23 = n1;
rt x24 = w-pcshiftx; y24=y23;
draw z23--z24;
%% stem
lft x21 = rt x23; top y21 = h;
x22 = x21; y22 = 0;
draw_downdiamondstem(21,22,narrowd,narrowdmin,diawd,diang);
%% the ligature
x11=x1; top y11=h;
draw z12--z11--z21;
ductus:=false;
penlabels(1,2,3,4,5,11,21,22,23,24,100);
%% end "t"
endchar; %% end st ligature

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{''}
%   The `''' ligature.
%    \begin{macrocode}

cmchar "Closing quotes";
beginchar(oct"042",2sb#+hstretch*(comma_width#+3dot_size#),4/3x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb;
x1=w-pcshiftx-(0.5hstretch*dot_size); y1=y2=h;
x2=x1-(2hstretch*dot_size);
draw_pcomma(1,dot_size,comma_width);  % right
draw_pcomma(2,dot_size,comma_width);  % left
penlabels(1,2); 
endchar; % end of "''"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{``}
%   The ```' ligature.
%    \begin{macrocode}

cmchar "Opening quotes";
beginchar(oct"134",2sb#+hstretch*(comma_width#+3dot_size#),4/3x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb;
x1=pcshiftx+(0.5hstretch*dot_size); y1=y2=h;
x2=x1+(2hstretch*dot_size);
draw_plq(1,dot_size,comma_width); % left
draw_plq(2,dot_size,comma_width); % right
penlabels(1,2); 
endchar; % end of "``"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{-}
%   The `-' (hyphen) character.
%    \begin{macrocode}

cmchar "Hyphen";
beginchar("-",sb#+hstretch*((2)*stem_width#),x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb/2;
pickup threequarterquill;
lft x21=pcshiftx; rt x22=w-pcshiftx; y21=y22=1/2h;
draw z21--z22;
%%draw_roundserif(21,22,srad); draw_flatserif(22,21,srad);
penlabels(1,2); 
endchar; % end of "-"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{--}
%   The `--' (en-dash) ligature. 
%    \begin{macrocode}

cmchar "En dash";
beginchar(oct"173",sb#+hstretch*((3)*stem_width#),x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb/2;
pickup threequarterquill;
lft x21=pcshiftx; rt x22=w-pcshiftx; y21=y22=1/2h;
draw z21--z22;
%%draw_roundserif(21,22,srad); draw_flatserif(22,21,srad);
penlabels(1,2); 
endchar; % end of "--"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{---}
%   The `---' (em dash) ligature. The em dash is twice the width of the en dash.
%    \begin{macrocode}

cmchar "Em dash";
beginchar(oct"174",sb#+hstretch*((6)*stem_width#),x_height#,0);
adjust_fit(0,0);
pcshiftx:=sb/2;
pickup threequarterquill;
lft x21=pcshiftx; rt x22=w-pcshiftx; y21=y22=1/2h;
draw z21--z22;
%%draw_roundserif(21,22,srad); draw_flatserif(22,21,srad);
penlabels(1,2); 
endchar; % end of "---"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{&}
% The ampersand (which is really an `et' ligature).
% In this case, a `t' with one thin bar.
%    \begin{macrocode}

cmchar "TGOTH ampersand";
beginchar("&", 2sb#+hstretch*((7/2)*stem_width#), asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
numeric st; st := stem_width;
pickup quill;
%% bar
lft x3 = pcshiftx; top y1 = h;
top y3 = bot y1;
rt x4 = w-pcshiftx; y4=y3;
draw z3--z4;
%% stem
lft x1 = rt x3;
x2 = x1; y2 = 0;
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);
%% E bars
n1 = 1/2[y3,y2a] + 1/2angdec;
pickup halfquill;
lft x11 = pcshiftx; rt x12 = w-pcshiftx; 
%y11=y12=n1;
y11 = y12 = 1/2h;
x13 = x11; x14=x12; y13 = y14 = n1-angdec;
draw z11--z12; 
%%draw z13--z14;
ductus:=false;
penlabels(1,2,3,4,5,6,11,12,13,14,100);
endchar; % end "&"

%    \end{macrocode}
% \end{routine}
%
%
% The end of this file.
%    \begin{macrocode}
%</lig>
%    \end{macrocode}
%
% \subsection{The digits file}
%
%    These are arabic digits in the style of the book-hand. They are a
% modern invention.
%
%    \begin{macrocode}
%<*dig>
% TGOTHDIG.MF  Program file for Early Gothic digits
%

%    \end{macrocode}
% 
% 
%
% \begin{routine}{1}
% The digit `1'.
%    \begin{macrocode}
cmchar "TGOTH digit 1";
beginchar("1", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
x1 = x2 = 1/2w; y1 = h; y2 = 0;
z12 = 1/2[z1,z2];
draw_updiamondstem(1,12,1/2,1/2,diawd,diang);
draw_downdiamondstem(12,2,1/2,1/2,diawd,diang);
penlabels(1,2,100);
endchar; % end "1"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{2}
% The digit `2'. 
%    \begin{macrocode}
cmchar "TGOTH digit 2";
beginchar("2", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := u;
numeric st; st := stem_width;
numeric n[];
n1 := 1/2st;
pickup quill;
% stem
lft x1=pcshiftx+n1; top y1=h-2n1;
rt x3=w-pcshiftx-n1; y3=3/4h;
x2=1/2[x1,x3]; top y2= h;
% foot
x5= lft x1; bot y5=0;
x6= rt x3; y6=y5;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_wave(5,6,thin);                          % foot
draw z1--z2--z3--z5wl;                          % curve
ductus:=false;
penlabels(1,2,3,4,5,6,100);
endchar; % end "2"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{3}
% The digit `3'. 
%    \begin{macrocode}
cmchar "TGOTH digit 3";
beginchar("3", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
numeric n[];
numeric st; st := stem_width;
n1 := st;
pcshiftx := u;
pickup quill;
%% top
lft x1 = pcshiftx + n1; rt x3 = w - pcshiftx - n1;
x2 = 1/2[x1,x3]; x4 = 1/2[x1,x2];
top y2 = h; y3 = 12/16h;
(z2-z1) = whatever*pdir;
(z3-z4) = whatever*pdir;
%% bottom
x5 = 12/16[x4, rt x4]; x6 = x3; x7 = x2; 
x18 = x1-n1; x17 = x7;
bot y7 = thin;
y5 = 12/16[y4, top y4]; 
(z5-z6) = whatever*(z2-z3);
bot y18 = 0; bot y17 = 0;

draw z1--z2--z3--z4;   % top
draw_wave(18,17,thin);
draw z5--z6--z18wr;       % bottom
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,10,17,18,100);
endchar; % end "3"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{4}
% The digit `4'.
%    \begin{macrocode}
cmchar "TGOTH digit 4";
beginchar("4", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
numeric st; st := stem_width;
numeric n[];
pcshiftx := u;
pickup quill;
% the stem
x1=x2=w-pcshiftx-(wided+widedmin)*st;
y1=h;  y2=0;
% the crossbar
lft x3=pcshiftx; y3=7/16h;
rt x4=w-pcshiftx; y4=y3;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_downdiamondstem(1,2,wided,widedmin,diawd,diang);   % stem
draw z3--z4;                       % horizontal
draw z1--z3;                       % diagonal
ductus:=false;
penlabels(1,2,3,4,100);
endchar; % end "4"

%    \end{macrocode}
% \end{routine}
%
%
%
% \begin{routine}{5}
% The digit `5'.
%    \begin{macrocode}
cmchar "TGOTH digit 5";
beginchar("5", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := u;
numeric n[];
numeric st; st := stem_width;
n1 := st;
pickup quill;
% for the top
rt x1=w-pcshiftx; top y1=h;
lft x2=pcshiftx+n1; y2=y1;
% the S curve
x3=x2; y3=0.5h;
x4=0.5[x1,x3]; y4=0.5[y3,y5];
rt x5=w-pcshiftx; y5=1/2[thick,y3];
x6=w/2; bot y6=0;
%%x16 = 12/16[x3,x5]; 
x16 = lft x5;
bot y16 = 0;
lft x17=pcshiftx; bot y17=0;
z167 = 1/2[z16,z17];
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_wave(2,1,thin);                      % top squiggle
draw z2wl--z3;                            % vertical
%%draw_wave(17,16,thin);                    % foot
draw z17{pdir}..{pdir}z16;              % foot
draw z3{pdir}..z5{down}..z16;    % curve
ductus:=false;
penlabels(1,2,3,4,5,6,7,100);
endchar; % end "5"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{6}
% The digit `6'.
%    \begin{macrocode}
cmchar "TGOTH digit 6";
beginchar("6", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[]; 
numeric st; st := stem_width;
n1 := 24/16st;
pickup quill;
%% bottom left
x1 = x4 = w/2; top y1 = h - thick; bot y4 = 0;
x2 = x3 = x1 + n1; x5 = x6 = x1 - n1;
y2 = y6 = 3/4[y4,y1];
y3 = y5 = 1/4[y4,y1];
%% bowl
draw z1--z2--z3--z4--z5--z6--cycle;
%% head
x11 = x5; top y11 = h;
x12 = x2; y12 = y11;
draw_wave(11,12,thin);
x16 = x11; y16 = y11-thin;
draw z6--z16;
penlabels(1,2,3,4,5,6,12,100);
endchar; % end "6"

%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{7}
% The digit `7'.
%    \begin{macrocode}
cmchar "TGOTH digit 7";
beginchar("7", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := u;
pickup quill;
% top bar
lft x1=pcshiftx;
rt x2=w-pcshiftx;
top y1=top y2=h;
% bowed leg
x4=w/2; bot y4=0;
x3=0.5[x2,x4]-3thin; y3=0.5[y2,y4];
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_wave(1,2,thin);         % top bar
draw z1wr..z3..z4;
ductus:=false;
penlabels(1,2,3,4,5,6,100);
endchar; % end "7"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{8}
% The digit `8'.
%    \begin{macrocode}
cmchar "TGOTH digit 8";
beginchar("8", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := u;
numeric alpha; alpha:=1;
pickup quill;
lft x1= pcshiftx; rt x3=w-pcshiftx; top y1 = y3 = 3/4h;
rt x2 = lft x4 = w/2; top y2=h; bot y4=0;
x5=x2; y5=h/2+2o;
lft x11=pcshiftx; rt x13=w-pcshiftx; y11 = bot y13 = 1/4h;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
%%draw z1..z2..z3..z5..z11..z4..z13..z5..cycle;
draw z1--z2--z3--z11--z4--z13--cycle;
ductus:=false;
penlabels(1,2,3,4,5,11,13,100);
endchar; % end "8"

%    \end{macrocode}
% \end{routine}
%
% \begin{routine}{9}
% The digit `9'.
%    \begin{macrocode}
cmchar "TGOTH digit 9";
beginchar("9", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[]; 
numeric st; st := stem_width;
n1 := 24/16st;
pickup quill;
%% bottom left
x1 = x4 = w/2; top y1 = h; bot y4 = thick;
x2 = x3 = x1 + n1; x5 = x6 = x1 - n1;
y2 = y6 = 3/4[y4,y1];
y3 = y5 = 1/4[y4,y1];
%% bowl
draw z1--z2--z3--z4--z5--z6--cycle;
%% foot
x11 = x5; bot y11 = 0;
x12 = x2; y12 = y11;
draw_wave(11,12,thin);
x13 = x12; y13 = y12+thin;
draw z3--z13;
penlabels(1,2,3,4,5,6,12,100);
endchar; % end "9"


%    \end{macrocode}
% \end{routine}
%
%
% \begin{routine}{0}
% The digit `0'.
%    \begin{macrocode}
cmchar "TGOTH digit 0";
beginchar("0", 2u#+fig_width#, fig_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[]; 
numeric st; st := stem_width;
n1 := 24/16st;
pickup quill;
%% bottom left
x1 = x4 = w/2; top y1 = h; bot y4 = 0;
x2 = x3 = x1 + n1; x5 = x6 = x1 - n1;
y2 = y6 = 3/4h;
y3 = y5 = 1/4h;

draw z1--z2--z3--z4--z5--z6--cycle;

penlabels(1,2,3,4,5,6,12,100);
endchar; % end "0"

%    \end{macrocode}
% \end{routine}
%
%
% The end of this file.
%    \begin{macrocode}
%</dig>
%    \end{macrocode}
%
%
% \section{The font definition files} \label{sec:fd}
%
%    The font comes in normal and bold weights only.
%
%    \begin{macrocode}
%<*fdot1>
\DeclareFontFamily{OT1}{tgoth}{}
  \DeclareFontShape{OT1}{tgoth}{m}{n}{ <-8.5> tgoth7 <8.5-15> tgoth10 <15-> tgoth17 }{} 
  \DeclareFontShape{OT1}{tgoth}{m}{sl}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{OT1}{tgoth}{m}{it}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{OT1}{tgoth}{m}{sc}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{OT1}{tgoth}{m}{u}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{OT1}{tgoth}{bx}{n}{ <-15> tgothb10 <15-> tgothb17 }{}
  \DeclareFontShape{OT1}{tgoth}{bx}{it}{ <-> sub * tgoth/bx/n }{}
  \DeclareFontShape{OT1}{tgoth}{bx}{sl}{ <-> sub * tgoth/bx/n }{}
  \DeclareFontShape{OT1}{tgoth}{b}{n}{ <-> sub * tgoth/bx/n }{}
%</fdot1>
%    \end{macrocode}
%
%
%    \begin{macrocode}
%<*fdt1>
\DeclareFontFamily{T1}{tgoth}{}
  \DeclareFontShape{T1}{tgoth}{m}{n}{ <-8.5> tgoth7 <8.5-15> tgoth10 <15-> tgoth17 }{} 
  \DeclareFontShape{T1}{tgoth}{m}{sl}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{T1}{tgoth}{m}{it}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{T1}{tgoth}{m}{sc}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{T1}{tgoth}{m}{u}{ <-> sub * tgoth/m/n }{}
  \DeclareFontShape{T1}{tgoth}{bx}{n}{ <-15> tgothb10 <15-> tgothb17 }{}
  \DeclareFontShape{T1}{tgoth}{bx}{it}{ <-> sub * tgoth/bx/n }{}
  \DeclareFontShape{T1}{tgoth}{bx}{sl}{ <-> sub * tgoth/bx/n }{}
  \DeclareFontShape{T1}{tgoth}{b}{n}{ <-> sub * tgoth/bx/n }{}
%</fdt1>
%    \end{macrocode}
%
% \section{The package code} \label{sec:code}
%
% \subsection{The \Lpack{tgothic} package}
%
%    The \Lpack{tgothic} package is for typesetting short pieces of text
% in the \thisfont{} fonts.
%
%    Announce the name and version of the package, which requires
% \LaTeXe{}.
%    \begin{macrocode}
%<*usc>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tgothic}[2002/12/30 v1.0 package for Gothic Textura fonts]
%    \end{macrocode}
%
% \begin{macro}{\Tienc}
%  A  macro for testing the value of |\encodingdefault|.
%    \begin{macrocode}
\providecommand{\Tienc}{T1}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\tgothfamily}
%    Selects the \thisfont{} font family in the OT1 or T1 encoding.
%    \begin{macrocode}
\ifx\Tienc\encodingdefault
  \newcommand{\tgothfamily}{\usefont{T1}{tgoth}{m}{n}}
\else
  \newcommand{\tgothfamily}{\usefont{OT1}{tgoth}{m}{n}}
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\texttgoth}
%    Text command for the \thisfont{} font family.
%    \begin{macrocode}
\DeclareTextFontCommand{\texttgoth}{\tgothfamily}
%    \end{macrocode}
% \end{macro}
%
%    The end of this package.
%    \begin{macrocode}
%</usc>
%    \end{macrocode}
%
% \subsection{The \Lpack{alltgoth} package}
%
%    The \Lpack{alltgoth} package is intended for use when the entire document
% will be typeset in the book-hand. This is a minimal package. Because the
% book-hand should not contain arabic digits a fuller package would redefine
% anything numbered in \LaTeX{} to use roman instead of arabic numbering.
% Also, because of the large |\baselineskip| many other aspects of \LaTeX{}
% to do with vertical positioning should also be redefined. 
%
%
%    Announce the name and version of the package, which requires
% \LaTeXe{}. It also uses the \Lpack{tgothic} package.
%    \begin{macrocode}
%<*uscall>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{alltgoth}[2002/12/30 v1.0 package for all Gothic Textura fonts]
\RequirePackage{tgothic}
%    \end{macrocode}
%
% \begin{macro}{\Tienc}
%  A  macro for testing the value of |\encodingdefault|.
%    \begin{macrocode}
\providecommand{\Tienc}{T1}
%    \end{macrocode}
% \end{macro}
%
%  Redefine the default fonts to be \thisfont, which has only one family 
% member.
% \begin{macro}{\rmdefault}
% \begin{macro}{\sfdefault}
% \begin{macro}{\ttdefault}
%    \begin{macrocode}
\renewcommand{\rmdefault}{tgoth}
\renewcommand{\sfdefault}{tgoth}
\renewcommand{\ttdefault}{tgoth}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The `leading' in the book-hands is a function of the |x-height|, which is 
% normally much
% greater than for the CMR fonts. I have borrowed code from Frank Jensen's
% \Lpack{beton} package~\cite{BETON} to do this. The |x-height| (in points) 
% for the CMR
% fonts is given in Table~\ref{tab:cmrx}. Note that the CMR design sizes are
% 5--10, 12, and 17.28 points. The other values given are scaled from these 
% figures.
%
% \begin{table}
% \centering
% \caption{The x heights of the CMR and \thisfont{} fonts} \label{tab:cmrx}
% \begin{tabular}{ccc} \hline
% Design & CMR & \thisfont \\
% Size & X Height & X Height \\ \hline
% 5 & 2.14 & 3.00 \\     ^^A CMR skip = 6pt = 2.8 times
% 6 & 2.58 & 3.61 \\     ^^A CMR skip = 7pt = 2.7 times
% 7 & 3.00 & 4.20 \\     ^^A CMR skip = 8pt = 2.7 times
% 8 & 3.44 & 4.81 \\     ^^A CMR skip = 9.5pt = 2.8 times
% 9 & 3.86 & 5.40 \\     ^^A CMR skip = 11pt = 2.8 times
% 10 & 4.31 & 6.03 \\    ^^A CMR skip = 12pt = 2.8 times
% 11 & 4.74 & 6.64 \\    ^^A CMR skip = 13.6pt = 2.8 times
% 12 & 5.17 & 7.24 \\    ^^A CMR skip = 14.5pt = 2.8 times
% 14 & 6.03 & 8.44 \\    ^^A CMR skip = 18pt = 3.0 times
% 17 & 7.44 & 10.41 \\    ^^A CMR skip = 22pt = 3.0 times
% 20 & 8.75 & 12.25  \\   ^^A CMR skip = 25pt = 2.9 times
% 25 & 10.94 & 15.32 \\  ^^A CMR skip = 30pt = 2.7 times
% \hline
% \end{tabular}
% \end{table}
%
% \begin{macro}{\tgoth@baselineskip@table}
% A table of the normal font sizes and the corresponding baselineskip.
% The distance between baselines for \thisfont{} is over twice 
% the |x-height|.  ^^A actually 2.5 times to nearest half point
% 
%    \begin{macrocode}
\newcommand{\tgoth@baselineskip@table}{%
  <\@vpt>7.5%
  <\@vipt>9.0%
  <\@viipt>10.5%
  <\@viiipt>12.0%
  <\@ixpt>13.5%
  <\@xpt>15.0%
  <\@xipt>16.5%
  <\@xiipt>18.0%
  <\@xivpt>21.0%
  <\@xviipt>26.0%
  <\@xxpt>30.5%
  <\@xxvpt>38.5}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\tgoth@new@setfontsize}
%  This is a macro that replaces the |\@setfontsize| macro which is called by
% the font size changing commands.
%    \begin{macrocode}
\newcommand{\tgoth@new@setfontsize}[3]{%
  \edef\@tempa{\def\noexpand\@tempb####1<#2}%
  \@tempa>##2<##3\@nil{\def\tgoth@baselineskip@value{##2}}%
  \edef\@tempa{\noexpand\@tempb\tgoth@baselineskip@table<#2}%
  \@tempa><\@nil
  \ifx\tgoth@baselineskip@value\@empty
    \def\tgoth@baselineskip@value{#3}%
  \fi
  \tgoth@old@setfontsize{#1}{#2}\tgoth@baselineskip@value}
%    \end{macrocode}
% \end{macro}
%
% We had better give an author a means of using The Computer Modern fonts
% if necessary.
%
% \begin{macro}{\cmrfamily}
% \begin{macro}{\cmssfamily}
% \begin{macro}{\cmttfamily}
%    These macros select the Computer Modern Roman, Sans, and Typewriter 
% font families in either the T1 or OT1 encodings.
%    \begin{macrocode}
\ifx\Tienc\encodingdefault
  \providecommand{\cmrfamily}{\usefont{T1}{cmr}{m}{n}}
  \providecommand{\cmssfamily}{\usefont{T1}{cmss}{m}{n}}
  \providecommand{\cmttfamily}{\usefont{T1}{cmtt}{m}{n}}
\else
  \providecommand{\cmrfamily}{\usefont{OT1}{cmr}{m}{n}}
  \providecommand{\cmssfamily}{\usefont{OT1}{cmss}{m}{n}}
  \providecommand{\cmttfamily}{\usefont{OT1}{cmtt}{m}{n}}
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\textcmr}
%    Text command for the Computer Modern Roman font family.
%    \begin{macrocode}
\DeclareTextFontCommand{\textcmr}{\cmrfamily}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\textcmss}
%    Text command for the Computer Modern Sans font family.
%    \begin{macrocode}
\DeclareTextFontCommand{\textcmss}{\cmssfamily}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\textcmtt}
%    Text command for the Computer Modern Typewriter font family.
%    \begin{macrocode}
\DeclareTextFontCommand{\textcmtt}{\cmttfamily}
%    \end{macrocode}
% \end{macro}
%
%
% At the start of the document, change the |\@setfontsize| macro and call
% the normal font to implement the change.
%    \begin{macrocode}
\AtBeginDocument{%
  \let\tgoth@old@setfontsize=\@setfontsize
  \let\@setfontsize=\tgoth@new@setfontsize}
\AtBeginDocument{\normalsize}
%    \end{macrocode}
%
%
%    The end of this package.
%    \begin{macrocode}
%</uscall>
%    \end{macrocode}
%
%
%
%
%
% \Finale
% \PrintIndex
%
\endinput

%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}