% \iffalse meta-comment % % rustic.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 \setcounter{StandardModuleDepth}{1} \begin{document} \DocInput{rustic.dtx} \end{document} % % % \fi % % \CheckSum{137} % % \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}{1999/05/01}{First public release} % \changes{v1.0a}{2001/01/02}{Fixed missing * in .fd files} % % ^^A \def\fileversion{v1.0} % ^^A \def\filedate{1999/05/01} % \def\fileversion{v1.0a} % \def\filedate{2001/01/02} % \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}} % % \title{The \Lpack{rustic} 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{rustic} and \Lpack{allrust} packages provide a set of % Metafont Roman Rustic book-hands % as used % for manuscripts in the 1st to the 6th century. This is one in a series % of manuscript fonts. % \end{abstract} % \tableofcontents % % \StopEventually{} % % % % \section{Introduction} % % The \Lpack{rustic} and \Lpack{allrust} packages provide % a Metafont~\cite{METAFONT} version % of the Roman Rustic manuscript book-hand that was in use between about the % first and sixth 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 packages 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 % calligraphic, 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 \\ % Artificial Uncial & 6--10 & 4.2 & 3--6 & 10 & 1.40 \\ % Half Uncial & 3--9 & 3.2 & 3--6 & 20--30 & 1.07 \\ % 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. % % In the first century punctuation was virtually unknown, and typically there % 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 Roman Rustic script} % % The Roman Rustic hand, which is a majuscule script, was in use for some five % centuries until it was suceeded by the Uncial book-hands. Usually the % lettering in a manuscript was all one size. If the scribe felt the need % for `capital' letters then, using the same pen, would write a slightly larger % letter. % During the period when the % script was used the alphabet only had 23 letters. I have included % the missing J, U and W. % % Arabic numerals were unknown at this time, so all numbers were written % using the roman numbering system. I have provided Roman Rustic versions of % the arabic digits. % % Punctuation was non-existant. A dot at mid-height might be used as % a word seperator, but that was all. Paragraphs had no indentation, neither % was there any extra vertical space between paragraphs. Essentially, the % script ran continuously with no spaces, even between words. % % The `leading' --- the amount of white space between lines --- was about % the same height as the letters. % % % \section{The \Lpack{rustic} and \Lpack{allrust} package} \label{sec:usc} % % The Roman Rustic font family is called |rust|. The font is supplied in both % OT1 and T1 encodings. % % \subsection{The \Lpack{rustic} package} % % This is intended for the occasions when some short pieces of text have to be % written in Roman Rustic while the majority of the document is in another font. % The normal baselineskips are used. % % \DescribeMacro{\rustfamily} % The |\rustfamily| declaration starts typesetting with the Roman Rustic fonts. % Use of the Rustic font will continue until either there is another |\...family| % declaration or the current group (e.g., environment) is closed. % % \DescribeMacro{\textrust} % The command |\textrust{|\meta{text}|}| will typeset \meta{text} using the % Roman Rustic fonts. % % \subsection{The \Lpack{allrust} package} % % This package is for when the entire document will be typeset with the % Roman Rustic font. The baselineskips are set to those appropriate to the % book-hand. % % This is a minimalist package. Apart from declaring Roman Rustic 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{allrust} package automatically loads the \Lpack{rustic} package, % so the rustic font commands are available if necessary. % % % % \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 Rustic font comes in three sizes and also as a normal % and a bold font. % \begin{macrocode} %<*base7|base10|base17|base7b|base10b|base17b> %%%% RUST7.MF Roman Rustic at 7 point design size. %%%% RUST10.MF Roman Rustic at 10 point design size. %%%% RUST17.MF Roman Rustic at 17 point design size. %%%% RUSTB7.MF Roman Rustic Bold at 7 point design size. %%%% RUSTB10.MF Roman Rustic Bold at 10 point design size. %%%% RUSTB17.MF Roman Rustic 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:="RUST"; font_size 7pt#; %font_identifier:="RUST"; font_size 10pt#; %font_identifier:="RUST"; font_size 17.28pt#; %font_identifier:="RUSTB"; font_size 7pt#; %font_identifier:="RUSTB"; font_size 10pt#; %font_identifier:="RUSTB"; font_size 17.28pt#; % \end{macrocode} % % \DescribeVariable{jutstretch} % The scaling for minuscule serifs wrt 17pt size. % \begin{macrocode} % jutstretch:=1.19; % jutstretch:=1.152; % jutstretch:=1.0; % \end{macrocode} % % \DescribeVariable{stemstretch} % The scaling for minuscule 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'. This is pretty much a guess. % \begin{macrocode} caprat:=1.2; % ratio of capital height to minuscule height % \end{macrocode} % % \DescribeVariable{cap_jutstretch} % Scaling for majuscule serifs wrt 17pt size. % \begin{macrocode} % cap_jutstretch:=1.3; % cap_jutstretch:=1.2; % cap_jutstretch:=1.0; % \end{macrocode} % % \DescribeVariable{cap_stemstretch} % Scaling for majuscule 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. % \begin{macrocode} % bfudge:=1.0; % bfudge:=1.2; % \end{macrocode} % % \DescribeVariable{szfudge} % Width scaling wrt 17pt size letter width. % \begin{macrocode} % szfudge:=1.18; % szfudge:=1.0; % szfudge:=1.0; % \end{macrocode} % % \DescribeVariable{hstretch} % Horizontal stretching factor. % \begin{macrocode} hstretch:=szfudge*bfudge; % \end{macrocode} % % \DescribeVariable{carol_height} % The x-height of the Carolingian minuscule 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.9; % \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{thickfudge} % The reciprocal of the font height in nib widths. Normal font height % is 6 nib widths and the bold font height is 4.5 nib widths. % \begin{macrocode} % thickfudge:=1/6; % thickfudge:=1/4.5; % \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{u} % The unit width. The CMR values are used. % \begin{macrocode} % u#:=15.5/36pt#; % u#:=17.9/36pt#; % u#:=20/36pt#; % u#:=23/36pt#; % u#:=32.5/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{asc_height} % The height of lower case ascenders. % \begin{macrocode} asc_height#:=6/5x_height#; % \end{macrocode} % % \DescribeVariable{desc_depth} % The depth of lower case descenders (the tail of the Q). % \begin{macrocode} desc_depth#:=2/3thick#; % \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. % \begin{macrocode} fig_width#:=hstretch*(3/5x_height#); % \end{macrocode} % % \DescribeVariable{cap_height} % The height of capital letters. % \begin{macrocode} cap_height#:=caprat*asc_height#; % height of caps % \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:= 5/8; % \end{macrocode} % % \DescribeVariable{jut} % The lowercase serif protrusion. % \begin{macrocode} jut#:=jutstretch*jutfudge*thick#; % \end{macrocode} % % \DescribeVariable{hookjut} % The horizontal protrusion of hook serifs. % \begin{macrocode} hookjut#:=1/2jut#; % \end{macrocode} % % \DescribeVariable{footjut} % Half the horizontal width of a foot stroke, assuming vertical ends. % \begin{macrocode} footjut#:=2/20x_height#; % \end{macrocode} % % \DescribeVariable{extra_fhjut} % Half the extra horizontal width of a foot or head stroke, taking sloped % ends into account. Thus the maximum overall horizontal width is % |2(footjut+extra_fhjut)|. % \begin{macrocode} extra_fhjut#:=1/3thick#; % \end{macrocode} % % \DescribeVariable{stem_offset} % The x offset of the center of a left (stem + foot) from the left of the % character box. % \begin{macrocode} stem_offset#:=8/12thick#+thin#; % \end{macrocode} % % \DescribeVariable{srad} % |srad| with |0 < srad < 1| controls the serif radius. % \begin{macrocode} srad:=0.5; % \end{macrocode} % % \DescribeVariable{wiggle} % Controls the amount of wiggle in a |squiggle|, with |0 <= wiggle <1|. % \begin{macrocode} wiggle:= 0.05; % \end{macrocode} % % \DescribeVariable{bowoff} % Controls the amount of bow in a |bow|, with |0 <= bowoff <1|. % \begin{macrocode} bowoff:= 0.05; % \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{thick_tltobr} % A vector of the slope of thick diagonals from the top left point to the % bottom right point. Use as: % |ztl-zbr = whatever*thick_tltobr|. % \begin{macrocode} pair thick_tltobr; thick_tltobr:=(-2,5); % \end{macrocode} % % \DescribeVariable{slant} % |slant| is the amount the font slopes to the right. % \begin{macrocode} slant:=0; % tilt ratio $(\Delta x/\Delta y)$ % \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#:=2.5dot_size#; % \end{macrocode} % % Finally, call the driver file for the font. % \begin{macrocode} generate rusttitle %% 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 RUSTTITLE.MF for the Roman Rustic 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}{rustic_font_setup} % This macro contains the set up for the fonts. % \begin{macrocode} def rustic_font_setup= 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,cap_jut); define_pixels(hookjut,footjut,stem_offset,extra_fhjut,fig_width); define_whole_pixels(letter_fit); 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); 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{quill} % The normal calligraphic pen is |quill|. % \begin{macrocode} pickup pencircle xscaled thick yscaled thin rotated pangle; quill:=savepen; % \end{macrocode} % \DescribeVariable{bowpen} % The pen for drawing a bow is |bowpen|. % \begin{macrocode} pickup pencircle xscaled thick yscaled thin rotated ((1/2(pangle+90))); bowpen:=savepen; 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 rustic_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{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_rusticstem} % A macro to draw a rustic thin vertical stem. % |draw_rusticstem(1,2)| draws the stem with top at |z1| and bottom at |z2|. % \begin{macrocode} def draw_rusticstem(suffix $, $$)= numeric alpha, beta; alpha:=0.5thick; beta:=60; % the ending angle pair rustic[]; xpart rustic1=x$$; ypart rustic1=y$$+alpha*sind(beta); z$a=1/2[z$,rustic1]; z$b=2/3[z$,rustic1]; z$c=5/6[z$,rustic1]; z$d=rustic1; z$ar=z$a shifted (alpha*up); z$al=z$a shifted (alpha*down); rustic2:=z$b shifted (alpha*right); z$br=rustic2 rotatedaround(z$b,1/4[90,beta]); z$bl=z$br rotatedaround(z$b,180); rustic2:=z$c shifted (alpha*right); z$cr=rustic2 rotatedaround(z$c,1/2[90,beta]); z$cl=z$cr rotatedaround(z$c,180); rustic2:=z$d shifted (alpha*right); %% z$dr=rustic2 rotatedaround(z$d,60); z$dl=z$dr rotatedaround(z$d,180); rustic3=rustic2 rotatedaround(z$d,beta); x$dr=xpart rustic3; y$dr=ypart rustic3 - thin; z$dl=z$dr rotatedaround(z$d,180); pen oldpen; oldpen:=currentpen; pickup stylus; draw z$--z$al; %% filldraw z$ar..z$br..z$cr..z$dr--z$dl..z$cl..z$bl..z$al--cycle; filldraw z$ar..z$br..z$cr..z$dr--z$dl..z$bl..z$al--cycle; pickup oldpen; %% labels($a,$al,$ar,$b,$bl,$br,$c,$cl,$cr,$dl,$dr); labels($a,$b,$c,$d,$dl,$dr); enddef; % end of draw_rusticstem % \end{macrocode} % \end{routine} % % \begin{routine}{draw_hserif} % A macro to draw a hooked serif. |draw_hserif(1,2,f)| uses the |stylus| pen to % draw a serif of extent |hookjut| 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: if y$=y$$: if x$ % \end{macrocode} % % \subsection{The code for normal letters} % % The following code is for the normal alphabetic characters. % % \begin{macrocode} %<*min> % RUSTL.MF Program file for normal rustic letters % % \end{macrocode} % % % \begin{routine}{a} % The letter `a'. % \begin{macrocode} cmchar "Rustic letter a"; beginchar("a", 2u#+hstretch*(4/5x_height#+jut#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % right leg z1-z2=whatever*thick_tltobr; top y1=h; rt x2=w-pcshiftx-jut; bot y2=0; % for the left leg z3=9/10[z2,z1]; x4=pcshiftx+footjut+extra_fhjut; bot y4=0; % code for foot x7=x4; y7=0; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % right leg draw_bow(3,4,bowoff); % left leg draw_foot(7); % left leg foot ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "a" % \end{macrocode} % \end{routine} % % \begin{routine}{b} % The letter `b'. This is a tall letter % \begin{macrocode} cmchar "Rustic letter b"; beginchar("b", 2u#+hstretch*(7/10x_height#), 11/10x_height#, 0); adjust_fit(0,0); pcshiftx := u+hookjut+thin; pickup quill; % stem x1=x2=pcshiftx; y1=h; y2=0; % bottom bowl rt x3=x1; bot y3=thin; rt x5=w-u; y5 = 1/6h; x4=0.4[x2,x5]; y4=0; lft x6=x2; y6=2/3h; % top bowl z7=z6; x8=0.25[x4,x5]; top y8=y1; x9=0.5[x1,x8]; bot y9=h; z10=z1; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % the stem draw z3..z4{right}..z5..{dir(pangle+90)}z6; % bottom bowl draw z7{pdir}..z8{up}..z9{left}..z10; % top bowl ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,10,100); endchar; % end "b" % \end{macrocode} % \end{routine} % % % \begin{routine}{c} % The letter `c'. % \begin{macrocode} cmchar "Rustic letter c"; beginchar("c", 2u#+hstretch*(3/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=pcshiftx+sqxside; y1=y3=h/2; x2=x4=w/2; top y2=h; bot y4=0; rt x5= rt x6=w-pcshiftx; top y5=1/5h; top y6=4/5h; %%ductus:=true; if ductus: pickup stylus; fi draw z5{-pdir}..{left}z4..z1..z2..z6; ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "c" % \end{macrocode} % \end{routine} % % \begin{routine}{d} % The letter `d'. % \begin{macrocode} cmchar "Rustic letter d"; beginchar("d", 2u#+hstretch*(3/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=pcshiftx+hookjut+thin; top y1=h; y2=0; % bowl rt x3=x1; bot y3=thin; rt x5=w-u; y5 = 2/5h; x4=0.4[x2,x5]; y4=0; x6=x1; top y6=h; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw z3..z4{right}..z5{up}..z6; % bowl ductus:=false; penlabels(0,1,2,3,4,5,6,100); endchar; % end "d" % \end{macrocode} % \end{routine} % % \begin{routine}{e} % The letter `e'. % \begin{macrocode} cmchar "Rustic letter e"; beginchar("e", 2u#+hstretch*(4/10x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % stem x1=x2=pcshiftx+stem_offset; top y1=h; y2=0; % top bar rt x3=x1; x4=w-u; top y3=top y4=h; % middle bar x5=x3; x6=x4; y5=y6=3/5h; % foot x7=x3; x8=x4; bot y7= bot y8=0; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw_squiggle(3,4,wiggle,srad); % top bar draw_squiggle(5,6,wiggle,srad); % middle bar draw_squiggle(7,8,wiggle,srad); % bottom bar ductus:=false; penlabels(1,2,3,4,5,6,7,8,100); endchar; % end "e" % \end{macrocode} % \end{routine} % % \begin{routine}{f} % The letter `f'. This is a tall letter % \begin{macrocode} cmchar "Rustic letter f"; beginchar("f", 2u#+hstretch*(4/10x_height#), 6/5x_height#, 0); adjust_fit(0,0); pcshiftx := u +stem_offset; pickup quill; % stem x1=x2=pcshiftx; top y1=h; y2=0; % top bar x3=x1; x4=w-u; top y3=top y4=h; % middle bar x5=x3; x6=x4; y5=y6=2/3h; % foot x7=x3; x8=x4; bot y7= bot y8=0; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem draw_squiggle(3,4,wiggle,srad); % top bar draw_squiggle(5,6,wiggle,srad); % middle bar ductus:=false; penlabels(1,2,3,4,5,6,7,8,100); endchar; % end "f" % \end{macrocode} % \end{routine} % % % \begin{routine}{g} % The letter `g'. Like a `c' but bottom curls inwards. % \begin{macrocode} cmchar "Rustic letter g"; beginchar("g", 2u#+hstretch*(3/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=pcshiftx+sqxside; y1=y3=h/2; x2=x4=w/2; top y2=h; bot y4=0; rt x5= rt x6=w-pcshiftx; top y5=1/5h; top y6=4/5h; lft x7=w/2; y7=h/2; %%ductus:=true; if ductus: pickup stylus; fi draw z7..z5{down}..{left}z4..z1..z2..z6; % the bowl ductus:=false; penlabels(1,2,3,4,5,6,7,100); endchar; % end "g" % \end{macrocode} % \end{routine} % % \begin{routine}{h} % The letter `h'. % \begin{macrocode} cmchar "Rustic letter h"; beginchar("h", 2u#+hstretch*(4/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; y100 = sqyside/2; x100 = pcshiftx+y100; % square center pickup quill; % left stem and foot x1=x2=pcshiftx+stem_offset; y1=h; y2=0; % bar y5=y6=7/10h; lft x5=pcshiftx; rt x6=w-pcshiftx; % right stem rt x7=w-pcshiftx; top y7=h; x8=x7; bot y8=0; x9=x8-2thin; y9=0.5[y8,y7]; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % left stem draw_hserif(1,2,srad); % its serif draw_squiggle(5,6,wiggle,srad); % the bar draw z7..z9..z8; % right stem ductus:=false; penlabels(1,1',2,2',3,4,5,6,7,7',8,8',99,99',100); endchar; % end "h" % \end{macrocode} % \end{routine} % % \begin{routine}{i} % The letter i. % \begin{macrocode} cmchar "Rustic letter i"; beginchar("i", 2u#+hstretch*(2footjut#+hookjut#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=pcshiftx+stem_offset; y1=h; y2=0; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem and foot draw_hserif(1,2,srad); % serif ductus:=false; penlabels(1,2,3,4,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 "Rustic letter j"; beginchar("j", 4u#+hstretch*(3/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := 3u; pickup quill; % stem x1=x2=pcshiftx+2/3(w-4u); y1=h; y2=0; % top bar rt x4=w-u; top y4=h; x1-x3 = x4-x1; y3=y4; % bowl rt x5 = lft x3; top y5=2/5h; x7=x2; bot y7=0; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw_squiggle(3,4,wiggle,srad); % top bar draw z7{left}..{pdir}z5; % bowl ductus:=false; penlabels(1,2,3,4,5,6,7,100); endchar; % end "j" % \end{macrocode} % \end{routine} % % \begin{routine}{k} % The letter `k'. % \begin{macrocode} cmchar "Rustic letter k"; beginchar("k", 2u#+hstretch*(x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % the stem and its foot x1=x2=pcshiftx+stem_offset; y1=h; y2=0; lft x13=pcshiftx; bot y13=0; x2-x13=x14-x2; y14=y13; % upper diagonal and its top x3=x1; y3=h/2; x4=x1+y3; top y4=h; x5=x4-jut; x6-x4=x4-x5; top y5=top y6=h; x24=x4; y24=h; % bottom leg lft x7=x3; bot y7=y3; rt x9=w-pcshiftx; bot y9=0; x8=0.5[x7,x9]; y8=0.7[y7,y9]; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % the stem draw_hserif(1,2,srad); % its serif draw z3--z4; % upper diagonal draw_head(24); draw z7..z8..z9; % bottom leg ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,100); endchar; % end "k" % \end{macrocode} % \end{routine} % % \begin{routine}{l} % The letter `l'. This is a tall letter. % \begin{macrocode} cmchar "Rustic letter l"; beginchar("l", 2u#+hstretch*(1/2x_height#), 6/5x_height#, 0); adjust_fit(0,0); pcshiftx := u+hookjut; pickup quill; x1=x2=pcshiftx+thin+hookjut; y1=h; y2=0; rt x3=x1; rt x4=w-u; bot y3= bot y4=0; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw_hserif(1,2,srad); % serif draw_squiggle(3,4,wiggle,srad); % foot ductus:=false; penlabels(1,2,3,4,100); endchar; % end "l" % \end{macrocode} % \end{routine} % % \begin{routine}{m} % The letter `m'. Like 2 As stuck together. % \begin{macrocode} cmchar "Rustic letter m"; beginchar("m", 2u#+hstretch*(6/5x_height#+jut#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % right a thick diag z11-z12=whatever*thick_tltobr; rt x12=w-pcshiftx-jut; bot y12=0; top y11=h; % left a thin diag pickup bowpen; x4=pcshiftx+footjut+extra_fhjut; bot y4=thin; z3=9/10[z2,z1]; pickup quill; x7=x4; y7=0; % for the foot % the two thin diags are parallel, and just shifted horizontally z13=9/10[z12,z11]; z3-z4=z13-z14; y4=y14; % similarly for the two thick diags z1-z2=z11-z12; % y2=y12; x12-x2=1/3w; %%ductus:=true; if ductus: pickup stylus; fi % draw left a draw_istem(1,2,srad); % right leg draw_bow(3,4,bowoff); % left leg draw_foot(7); % left leg foot % draw right a draw_istem(11,12,srad); draw_bow(13,14,bowoff); ductus:=false; penlabels(1,2,3,4,5,6,11,12,13,14,100); endchar; % end "m" % \end{macrocode} % \end{routine} % % \begin{routine}{n} % The letter `n'. % \begin{macrocode} cmchar "Rustic letter n"; beginchar("n", 2u#+hstretch*(9/10x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left stem and foot x1=x2=pcshiftx+stem_offset; y1=h; y2=0; % right stem x5=x6=w-u-hookjut-thin; y5=y1; y6=y2; % diagonal x7=x1; y7=h; x9=x6; bot y9=0; x8=0.5[x7,x9]; y8=0.6[y7,y9]; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % left stem draw_rusticstem(5,6); % right stem draw_hserif(5,6,srad); % its serif draw z7..z8..z9; % diagonal draw_serif(9,8,srad); % its bottom serif ductus:=false; penlabels(1,2,5,6,7,8,9,100); endchar; % end "n" % \end{macrocode} % \end{routine} % % \begin{routine}{o} % The letter `o'. % \begin{macrocode} cmchar "Rustic letter o"; beginchar("o", 2u#+hstretch*(3/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=w-pcshiftx; y1=y3=h/2; x2=x4=w/2; top y2=h+o; bot y4=-o; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2..z3..z4..cycle; ductus:=false; penlabels(1,2,3,4,100); endchar; % end "o" % \end{macrocode} % \end{routine} % % \begin{routine}{p} % The letter `p'. % \begin{macrocode} cmchar "Rustic letter p"; beginchar("p", 2u#+hstretch*(5/10x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % stem and foot x1=x2=pcshiftx+stem_offset; top y1=h; y2=0; % bowl lft x7=x2; y7=1/2h; % y7=2/3h; rt x8=w-pcshiftx; top y8=y1; z10=z1; x9=0.5[x1,x8]; y9=h; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem draw z7{pdir}..z8{up}..z9{left}..z10; % top bowl ductus:=false; penlabels(1,2,7,8,9,10,100); endchar; % end "p" % \end{macrocode} % \end{routine} % % \begin{routine}{q} % The letter `q'. % \begin{macrocode} cmchar "Rustic letter q"; beginchar("q", 2u#+hstretch*(3/5x_height#), x_height#, 2/3thick#); adjust_fit(0,0); pcshiftx := u; pickup quill; % the O shape lft x1=pcshiftx; rt x3=w-pcshiftx; y1=y3=h/2; x2=x4=w/2; top y2=h+o; bot y4=-o; % the tail path p; p = z4{right}..{up}z3; z5 = directionpoint pdir of p; x7= x4+w/2; top y7=0; x6=0.5[x5,x7]; y6=y7; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2..z3..z4..cycle; % O shape draw z5..z6..z7; % the tail ductus:=false; penlabels(0,1,2,3,4,5,6,6',7,100); endchar; % end "q" % \end{macrocode} % \end{routine} % % \begin{routine}{r} % The letter `r'. % \begin{macrocode} cmchar "Rustic letter r"; beginchar("r", 2u#+hstretch*(4/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; numeric alpha, beta; alpha:=thin*(xpart pdir); beta:=thin*(ypart pdir); pickup quill; % stem x1=x2=pcshiftx+stem_offset; top y1=h; y2=0; % bowl lft x7=x2; bot y7=1/2h; rt x8=5/8w; top y8=y1; z10=z1; x9=0.5[x1,x8]; y9=h; % leg z11=z7 shifted (thin*pdir); rt x13=w-pcshiftx; bot y13=0; x12=0.5[x11,x13]; y12=0.7[y11,y13]; % points defining the leg profile x11l=lft x11 + alpha; y11l=bot y11 + beta; x11r= rt x11 - alpha; y11r=top y11 - beta; x12l=0.6[lft x12, x12]; y12l=0.6[bot y12, y12]; x12r=0.6[rt x12, x12]; y12r=0.6[top y12, y12]; x14=w-pcshiftx-thin; y14=thin; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem and foot draw z7{pdir}..z8{up}..z9{left}..z10; % bowl pickup stylus; % drawing the leg filldraw z11l..z12l..{right}z14 & z14{left}..z12r..z11r--cycle; ductus:=false; penlabels(1,2,7,8,9,10,11,12,14,100); endchar; % end "r" % \end{macrocode} % \end{routine} % % \begin{routine}{s} % The letter `s'. % \begin{macrocode} cmchar "Rustic letter s"; beginchar("s", 2u#+hstretch*(3/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % for the foot lft x7=pcshiftx+extra_fhjut; bot y7=0; % the S curve rt x1=w-pcshiftx; top y1=h-thin; lft x3=pcshiftx+extra_fhjut; y3=0.75h; x4=0.5[x1,x3]; y4=0.5[y3,y5]; x2=x4; top y2=h; x5=x1; y5=0.3h; x6=0.75w; bot y6=0; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2{left}..z3{down}..z4..z5{down}..{-pdir}z6; % S curve draw_squiggle(7,6,wiggle,srad); % base ductus:=false; penlabels(1,2,3,4,5,6,7,100); endchar; % end "s" % \end{macrocode} % \end{routine} % % \begin{routine}{t} % The letter `t'. % \begin{macrocode} cmchar "Rustic letter t"; beginchar("t", 2u#+hstretch*(2/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=w/2; y1=h; y2=0; lft x3=pcshiftx; top y3=h; rt x4=w-pcshiftx; y4=y3; rt x5=x2; bot y5= bot y6=0; rt x6=w-pcshiftx; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % the stem draw_squiggle(3,4,wiggle,srad); % the top crossbar ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "t" % \end{macrocode} % \end{routine} % % \begin{routine}{u} % The letter `u'. This is a modern version as the font did not have a U. % \begin{macrocode} cmchar "Rustic letter u"; beginchar("u", 2u#+hstretch*(4/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % the right stem x5=x6=w-pcshiftx-hookjut-thin; y5=h; y6=-thin; % left stem and bowl lft x1= lft x2=pcshiftx+jut; top y1=h; y2=2thick; x3=0.5[x1,x5]; bot y3=0; rt x4=x5; bot y4=0.25thick; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(5,6); % right stem draw_hserif(5,6,srad); % its serif draw_tlserif(1,2,srad); % left stem and serif draw z2{down}..z3{right}..{pdir}z4; % the bowl ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,11,16,100); endchar; % end "u" % \end{macrocode} % \end{routine} % % \begin{routine}{v} % The letter `v'. % if you prefer). % \begin{macrocode} cmchar "Rustic letter v"; beginchar("v", 2u#+hstretch*(x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left side z1-z2=whatever*thick_tltobr; lft x1=pcshiftx+jut; top y1=h; bot y2=0; % right side pickup bowpen; x3=w-pcshiftx-footjut-extra_fhjut; top y3=h; pickup quill; x4=lft x2; y4=0; x5=x3; y5=h; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % left part draw_bow(3,4,bowoff); % right part draw_head(5); % and its head ductus:=false; penlabels(1,2,3,4,5,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 "Rustic letter w"; beginchar("w", 2u#+hstretch*(8/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left thick diagonal z1-z2=whatever*thick_tltobr; lft x1=pcshiftx+jut; top y1=h; bot y2=0; % right thin diagonal pickup bowpen; x13=w-pcshiftx-footjut-extra_fhjut; top y13=h-thin; x23=x13; y23=h; % for the head bot y14=thin; pickup quill; % right thick diagonal z11-z12=z1-z2; x12-x2=1/3w; y12=y2; % left thin diagonal z3-z4=z13-z14; x4=x2; x14=x12; y3=y13; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % left and right thick diags draw_istem(11,12,srad); draw_bow(3,4,bowoff); % left thin diag draw_bow(13,14,bowoff); % right thin diag draw_head(23); % its head ductus:=false; penlabels(1,2,3,4,11,12,13,14,23,100); endchar; % end "w" % \end{macrocode} % \end{routine} % % \begin{routine}{x} % The letter `x'. % \begin{macrocode} cmchar "Rustic letter x"; beginchar("x", 2u#+hstretch*(9/10x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % thick diagonal lft x1=pcshiftx+jut; top y1=h; rt x2= w-pcshiftx-jut; bot y2=0; % thin diagonal pickup bowpen; x3=w-pcshiftx-footjut-extra_fhjut-thin; top y3=h; x4=pcshiftx+footjut+extra_fhjut+thin; bot y4=0; x7=x3; y7=h; x8=x4; y8=0; pickup quill; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % thick diagonal draw_bow(3,4,bowoff); % thin diagonal draw_head(7); % its head draw_foot(8); % its foot ductus:=false; penlabels(1,2,3,4,5,6,7,8,100); endchar; % end "x" % \end{macrocode} % \end{routine} % % \begin{routine}{y} % The letter `y'. % \begin{macrocode} cmchar "Rustic letter y"; beginchar("y", 2u#+hstretch*(4/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left side lft x1=pcshiftx+jut; top y1=h; x2=1/2w; bot y2=1/3h; % right side pickup bowpen; x3=w-pcshiftx-footjut-extra_fhjut; top y3=h; lft x4=x2; bot y4=y2; pickup quill; x5=x3; y5=h; % leg x7=x2; y7=y2; x8=x7; y8=0; pickup bowpen; x10=lft x8; x11=rt x8; pickup stylus; bot y10= bot y11=thin; pickup quill; %% ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % left stroke draw_bow(3,4,bowoff); % right stroke draw_head(5); % its head draw_foot(8); % the foot pickup stylus; % the leg filldraw z7--z10--z11--cycle; ductus:=false; penlabels(1,2,3,4,5,7,8,9,100); endchar; % end "y" % \end{macrocode} % \end{routine} % % % \begin{routine}{z} % The letter `z'. % \begin{macrocode} cmchar "Rustic letter z"; beginchar("z", 2u#+hstretch*(4/5x_height#), x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % bottom stroke lft x4=pcshiftx; bot y4=0; rt x6=w-pcshiftx; y6=y4; % top stroke x1=x4; top y1=h; rt x3 =7/8w-pcshiftx; y3=y1; %%ductus:=true; if ductus: pickup stylus; fi draw_squiggle(1,3,1/2wiggle,srad); % top stroke draw_squiggle(4,6,1/2wiggle,srad); % bottom stroke % the diagonal pickup stylus; draw z4--z3; ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "z" % \end{macrocode} % \end{routine} % % % The end of this file % \begin{macrocode} % % \end{macrocode} % % % \subsection{The code for capitals} % % Roman Rustic `capitals' were drawn with the same pen as for the normal % text, the letters were merely drawn slightly larger. % % \begin{macrocode} %<*maj> % RUSTU.MF Program file for Roman Rustic `capitals' % % \end{macrocode} % % % \begin{routine}{A} % The letter `A'. % \begin{macrocode} cmchar "Rustic letter A"; beginchar("A", 2u#+caprat*hstretch*(4/5x_height#+jut#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % right leg z1-z2=whatever*thick_tltobr; top y1=h; rt x2=w-pcshiftx-jut; bot y2=0; % for the left leg z3=9/10[z2,z1]; x4=pcshiftx+footjut+extra_fhjut; bot y4=0; % code for foot x7=x4; y7=0; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % right leg draw_bow(3,4,bowoff); % left leg draw_foot(7); % left leg foot ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "A" % \end{macrocode} % \end{routine} % % \begin{routine}{B} % The letter `B'. This is a tall letter % \begin{macrocode} cmchar "Rustic letter B"; beginchar("B", 2u#+caprat*hstretch*(7/10x_height#), caprat*(11/10x_height#), 0); adjust_fit(0,0); pcshiftx := u+hookjut+thin; pickup quill; % stem x1=x2=pcshiftx; y1=h; y2=0; % bottom bowl rt x3=x1; bot y3=thin; rt x5=w-u; y5 = 1/6h; x4=0.4[x2,x5]; y4=0; lft x6=x2; y6=2/3h; % top bowl z7=z6; x8=0.25[x4,x5]; top y8=y1; x9=0.5[x1,x8]; bot y9=h; z10=z1; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % the stem draw z3..z4{right}..z5..{dir(pangle+90)}z6; % bottom bowl draw z7{pdir}..z8{up}..z9{left}..z10; % top bowl ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,10,100); endchar; % end "B" % \end{macrocode} % \end{routine} % % % \begin{routine}{C} % The letter `C'. % \begin{macrocode} cmchar "Rustic letter C"; beginchar("C", 2u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=pcshiftx+sqxside; y1=y3=h/2; x2=x4=w/2; top y2=h; bot y4=0; rt x5= rt x6=w-pcshiftx; top y5=1/5h; top y6=4/5h; %%ductus:=true; if ductus: pickup stylus; fi draw z5{-pdir}..{left}z4..z1..z2..z6; ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "C" % \end{macrocode} % \end{routine} % % \begin{routine}{D} % The letter `D'. % \begin{macrocode} cmchar "Rustic letter D"; beginchar("D", 2u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=pcshiftx+hookjut+thin; top y1=h; y2=0; % bowl rt x3=x1; bot y3=thin; rt x5=w-u; y5 = 2/5h; x4=0.4[x2,x5]; y4=0; x6=x1; top y6=h; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw z3..z4{right}..z5{up}..z6; % bowl ductus:=false; penlabels(0,1,2,3,4,5,6,100); endchar; % end "D" % \end{macrocode} % \end{routine} % % \begin{routine}{E} % The letter `E'. % \begin{macrocode} cmchar "Rustic letter E"; beginchar("E", 2u#+caprat*hstretch*(4/10x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % stem x1=x2=pcshiftx+stem_offset; top y1=h; y2=0; % top bar rt x3=x1; x4=w-u; top y3=top y4=h; % middle bar x5=x3; x6=x4; y5=y6=3/5h; % foot x7=x3; x8=x4; bot y7= bot y8=0; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw_squiggle(3,4,wiggle,srad); % top bar draw_squiggle(5,6,wiggle,srad); % middle bar draw_squiggle(7,8,wiggle,srad); % bottom bar ductus:=false; penlabels(1,2,3,4,5,6,7,8,100); endchar; % end "E" % \end{macrocode} % \end{routine} % % \begin{routine}{F} % The letter `F'. This is a tall letter % \begin{macrocode} cmchar "Rustic letter F"; beginchar("F", 2u#+caprat*hstretch*(4/10x_height#), caprat*(6/5x_height#), 0); adjust_fit(0,0); pcshiftx := u +stem_offset; pickup quill; % stem x1=x2=pcshiftx; top y1=h; y2=0; % top bar x3=x1; x4=w-u; top y3=top y4=h; % middle bar x5=x3; x6=x4; y5=y6=2/3h; % foot x7=x3; x8=x4; bot y7= bot y8=0; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem draw_squiggle(3,4,wiggle,srad); % top bar draw_squiggle(5,6,wiggle,srad); % middle bar ductus:=false; penlabels(1,2,3,4,5,6,7,8,100); endchar; % end "F" % \end{macrocode} % \end{routine} % % % \begin{routine}{G} % The letter `G'. Like a `C' but bottom curls inwards. % \begin{macrocode} cmchar "Rustic letter G"; beginchar("G", 2u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=pcshiftx+sqxside; y1=y3=h/2; x2=x4=w/2; top y2=h; bot y4=0; rt x5= rt x6=w-pcshiftx; top y5=1/5h; top y6=4/5h; lft x7=w/2; y7=h/2; %%ductus:=true; if ductus: pickup stylus; fi draw z7..z5{down}..{left}z4..z1..z2..z6; % the bowl ductus:=false; penlabels(1,2,3,4,5,6,7,100); endchar; % end "G" % \end{macrocode} % \end{routine} % % \begin{routine}{H} % The letter `H'. % \begin{macrocode} cmchar "Rustic letter H"; beginchar("H", 2u#+caprat*hstretch*(4/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; y100 = sqyside/2; x100 = pcshiftx+y100; % square center pickup quill; % left stem and foot x1=x2=pcshiftx+stem_offset; y1=h; y2=0; % bar y5=y6=7/10h; lft x5=pcshiftx; rt x6=w-pcshiftx; % right stem rt x7=w-pcshiftx; top y7=h; x8=x7; bot y8=0; x9=x8-2thin; y9=0.5[y8,y7]; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % left stem draw_hserif(1,2,srad); % its serif draw_squiggle(5,6,wiggle,srad); % the bar draw z7..z9..z8; % right stem ductus:=false; penlabels(1,1',2,2',3,4,5,6,7,7',8,8',99,99',100); endchar; % end "H" % \end{macrocode} % \end{routine} % % \begin{routine}{I} % The letter I. % \begin{macrocode} cmchar "Rustic letter I"; beginchar("I", 2u#+caprat*hstretch*(2footjut#+hookjut#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=pcshiftx+stem_offset; y1=h; y2=0; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem and foot draw_hserif(1,2,srad); % serif ductus:=false; penlabels(1,2,3,4,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 "Rustic letter J"; beginchar("J", 4u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := 3u; pickup quill; % stem x1=x2=pcshiftx+2/3(w-4u); y1=h; y2=0; % top bar rt x4=w-u; top y4=h; x1-x3 = x4-x1; y3=y4; % bowl rt x5 = lft x3; top y5=2/5h; x7=x2; bot y7=0; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw_squiggle(3,4,wiggle,srad); % top bar draw z7{left}..{pdir}z5; % bowl ductus:=false; penlabels(1,2,3,4,5,6,7,100); endchar; % end "J" % \end{macrocode} % \end{routine} % % \begin{routine}{K} % The letter `K'. % \begin{macrocode} cmchar "Rustic letter K"; beginchar("K", 2u#+caprat*hstretch*(x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % the stem and its foot x1=x2=pcshiftx+stem_offset; y1=h; y2=0; lft x13=pcshiftx; bot y13=0; x2-x13=x14-x2; y14=y13; % upper diagonal and its top x3=x1; y3=h/2; x4=x1+y3; top y4=h; x5=x4-jut; x6-x4=x4-x5; top y5=top y6=h; x24=x4; y24=h; % bottom leg lft x7=x3; bot y7=y3; rt x9=w-pcshiftx; bot y9=0; x8=0.5[x7,x9]; y8=0.7[y7,y9]; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % the stem draw_hserif(1,2,srad); % its serif draw z3--z4; % upper diagonal draw_head(24); draw z7..z8..z9; % bottom leg ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,100); endchar; % end "K" % \end{macrocode} % \end{routine} % % \begin{routine}{L} % The letter `L'. This is a tall letter. % \begin{macrocode} cmchar "Rustic letter L"; beginchar("L", 2u#+caprat*hstretch*(1/2x_height#), caprat*(6/5x_height#), 0); adjust_fit(0,0); pcshiftx := u+hookjut; pickup quill; x1=x2=pcshiftx+thin+hookjut; y1=h; y2=0; rt x3=x1; rt x4=w-u; bot y3= bot y4=0; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(1,2); % stem draw_hserif(1,2,srad); % serif draw_squiggle(3,4,wiggle,srad); % foot ductus:=false; penlabels(1,2,3,4,100); endchar; % end "L" % \end{macrocode} % \end{routine} % % \begin{routine}{M} % The letter `M'. Like 2 As stuck together. % \begin{macrocode} cmchar "Rustic letter M"; beginchar("M", 2u#+caprat*hstretch*(6/5x_height#+jut#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % right a thick diag z11-z12=whatever*thick_tltobr; rt x12=w-pcshiftx-jut; bot y12=0; top y11=h; % left a thin diag pickup bowpen; x4=pcshiftx+footjut+extra_fhjut; bot y4=thin; z3=9/10[z2,z1]; pickup quill; x7=x4; y7=0; % for the foot % the two thin diags are parallel, and just shifted horizontally z13=9/10[z12,z11]; z3-z4=z13-z14; y4=y14; % similarly for the two thick diags z1-z2=z11-z12; % y2=y12; x12-x2=1/3w; %%ductus:=true; if ductus: pickup stylus; fi % draw left a draw_istem(1,2,srad); % right leg draw_bow(3,4,bowoff); % left leg draw_foot(7); % left leg foot % draw right a draw_istem(11,12,srad); draw_bow(13,14,bowoff); ductus:=false; penlabels(1,2,3,4,5,6,11,12,13,14,100); endchar; % end "M" % \end{macrocode} % \end{routine} % % \begin{routine}{N} % The letter `N'. % \begin{macrocode} cmchar "Rustic letter N"; beginchar("N", 2u#+caprat*hstretch*(9/10x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left stem and foot x1=x2=pcshiftx+stem_offset; y1=h; y2=0; % right stem x5=x6=w-u-hookjut-thin; y5=y1; y6=y2; % diagonal x7=x1; y7=h; x9=x6; bot y9=0; x8=0.5[x7,x9]; y8=0.6[y7,y9]; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % left stem draw_rusticstem(5,6); % right stem draw_hserif(5,6,srad); % its serif draw z7..z8..z9; % diagonal draw_serif(9,8,srad); % its bottom serif ductus:=false; penlabels(1,2,5,6,7,8,9,100); endchar; % end "N" % \end{macrocode} % \end{routine} % % \begin{routine}{O} % The letter `O'. % \begin{macrocode} cmchar "Rustic letter O"; beginchar("O", 2u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=w-pcshiftx; y1=y3=h/2; x2=x4=w/2; top y2=h+o; bot y4=-o; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2..z3..z4..cycle; ductus:=false; penlabels(1,2,3,4,100); endchar; % end "O" % \end{macrocode} % \end{routine} % % \begin{routine}{P} % The letter `P'. % \begin{macrocode} cmchar "Rustic letter P"; beginchar("P", 2u#+caprat*hstretch*(5/10x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % stem and foot x1=x2=pcshiftx+stem_offset; top y1=h; y2=0; % bowl lft x7=x2; y7=1/2h; % y7=2/3h; rt x8=w-pcshiftx; top y8=y1; z10=z1; x9=0.5[x1,x8]; y9=h; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem draw z7{pdir}..z8{up}..z9{left}..z10; % top bowl ductus:=false; penlabels(1,2,7,8,9,10,100); endchar; % end "P" % \end{macrocode} % \end{routine} % % \begin{routine}{Q} % The letter `Q'. % \begin{macrocode} cmchar "Rustic letter Q"; beginchar("Q", 2u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, caprat*(2/3thick#)); adjust_fit(0,0); pcshiftx := u; pickup quill; % the O shape lft x1=pcshiftx; rt x3=w-pcshiftx; y1=y3=h/2; x2=x4=w/2; top y2=h+o; bot y4=-o; % the tail path p; p = z4{right}..{up}z3; z5 = directionpoint pdir of p; x7= x4+w/2; top y7=0; x6=0.5[x5,x7]; y6=y7; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2..z3..z4..cycle; % O shape draw z5..z6..z7; % the tail ductus:=false; penlabels(0,1,2,3,4,5,6,6',7,100); endchar; % end "Q" % \end{macrocode} % \end{routine} % % \begin{routine}{R} % The letter `R'. % \begin{macrocode} cmchar "Rustic letter R"; beginchar("R", 2u#+caprat*hstretch*(4/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; numeric alpha, beta; alpha:=thin*(xpart pdir); beta:=thin*(ypart pdir); pickup quill; % stem x1=x2=pcshiftx+stem_offset; top y1=h; y2=0; % bowl lft x7=x2; bot y7=1/2h; rt x8=5/8w; top y8=y1; z10=z1; x9=0.5[x1,x8]; y9=h; % leg z11=z7 shifted (thin*pdir); rt x13=w-pcshiftx; bot y13=0; x12=0.5[x11,x13]; y12=0.7[y11,y13]; % points defining the leg profile x11l=lft x11 + alpha; y11l=bot y11 + beta; x11r= rt x11 - alpha; y11r=top y11 - beta; x12l=0.6[lft x12, x12]; y12l=0.6[bot y12, y12]; x12r=0.6[rt x12, x12]; y12r=0.6[top y12, y12]; x14=w-pcshiftx-thin; y14=thin; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem and foot draw z7{pdir}..z8{up}..z9{left}..z10; % bowl pickup stylus; % drawing the leg filldraw z11l..z12l..{right}z14 & z14{left}..z12r..z11r--cycle; ductus:=false; penlabels(1,2,7,8,9,10,11,12,14,100); endchar; % end "R" % \end{macrocode} % \end{routine} % % \begin{routine}{S} % The letter `S'. % \begin{macrocode} cmchar "Rustic letter S"; beginchar("S", 2u#+caprat*hstretch*(3/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % for the foot lft x7=pcshiftx+extra_fhjut; bot y7=0; % the S curve rt x1=w-pcshiftx; top y1=h-thin; lft x3=pcshiftx+extra_fhjut; y3=0.75h; x4=0.5[x1,x3]; y4=0.5[y3,y5]; x2=x4; top y2=h; x5=x1; y5=0.3h; x6=0.75w; bot y6=0; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2{left}..z3{down}..z4..z5{down}..{-pdir}z6; % S curve draw_squiggle(7,6,wiggle,srad); % base ductus:=false; penlabels(1,2,3,4,5,6,7,100); endchar; % end "S" % \end{macrocode} % \end{routine} % % \begin{routine}{T} % The letter `T'. % \begin{macrocode} cmchar "Rustic letter T"; beginchar("T", 2u#+caprat*hstretch*(2/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=w/2; y1=h; y2=0; lft x3=pcshiftx; top y3=h; rt x4=w-pcshiftx; y4=y3; rt x5=x2; bot y5= bot y6=0; rt x6=w-pcshiftx; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % the stem draw_squiggle(3,4,wiggle,srad); % the top crossbar ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "T" % \end{macrocode} % \end{routine} % % \begin{routine}{U} % The letter `U'. This is a modern version as the font did not have a U. % \begin{macrocode} cmchar "Rustic letter U"; beginchar("U", 2u#+caprat*hstretch*(4/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % the right stem x5=x6=w-pcshiftx-hookjut-thin; y5=h; y6=-thin; % left stem and bowl lft x1= lft x2=pcshiftx+jut; top y1=h; y2=2thick; x3=0.5[x1,x5]; bot y3=0; rt x4=x5; bot y4=0.25thick; %%ductus:=true; if ductus: pickup stylus; fi draw_rusticstem(5,6); % right stem draw_hserif(5,6,srad); % its serif draw_tlserif(1,2,srad); % left stem and serif draw z2{down}..z3{right}..{pdir}z4; % the bowl ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,11,16,100); endchar; % end "U" % \end{macrocode} % \end{routine} % % \begin{routine}{V} % The letter `V'. % if you prefer). % \begin{macrocode} cmchar "Rustic letter V"; beginchar("V", 2u#+caprat*hstretch*(x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left side z1-z2=whatever*thick_tltobr; lft x1=pcshiftx+jut; top y1=h; bot y2=0; % right side pickup bowpen; x3=w-pcshiftx-footjut-extra_fhjut; top y3=h; pickup quill; x4=lft x2; y4=0; x5=x3; y5=h; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % left part draw_bow(3,4,bowoff); % right part draw_head(5); % and its head ductus:=false; penlabels(1,2,3,4,5,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 "Rustic letter W"; beginchar("W", 2u#+caprat*hstretch*(8/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left thick diagonal z1-z2=whatever*thick_tltobr; lft x1=pcshiftx+jut; top y1=h; bot y2=0; % right thin diagonal pickup bowpen; x13=w-pcshiftx-footjut-extra_fhjut; top y13=h-thin; x23=x13; y23=h; % for the head bot y14=thin; pickup quill; % right thick diagonal z11-z12=z1-z2; x12-x2=1/3w; y12=y2; % left thin diagonal z3-z4=z13-z14; x4=x2; x14=x12; y3=y13; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % left and right thick diags draw_istem(11,12,srad); draw_bow(3,4,bowoff); % left thin diag draw_bow(13,14,bowoff); % right thin diag draw_head(23); % its head ductus:=false; penlabels(1,2,3,4,11,12,13,14,23,100); endchar; % end "W" % \end{macrocode} % \end{routine} % % \begin{routine}{X} % The letter `X'. % \begin{macrocode} cmchar "Rustic letter X"; beginchar("X", 2u#+caprat*hstretch*(9/10x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % thick diagonal lft x1=pcshiftx+jut; top y1=h; rt x2= w-pcshiftx-jut; bot y2=0; % thin diagonal pickup bowpen; x3=w-pcshiftx-footjut-extra_fhjut-thin; top y3=h; x4=pcshiftx+footjut+extra_fhjut+thin; bot y4=0; x7=x3; y7=h; x8=x4; y8=0; pickup quill; %%ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % thick diagonal draw_bow(3,4,bowoff); % thin diagonal draw_head(7); % its head draw_foot(8); % its foot ductus:=false; penlabels(1,2,3,4,5,6,7,8,100); endchar; % end "X" % \end{macrocode} % \end{routine} % % \begin{routine}{Y} % The letter `Y'. % \begin{macrocode} cmchar "Rustic letter Y"; beginchar("Y", 2u#+caprat*hstretch*(4/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % left side lft x1=pcshiftx+jut; top y1=h; x2=1/2w; bot y2=1/3h; % right side pickup bowpen; x3=w-pcshiftx-footjut-extra_fhjut; top y3=h; lft x4=x2; bot y4=y2; pickup quill; x5=x3; y5=h; % leg x7=x2; y7=y2; x8=x7; y8=0; pickup bowpen; x10=lft x8; x11=rt x8; pickup stylus; bot y10= bot y11=thin; pickup quill; %% ductus:=true; if ductus: pickup stylus; fi draw_istem(1,2,srad); % left stroke draw_bow(3,4,bowoff); % right stroke draw_head(5); % its head draw_foot(8); % the foot pickup stylus; % the leg filldraw z7--z10--z11--cycle; ductus:=false; penlabels(1,2,3,4,5,7,8,9,100); endchar; % end "Y" % \end{macrocode} % \end{routine} % % % \begin{routine}{Z} % The letter `Z'. % \begin{macrocode} cmchar "Rustic letter Z"; beginchar("Z", 2u#+caprat*hstretch*(4/5x_height#), caprat*x_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % bottom stroke lft x4=pcshiftx; bot y4=0; rt x6=w-pcshiftx; y6=y4; % top stroke x1=x4; top y1=h; rt x3 =7/8w-pcshiftx; y3=y1; %%ductus:=true; if ductus: pickup stylus; fi draw_squiggle(1,3,1/2wiggle,srad); % top stroke draw_squiggle(4,6,1/2wiggle,srad); % bottom stroke % the diagonal pickup stylus; draw z4--z3; ductus:=false; penlabels(1,2,3,4,5,6,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> % RUSTPUNCT.MF This file contains punctuation marks % \end{macrocode} % % % \begin{routine}{,} % The `,' character. % \begin{macrocode} cmchar "Rustic Comma"; beginchar(",",2u#+hstretch*(comma_width#+dot_size#),x_height#,0); adjust_fit(0,0); pcshiftx:=u; x1=w-pcshiftx-(0.5hstretch*dot_size); y1=h/2; draw_pcomma(1,dot_size,comma_width); penlabels(1); endchar; % end of "," % \end{macrocode} % \end{routine} % % \begin{routine}{.} % The `.' character. % \begin{macrocode} cmchar "Rustic Period"; beginchar(".",2u#+hstretch*(dot_size#),x_height#,0); pcshiftx:=u; x1=w/2; y1=h/2; draw_pdot(1,dot_size); penlabels(1); endchar; % end of "." % \end{macrocode} % \end{routine} % % % \begin{routine}{:} % The `:' character. % \begin{macrocode} cmchar "Rustic Colon"; beginchar(":",2u#+hstretch*(dot_size#),x_height#,0); pcshiftx:=u; x1=x2=w/2; y1=2/3h; y2=1/3h; 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 "Rustic Semicolon"; beginchar(";",2u#+hstretch*(comma_width#+dot_size#),x_height#,0); adjust_fit(0,0); pcshiftx:=u; x1=x2=w-pcshiftx-(0.5hstretch*dot_size); y1=2/3h; y2=1/3h; 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 "Rustic Apostrophe"; beginchar("'",2u#+hstretch*(comma_width#+dot_size#),4/3x_height#,0); adjust_fit(0,0); pcshiftx:=u; 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 "Rustic Reverse apostrophe"; beginchar("`",2u#+hstretch*(comma_width#+dot_size#),4/3x_height#,0); adjust_fit(0,0); pcshiftx:=u; 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 punctuation marks and dashes are defined in this file. % \begin{macrocode} %<*lig> % RUSTLIG.MF Roman Rustic ligatured 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"; % \end{macrocode} % % \begin{routine}{''} % The `''' ligature. % \begin{macrocode} cmchar "Rustic closing quotes"; beginchar(oct"042",2u#+hstretch*(comma_width#+3dot_size#),4/3x_height#,0); adjust_fit(0,0); pcshiftx:=u; 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 "Rustic opening quotes"; beginchar(oct"134",2u#+hstretch*(comma_width#+3dot_size#),4/3x_height#,0); adjust_fit(0,0); pcshiftx:=u; 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 `-' character. % \begin{macrocode} cmchar "Rustic hyphen"; beginchar("-",u#+hstretch*(0.8x_height#),x_height#,0); adjust_fit(0,0); pcshiftx:=u/2; pickup quill; lft x1 = pcshiftx; rt x2=w-pcshiftx; y1=y2=h/2; draw z1--z2; % bar penlabels(1,2); endchar; % end of "-" % \end{macrocode} % \end{routine} % % \begin{routine}{--} % The -- ligature. % \begin{macrocode} cmchar "Rustic en dash"; beginchar(oct"173",u#+hstretch*(x_height#),x_height#,0); adjust_fit(0,0); pcshiftx:=u/2; pickup quill; lft x1 = pcshiftx; rt x2=w-pcshiftx; y1=y2=h/2; draw z1--z2; % bar penlabels(1,2); endchar; % end of "--" % \end{macrocode} % \end{routine} % % \begin{routine}{---} % The `---' ligature. The em dash is twice the width of the en dash. % \begin{macrocode} cmchar "Rustic em dash"; beginchar(oct"174",u#+hstretch*(2x_height#),x_height#,0); adjust_fit(0,0); pcshiftx:=u/2; pickup quill; lft x1 = pcshiftx; rt x2=w-pcshiftx; y1=y2=h/2; draw z1--z2; % bar penlabels(1,2); endchar; % end of "---" % \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> % RUSTDIG.MF Program file for Roman Rustic `digits' % % \end{macrocode} % % \begin{routine}{1} % The digit `1'. % \begin{macrocode} cmchar "Rustic digit 1"; beginchar("1", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; x1=x2=w/2; y1=h; y2=0; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem and foot draw_hserif(1,2,srad); % serif ductus:=false; penlabels(1,2,3,4,100); endchar; % end "1" % \end{macrocode} % \end{routine} % % % \begin{routine}{2} % The digit `2'. This is like a stemless B. % \begin{macrocode} cmchar "Rustic digit 2"; beginchar("2", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % stem lft x1=pcshiftx; top y1=h-2thin; x2=1/2w; top y2= h; rt x3=w-pcshiftx; y3=3/4h; % squiggle x5=pcshiftx+extra_fhjut; bot y5=0; x6=w-pcshiftx-extra_fhjut; y6=y5; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2{right}..z3{down}..{-pdir}z5; % curve draw_squiggle(5,6,wiggle,srad); % foot ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "2" % \end{macrocode} % \end{routine} % % % \begin{routine}{3} % The digit `3'. This is like a stemless B. % \begin{macrocode} cmchar "Rustic digit 3"; beginchar("3", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % x values lft x3=pcshiftx; x10=x3; rt x5=w-pcshiftx; x8=x5-3thin; x4=0.5[x3,x5]; x9=0.5[x10,x8]; lft x6=pcshiftx+extra_fhjut; x7=x6; % y values bot y3=thin; top y10=h-2thin; y6=0.5[y3,y10]; y7=y6; bot y4=-thin; top y9=h+thin; y5=0.5[y3,y6]; y8=11/12[y7,y10]; %%ductus:=true; if ductus: pickup stylus; fi %%draw_rusticstem(1,2); % the stem draw z3..z4{right}..z5{up}...{-pdir}z6; % bottom bowl draw z7{pdir}..z8{up}..z9{left}..z10; % top bowl ductus:=false; penlabels(1,2,3,4,5,6,7,8,9,10,100); endchar; % end "3" % \end{macrocode} % \end{routine} % % \begin{routine}{4} % The digit `4'. % \begin{macrocode} cmchar "Rustic digit 4"; beginchar("4", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % the stem x1=x2=w-pcshiftx-footjut-extra_fhjut; y1=h; y2=0; % the crossbar x3=pcshiftx+extra_fhjut; y3=0.33h; x4=w-pcshiftx-extra_fhjut; y4=y3; % the thin diagonal x5=lft x3; y5=bot y3+thin; %%ductus:=true; if ductus: pickup stylus; fi draw_footstem(1,2); % stem and foot %%draw_hserif(1,2,srad); % serif draw_squiggle(3,4,wiggle,srad); % squiggle pickup stylus; draw z5{pdir}..z1; % thin 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 "Rustic digit 5"; beginchar("5", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % for the foot lft x7=pcshiftx+extra_fhjut; bot y7=0; % for the top rt x1=w-pcshiftx-extra_fhjut; top y1=h; lft x2=pcshiftx+extra_fhjut; 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=0.3h; x6=0.75w; bot y6=0; %%ductus:=true; if ductus: pickup stylus; fi draw_squiggle(2,1,wiggle,srad); % top squiggle draw z3{pdir}..z5{down}..{-pdir}z6; % curve draw_squiggle(7,6,wiggle,srad); % base pickup stylus; draw z2--z3; % vertical 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 "Rustic digit 6"; beginchar("6", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; rt x1=w-pcshiftx; top y1=h-2thin; x2=1/2w; top y2= h; lft x3=pcshiftx; y3=1/2h; x4=x2; bot y4=0; rt x5=w-pcshiftx; y5=1/4h; lft x6=rt x3; bot y6=y3; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2{left}..z3{down}..z4{right}..z5{up}..{-pdir}z6; ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "6" % \end{macrocode} % \end{routine} % % % \begin{routine}{7} % The digit `7'. % \begin{macrocode} cmchar "Rustic digit 7"; beginchar("7", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; % top bar x1=pcshiftx+extra_fhjut; x2=w-pcshiftx-extra_fhjut; top y1=top y2=h; % bowed leg rt x4=w-pcshiftx-3thin; bot y4=0; x3=0.5[x2,x4]-2thin; y3=0.5[y2,y4]; %%ductus:=true; if ductus: pickup stylus; fi draw_squiggle(1,2,wiggle,srad); draw z2..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 "Rustic digit 8"; beginchar("8", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx-o; rt x3=w-pcshiftx; y1=y3=3/4h; x2=x4=w/2; top y2=h+o; bot y4=-o; x5=x2; y5=h/2; x11=x1+o; x13=x3+o; y11=y13=1/4h; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2..z3..z5..z11..z4..z13..z5..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 "Rustic digit 9"; beginchar("9", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; bot y1=2thin; x2=1/2w; bot y2= 0; rt x3=w-pcshiftx; y3=1/2h; x4=x2; top y4=h; lft x5=pcshiftx; y5=3/4h; rt x6=lft x3; top y6=y3; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2{right}..z3{up}..z4{left}..z5{down}..{pdir}z6; ductus:=false; penlabels(1,2,3,4,5,6,100); endchar; % end "9" % \end{macrocode} % \end{routine} % % \begin{routine}{0} % The digit `0'. % \begin{macrocode} cmchar "Rustic digit 0"; beginchar("0", 2u#+fig_width#, fig_height#, 0); adjust_fit(0,0); pcshiftx := u; pickup quill; lft x1=pcshiftx; rt x3=w-pcshiftx; y1=y3=h/2; x2=x4=w/2; top y2=h+o; bot y4=-o; %%ductus:=true; if ductus: pickup stylus; fi draw z1..z2..z3..z4..cycle; ductus:=false; penlabels(1,2,3,4,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}{rust}{} %% \DeclareFontShape{OT1}{rust}{m}{n}{ <-> rust10 }{} \DeclareFontShape{OT1}{rust}{m}{n}{ <-8.5> rust7 <8.5-15> rust10 <15-> rust17 }{} \DeclareFontShape{OT1}{rust}{m}{sl}{ <-> sub * rust/m/n }{} \DeclareFontShape{OT1}{rust}{m}{it}{ <-> sub * rust/m/n }{} \DeclareFontShape{OT1}{rust}{m}{sc}{ <-> sub * rust/m/n }{} \DeclareFontShape{OT1}{rust}{m}{u}{ <-> sub * rust/m/n }{} %% \DeclareFontShape{OT1}{rust}{bx}{n}{ <-> rustb10 }{} \DeclareFontShape{OT1}{rust}{bx}{n}{ <-8.5> rustb7 <8.5-15> rustb10 <15-> rustb17 }{} \DeclareFontShape{OT1}{rust}{bx}{it}{ <-> sub * rust/bx/n }{} \DeclareFontShape{OT1}{rust}{bx}{sl}{ <-> sub * rust/bx/n }{} \DeclareFontShape{OT1}{rust}{b}{n}{ <-> sub * rust/bx/n }{} % % \end{macrocode} % % % \begin{macrocode} %<*fdt1> \DeclareFontFamily{T1}{rust}{} \DeclareFontShape{T1}{rust}{m}{n}{ <-8.5> rust7 <8.5-15> rust10 <15-> rust17 }{} \DeclareFontShape{T1}{rust}{m}{sl}{ <-> sub * rust/m/n }{} \DeclareFontShape{T1}{rust}{m}{it}{ <-> sub * rust/m/n }{} \DeclareFontShape{T1}{rust}{m}{sc}{ <-> sub * rust/m/n }{} \DeclareFontShape{T1}{rust}{m}{u}{ <-> sub * rust/m/n }{} \DeclareFontShape{T1}{rust}{bx}{n}{ <-8.5> rustb7 <8.5-15> rustb10 <15-> rustb17 }{} \DeclareFontShape{T1}{rust}{bx}{it}{ <-> sub * rust/bx/n }{} \DeclareFontShape{T1}{rust}{bx}{sl}{ <-> sub * rust/bx/n }{} \DeclareFontShape{T1}{rust}{b}{n}{ <-> sub * rust/bx/n }{} % % \end{macrocode} % % \section{The \Lpack{rustic} and \Lpack{allrust} package code} \label{sec:code} % % \subsection{The \Lpack{rustic} code} % % The \Lpack{rustic} package is intended for use when typesetting examples % of the book-hand in a document that is otherwise typeset in normal fonts. % % Announce the name and version of the package, which requires % \LaTeXe{}. % \begin{macrocode} %<*usc> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{rustic}[1999/05/01 v1.0 package for Roman Rustic 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}{\rustfamily} % Selects the Roman Rustic font family in either T1 or OT1 encoding. % \begin{macrocode} \ifx\Tienc\encodingdefault \newcommand{\rustfamily}{\usefont{T1}{rust}{m}{n}} \else \newcommand{\rustfamily}{\usefont{OT1}{rust}{m}{n}} \fi % \end{macrocode} % \end{macro} % % \begin{macro}{\textrust} % Text command for the Roman Rustic font family. % \begin{macrocode} \DeclareTextFontCommand{\textrust}{\rustfamily} % \end{macrocode} % \end{macro} % % The end of this package. % \begin{macrocode} % % \end{macrocode} % % \subsection{The \Lpack{allrust} code} % % The \Lpack{allrust} 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{rustic} package. % \begin{macrocode} %<*uscall> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{allrust}[1999/05/01 v1.0 package for all Roman Rustic fonts] \RequirePackage{rustic} % \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 Roman Rustic, which has only one family % member. % \begin{macro}{\rmdefault} % \begin{macro}{\sfdefault} % \begin{macro}{\ttdefault} % \begin{macrocode} \renewcommand{\rmdefault}{rust} \renewcommand{\sfdefault}{rust} \renewcommand{\ttdefault}{rust} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % The `leading' in the book-hand is the same as the |x-height|, which is much % greater than for the CMR fonts. I have borrowed code from Frank Jensen's % \Lpack{beton} package~\cite{BETON} to do this. % % \begin{macro}{\rustic@baselineskip@table} % A table of the normal font sizes and the corresponding baselineskip. % \begin{macrocode} \newcommand{\rustic@baselineskip@table}{% <\@vpt>9.5% <\@vipt>11.4% <\@viipt>13.3% <\@viiipt>15.2% <\@xpt>19% <\@xipt>20.9% <\@xiipt>22.8% <\@xivpt>27.36% <\@xviipt>23.3% <\@xxpt>38% <\@xxvpt>47.5} % \end{macrocode} % \end{macro} % % \begin{macro}{\rustic@new@setfontsize} % This is a macro that replaces the |\@setfontsize| macro which is called by % the font size changing commands. % \begin{macrocode} \newcommand{\rustic@new@setfontsize}[3]{% \edef\@tempa{\def\noexpand\@tempb####1<#2}% \@tempa>##2<##3\@nil{\def\rustic@baselineskip@value{##2}}% \edef\@tempa{\noexpand\@tempb\rustic@baselineskip@table<#2}% \@tempa><\@nil \ifx\rustic@baselineskip@value\@empty \def\rustic@baselineskip@value{#3}% \fi \rustic@old@setfontsize{#1}{#2}\rustic@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\rustic@old@setfontsize=\@setfontsize \let\@setfontsize=\rustic@new@setfontsize} \AtBeginDocument{\normalsize} % \end{macrocode} % % % The end of this package. % \begin{macrocode} % % \end{macrocode} % % % \bibliographystyle{alpha} % \renewcommand{\refname}{Bibliography} % \begin{thebibliography}{GMS94a} % \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[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[Wil99a]{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} % % % \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 \~}