% \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} % % % \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> %%%% TGOTH7.MF Gothic Textura Quadrata at 7 point design size. %%%% TGOTH10.MF Gothic Textura Quadrata at 10 point design size. %%%% TGOTH17.MF Gothic Textura Quadrata at 17 point design size. %%%% TGOTHB7.MF Gothic Textura Quadrata Bold at 7 point design size. %%%% TGOTHB10.MF Gothic Textura Quadrata Bold at 10 point design size. %%%% 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 %font_identifier:="TGOTH"; font_size 7pt#; %font_identifier:="TGOTH"; font_size 10pt#; %font_identifier:="TGOTH"; font_size 17.28pt#; %font_identifier:="TGOTHB"; font_size 7pt#; %font_identifier:="TGOTHB"; font_size 10pt#; %font_identifier:="TGOTHB"; font_size 17.28pt#; % \end{macrocode} % % \DescribeVariable{jutstretch} % The CMR scaling for lowercase serifs wrt 17pt size. % \begin{macrocode} % jutstretch:=1.19; % jutstretch:=1.152; % jutstretch:=1.0; % \end{macrocode} % % \DescribeVariable{stemstretch} % The CMR scaling for lowercase stem widths wrt 17pt size. % \begin{macrocode} % stemstretch:=1.50; % stemstretch:=1.31; % 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} % cap_jutstretch:=1.3; % cap_jutstretch:=1.2; % cap_jutstretch:=1.0; % \end{macrocode} % % \DescribeVariable{cap_stemstretch} % The CMR scaling for uppercase stem width wrt 17pt size. % \begin{macrocode} % cap_stemstretch:=1.45; % cap_stemstretch:=1.31; % 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} % bfudge:=1.0; % bfudge:=1.0; %% normally 1.2 % \end{macrocode} % % \DescribeVariable{szfudge} % Width scaling wrt 17pt letter width. % \begin{macrocode} % szfudge:=1.18; % szfudge:=1.0; % 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} % carol_height#:=108.5/36pt#; % carol_height#:=155/36pt#; % 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} % u#:=15.5/36pt#; % u#:=20/36pt#; % u#:=32.5/36pt#; % u#:=17.9/36pt#; % u#:=23/36pt#; % 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 % cap_serif_fit#:=3.5/36pt#; % extra sidebar near uppercase serifs % cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs % cap_serif_fit#:=8/36pt#; % extra sidebar near uppercase serifs % letter_fit#:=0pt#; % extra space added to all sidebars % letter_fit#:=0pt#; % extra space added to all sidebars % 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} % sb#:=1/4u#; % unit for side bearings % sb#:=1/4u#; % unit for side bearings % 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} % cap_sb#:=2sb#; % unit for uppercase side bearings % cap_sb#:=2sb#; % unit for uppercase side bearings % cap_sb#:=2sb#; % unit for uppercase side bearings % \end{macrocode} % % \DescribeVariable{cap_height} % The height of capital letters. % \begin{macrocode} % cap_height#:=172.2/36pt#; % height of caps % cap_height#:=246/36pt#; % height of caps % 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} % thickfudge:=1/5; % 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} % rule_thickness#:=.34pt#; % rule_thickness#:=.4pt#; % 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} % o#:=5/36pt#; % o#:=8/36pt#; % 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} % % \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 $0y$$: 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 $0y$$: 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 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. % % \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} % % \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} % % \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} % % \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} % % \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} % % \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> tgothr7 <8.5-15> tgothr10 <15-> tgothr17 }{} \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 }{} % % \end{macrocode} % % % \begin{macrocode} %<*fdt1> \DeclareFontFamily{T1}{tgoth}{} \DeclareFontShape{T1}{tgoth}{m}{n}{ <-8.5> tgothr7 <8.5-15> tgothr10 <15-> tgothr17 }{} \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 }{} % % \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} % % \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} % % \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 \~}