From ef6fb210fcab69030fe59706b2ceaa84476b8f40 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 29 Aug 2019 22:50:25 +0000 Subject: universa (29aug19) git-svn-id: svn://tug.org/texlive/trunk@51984 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/fonts/universa/uni.dtx | 5823 ------------------- Master/texmf-dist/source/fonts/universa/uni.ins | 180 - .../texmf-dist/source/fonts/universa/universa.dtx | 5898 ++++++++++++++++++++ .../texmf-dist/source/fonts/universa/universa.ins | 182 + 4 files changed, 6080 insertions(+), 6003 deletions(-) delete mode 100644 Master/texmf-dist/source/fonts/universa/uni.dtx delete mode 100644 Master/texmf-dist/source/fonts/universa/uni.ins create mode 100644 Master/texmf-dist/source/fonts/universa/universa.dtx create mode 100644 Master/texmf-dist/source/fonts/universa/universa.ins (limited to 'Master/texmf-dist/source/fonts') diff --git a/Master/texmf-dist/source/fonts/universa/uni.dtx b/Master/texmf-dist/source/fonts/universa/uni.dtx deleted file mode 100644 index e17f68a4434..00000000000 --- a/Master/texmf-dist/source/fonts/universa/uni.dtx +++ /dev/null @@ -1,5823 +0,0 @@ -%\iffalse -%<*driver> -\documentclass{ltxdoc} -\usepackage{unidoc,latexsym} -%\OnlyDescription %For short description of font and package. -\AlsoImplementation %For full description of font and package. -\title{The \universal{} Font\\ \normalsize{Version 2.0}} -\author{Christian Holm\thanks{Niels Bohr Institute of Physics, - Institute of Philosophy, Rethorics, and Education; University - of Copenhagen; Denmark; E--mail: \texttt{}}} -\date{August 1 1998} -\begin{document} -\maketitle -\begin{abstract} - This is my implementation of Herbert Bayer's ``universal'' font in - \MF{} for \TeX{} and \LaTeX{}. Extensive support for \LaTeX{} is - supplied. This font is in no way intended to be a correct, not to - mention a comlpete implementation of Herbert Bayer's original - design. This document describes how to use the font with \LaTeX{}, - and also the source code for the characters of the font. -\end{abstract} -\tableofcontents -\DocInput{uni.dtx} -\end{document} -% -%<*copyright> - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - -% -%\fi -% \CheckSum{1207} -% \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 \~} - -% \CheckSum{1207} -% \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 \~} -% \def\fileversion{v2.0} -% \def\filedate{98/08/01} -% \section{Introduction} -% \changes{v1.0}{1997/17/24}{Creation of the \universal{} font} -% -% This package contains the \MF{} source and driver files for the -% ``universal'' font, designed by Herbert Bayer, a teacher at the -% Bauhaus school in Weimar\index{Bayer, Herbert}, plus a \LaTeX{} -% package to utilize this font, along with a number of font definition -% files, as required by the New Font Selection Scheme (\NFSS{}). -% -% \subsubsection*{About the Documantation} -% -% The full documentation of this font is rather large, more then 80 -% pages actually. Most of it is the programs for the characters for -% this font, so if you don't know the \MF{} language, or don't care -% how the charcters are created, you should insert -% \Lcs{OnlyDescription} into the preamble of \texttt{uni.dtx}. -% -% Notice, that \MF{} macros are \emph{not} indexed in this -% documentation. This is because it would take a \emph{major} rewrite -% of the \textsf{doc} package to do so, and I really didn't want to do -% that. -% -% Some of the macros of \textsf{doc} \emph{has} been redefined, and if -% you want to see which, or how I generally did the documentation, -% please refer to appendix~\ref{app:unidoc}. -% -% If you in some way are unsatisfied with some of the characters of -% the font, do please read the documentation of that character. There -% may be some notes on why the character looks the way it does. Some -% of the comments, however are a bit silly and should be skipped at -% high speed (pretend there is a conditional that says \texttt{if not -% silly ... fi}). -% -% \subsubsection*{This Version} -% \changes{v2.0}{98/08/01}{Bug corrections, new font -% shapes, better font programs, new/improved macros for \LaTeX{} -% support, better conformation to \NFSS{}, using \textsf{fontname} -% filenaming scheme, etc.} -% -% This new version of the \universal{} font, provides a number -% of new features and improvements, both to the font itself and to the -% \LaTeX{} support macros. Also, a number of corrections has been made -% to the font programs. -% -% The reason why I jumped one whole version number from 1.0 to 2.0, is -% that I have taken a whole new approach to the font programs and -% shapes of the \universal{} font, plus I decided to put some -% more effort into the \LaTeX{} support. -% -% \subsubsection*{Thanks and Other Stuff} -% -% To those of you who have had the (mixed) pleasure of using version -% 1.0 of this font, one of the most notaticable changes are to the -% symbol \textuni{\bauforms}. In the old documenation, I complained -% that I couldn't find the exact solution to the problem this symbol -% possed. I also encourged people to send me any solution they may -% have had --- and guess what --- somebody did! Therefore I would like -% to thanck Joseph Collins for providing me with the solution. If you -% like Joseph Collins and I like Mathematical puzzles take a look in -% Appendix~\ref{app:solu} to learn more about this problem and it's -% solution. -% -% I also direct your attention to Appendix~\ref{app:ggpl} for the -% copyright notice on the \universal{} package (it's the -% \textsl{Gnu General Public Lisence} to those of you who know it). -% -% If you in any way have gotten tempted to design your own font, or to -% implement some font into \MF{}, I feel obligated to bring you a -% warning, taken from the \MF{}book by Donald E.\ Knuth: -% \begin{quote} -% \uni -% \textsc{Warning:} Type design can be hazardous to your other -% interests. Once you get hooked, you will develop intense feelings -% about letterforms; the medium will intrude the message that you -% read. And you will perpetually be thincking of improvements to the -% fonts that you see everywhere, especially those of your own -% design. -% \end{quote} -% -% \section{The Font and it's History} -% -% \subsubsection*{Bauhaus} -% The Bauhaus school in germany originally located at Dessau, was a -% school for any kind of design, ranging from potery to furniture, -% from painting to --- what was considered the prime form of design -% --- architecture. Many famous designers came from, or taught at -% Bauhaus, for example Mies van der Rhoe\index{Rhoe, Mies van der}, -% Herbert Bayer\index{Bayer, Herbert}, Kandinsky\index{Kandinsky}, -% Walter Gropius\index{Gropius, Walter} and Gerrit -% Rietveld\index{Rietveld, Gerrit}. The style ``die stiil'' -% \index{die stiil} was explored here, and painters like -% Mondrian\index{Mondrian} made large contributions to what today is -% known as -% ``the Bauhaus style''\index{Bauhaus style=\textuni{Bauhaus style}}. -% -% The basic idea of the Bauhaus school, was to design items, which -% along with it's aesthethic value, also had a high degree of -% functionallity. Houses were meant to be suited for all kinds of -% living, while still keeping the beauty that make people glad to see -% thier house. Chairs should be comfortable for thier use, as well be -% able to fit--in in a normal house. All this should be done at a -% price that made it possible for everybody to own -% designer--furniture, houses, etc. -% -% The political idea of Bauhaus, was that of a socialist one. Houses -% are for the people --- they have to live in them, and that living -% should be a good as possible. Therefore the Bauhaus school saw it -% has its task to provide functional, beautiful everyday items that -% anybody could affort. Paintings and tapestery shouldn't hang on -% museums or art galleries, but in peoples homes, where they would -% inrich thier everyday life. -% -% \subsubsection*{Herbert Bayer and the ``universal'' Font} -% -% At Bauhaus typography was also studied, not just how written text -% should be typeset, and how printed characters should look like, but -% also what the essence of writting is, in it's pratical and -% design--wise sense. This led Herbert Bayer\index{Bayer, Herbert} to -% formulate some principles of writting: -% -% \begin{quote} -% {\uni experiment with simplified way of writing: -% \begin{enumerate} -% \item this way of writing is recommended by all typographic -% designers as the future way of writing. -% \item by writing in minuscules our writing looses nothing, -% but is easier to read, considerably more economical. -% \item why must you for one sound have two tokens, e.g.\ -% A and a? why two alphabets for one word, why this double -% set of signs, when the half is enough. -% \end{enumerate} -% \begin{flushright} -% herbert bayer 1925 -% \end{flushright}} -% \end{quote} -% -% On this principles, Herbert Bayer designed a font, which should have -% no majuscles (upper case letters), easy to print, and easy to read -% since it didn't have any unusefull decoration, but communicated the -% bare meaning of characters through the simplest forms needed to -% reconigise a character. This font he called ``universal''. -% -% This font contained abolutly no majuscles, since Bayer believed them -% to be superflous, as it is clear form the quote above. -% -% At the time Herbert Bayer formulated these principles and designed -% the ``universal'' font, most printers used Gothic letters, which is -% allmost overly decorated, so his font ofcourse made -% contraversy. -% -% Later on, in the 1930'ies, the Bauhaus school drew the -% attention of \emph{Gestapo}\footnote{Gehemligche Stats Polizi} of -% Nazi\footnote{Nationalsocializmus} Germany. The school was finally -% closed in 1936 by Gestapo, because they believed they were promoters -% of Jewish and Communist culture and propaganda. -% -% In the aftermatch of the closing of the school, most of it's ideas -% were shundend by other designers, and the Bauhaus way of thinking -% died out. This is properly the reason why Herbert Bayers -% ``universal'' font is so little known today. -% -% However, the ``universal'' font still stands as one of the most -% compelling developments in font designing. It represents an approach -% to designing where the functionallity is as vital as the expression, -% and as such I believ it to be one of the most important fonts in the -% world today. -% -% \section{This \MF{} Implementation} -% -% This implementation of Herbert Bayers ``universal'' font, is not -% supposed to look \emph{exactly} like the original design. Ofcourse I -% have tried to the best of my ability to mimic his design as far as I -% could. However, it is not an easy matter to find a complete, not to -% mention exact, sample or account of Bayers design. -% -% This implementation is bassed on the samples I \emph{could} find, -% and other implementations of the ``universal'' font. Many of these -% other implementations do differ from the original samples, and -% include characters I couldn't find in any of the original. So -% whenever I found disparities, I mainly leened on the original -% samples and my understanding of the original design. -% -% \subsection{The \MF{} version versus the Original} -% -% As mentioned above, Bayer never did design any majuscles for this -% font, but nonetheless, I have included them into this -% implementation. This I did, because I think most people will have a -% hard time writting in minuscles (lowercase letters) alone. Ofcorse, -% if you agree with Bayer, you should simple not use them. -% -% There are also some other differences, mostly due to the fact, that -% I never found a complete sample of the original font. The major -% differences between the originalk font and this implementation is -% summerized below: -% -% \begin{description} -% \item[Majuscles:] Majuscles are present, even though they weren't -% in the original design. -% \item[Digigts:] These are based on other implementations, and my -% general conception of the original design. -% \item[Punctuations:] As above. -% \item[Accents:] As above. -% \item[Symbols:] As above. -% \item[Bauhaus Symbols:] I have added some various symbols I have -% found in connection with Bauhaus to the font. The reason is I -% find them beautiful, and I had some space to fill. -% \item[Numerous Shapes and Weights:] I don't think Bayer ever -% design slanted characters, a bold face version of the font, and -% he could never have design a small caps version of the -% font. However, these are present in this implementation. I -% included these features, because I believ them to be of general -% utility, and it makes the font conform more to the Computer -% Modern Roman font, and \NFSS{}. -% \end{description} -% -% \subsection{Features of the font} -% -% Rather then using \texttt{cmbase.mf}\footnote{Computer Modern Roman -% base file}, and then redefine some macros, I chose to make a new -% base file myself, i.e., -% \texttt{unibase.mf}\index{unibase.mf=\texttt{unibase.mf}}. This file -% contains a number of macros\footnote{A better name for `base' would -% be `library', and then the file would be \texttt{libuni.mf}, but to -% conform to CM, I used `base'.} I have used in the character -% programs. -% -% The macros of \texttt{unibase.mf} actually reflects my conception of -% the font. There are three basic drawing macroes: -% \begin{description} -% \item[\texttt{unicir}] which draws a circle, -% \item[\texttt{uniarc}] which draws a segment (arc) of a circle, and -% \item[\texttt{unilne}] which draws a straight line. -% \end{description} -% I believe, that Bayer intended the font to be made of these two -% basic shapes: the arc, and the line. Also, to keep things simple, -% and therefore easy to print, all shapes should be of the same -% thickness, i.e.,as if drawn with a pen of equal thickness. I have -% made one diviation from this, however. All majuscles are drawn with -% a thicker `pen', which makes the output nicer, I think. -% -% Incidently, this made the programs of the characters much simpler, -% and shorter. -% -% \subsubsection{Series, Shapes, Sizes, and Special Characters} -% -% \Newestchanges{v2.0}{98/08/01}{Added `small caps' shape to the font.} -% \changes{v2.0}{98/08/01}{Added non--standard `strict' shape to the -% font.} -% \changes{v2.0}{98/08/01}{Added `slanted' shape to the font.} -% \changes{v2.0}{98/08/01}{Default series is changed to `medium' -% to the font, `bold face' support included.} -% -% Below is a sample of each series/shape combination avaliable in this -% implementation of the font, along with the \LaTeX{} commands that -% drive them: -% -% \begin{description} -% \item[\rm Medium upright (\Lcs{textuni}):] -% \textuni{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Medium slanted (\Lcs{textunisl}):] -% \textunisl{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Medium small caps (\Lcs{textunisc}):] -% \textunisc{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Medium strict (\Lcs{textunist}):] -% \textunist{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Bold face upright (\Lcs{textunibf}):] -% \textunibf{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Bold face slanted (\Lcs{textunibsl}):] -% \textunibsl{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Bold face small caps (\Lcs{textunibsc}):] -% \textunibsc{The dazed brown fox quickly gave 1234-567890 jumps!} -% \item[\rm Bold face strict (\Lcs{textunibst}):] -% \textunibst{The dazed brown fox quickly gave 1234-567890 jumps!} -% \end{description} -% -% Everyone of these shapes are avaliable in size 8, 9, 10, 12, 17 -% \texttt{pt}, and \MF{} can ofcourse create others. -% -% \Newestchanges{v2.0}{98/08/01}{Some of the \textunibf{bauhaus} symbols -% that where avaliable in v1.0, has been taken out.} -% Also a number of non--standard characters are avaliable in the -% font. Below is a table of these characters along with the \LaTeX{} -% commands that drive them. -% -% Notice that \textunibf{``} and \textunibf{''} is present in the -% table. This is because these characters are not directly defined, -% but is supplied as \emph{ligatures}. This can be done, because they -% are simple doubles of \textunibf{`} and \textunibf{'}. -% -% A quick look on the table will also reveal some characters that -% generally isn't present in the standard \texttt{OT1} -% encoding\footnote{The \texttt{OT1} encoding is the 7 bit encoding of -% the Computer Modern fonts by Donald E.\ Knuth. 7 bit means it -% contain 128 ($=2^7$) characters.}, but generally present in the -% \texttt{T1} encoding\footnote{The \texttt{T1} encoding is an -% encoding especially designed for the (western) European -% languages. It was founded by the \TeX{} User's Group, on a seminar -% in Cork, and is the basis of the \texttt{dc} fonts. \texttt{T1} is -% an 8 bit encoding, which means it has 256 ($=2^8$) characters.}. I -% have done this, both to provide an (almost) complete font for the -% European languages, but also because I anticipate the \universal{} -% font some time in the future will shift, or a least be avaliable, in -% the \texttt{T1} encoding\footnote{\texttt{T1} is generally -% considered \emph{the} encoding of the future, and in the long term, -% it is most likely the encoding of \LaTeX3.}. -% \begin{table}[htbp] -% \centering -% \begin{tabular}{% -% @{\vline\extracolsep{1em}\space}ll% -% @{\extracolsep{1em}}ll% -% @{\space\vline\extracolsep{1em}}}\hline -% \textuni{\bausquare}&\Lcs{bausquare}& -% \textuni{\baucircle}&\Lcs{baucircle}\\ -% \textuni{\bautriangle}&\Lcs{bautriangle}& -% \textuni{\bauhead}&\Lcs{bauhead}\\ -% \textuni{\bauforms}&\Lcs{bauforms}& -% \textuni{\dh}&\Lcs{dh}\\ -% \textuni{\dj}&\Lcs{dj}& -% \textuni{\ng}&\Lcs{ng}\\ -% \textuni{\th}&\Lcs{th}& -% \textuni{\varQ}&\Lcs{varQ}\\ -% \textuni{\DH}&\Lcs{DH}& -% \textuni{\DJ}&\Lcs{DJ}\\ -% \textuni{\NG}&\Lcs{NG}& -% \textuni{\TH}&\Lcs{TH}\\ -% \textuni{\textsection}&\Lcs{textsection} or \Lcs{S}& -% \textuni{\textbraceleft}&\Lcs{textbraceleft} or \Lcs{\char"7B}\\ -% \textuni{\textbraceright}&\Lcs{textbracerigth} or \Lcs{\char"7D}& -% \textuni{\textbar}&\Lcs{textbar}\\ -% \textuni{\guilsinglleft}&\Lcs{guilsinglleft}& -% \textuni{\guilsinglright}&\Lcs{guilsinglright}\\ -% \textuni{\guillemoleft}&\Lcs{guillemoleft}& -% \textuni{\guillemoright}&\Lcs{guillemoright}\\ -% \textuni{\quotesinglbase}&\Lcs{quotesinglbase}& -% \textuni{\quotedblbase}&\Lcs{quotedblbase}\\ -% \textuni{\textquotedblleft}&\Lcs{textquotedblleft}& -% \textuni{\textquotedblright}&\Lcs{textquotedblright}\\ -% \textuni{\textogonek}&\Lcs{textogonek}& -% \textuni{\textunderscore}&\Lcs{textunderscore}\\ -% \hline -% \end{tabular} -% \caption{Non--standard characters in the {universal} font} -% \label{tab:characters} -% \end{table} -% Please note, that in the small caps shaped fonts, \Lcs{dh} does not -% give {\small\textuni{\DH}}, but a \textunibsc{\dh}, that is a small -% caps shaped version of \Lcs{varQ}. Also there is no command -% \Lcs{varq} defined. -% -% In appendix~\ref{app:charts} is some charts showing the font in -% different series and shapes. -% -% \subsubsection{File Names for the \MF{} files} -% -% \paragraph{Base File and Source Files} -% The base file and the files containg the code for the characters of -% the \universal{} font, all starts with \texttt{uni}, to reflect the -% connection of the files. The next five possible letters reflects -% what kind of code is contained within the file, e.g., the base file -% ends in \texttt{base}, the file containing the code for the -% minuscles (lower case letters) end in \texttt{lower}, and so forth. -% -% \paragraph{Font Driver Files} -% The font driver filenames has been chosen to conform to the -% \texttt{fontname} scheme, because this scheme is used by most -% \TeX{}, \LaTeX{}, and \MF{} systems (anyway those that use -% \texttt{kpathsea}, which is the most). -% -% The filename all contain the three characters \texttt{ful}, where -% the \texttt{f} stands for \textit{public} and \texttt{ul} for -% \textit{universal}. -% -% Next comes a letter which is one of \texttt{m} (\textit{medium}) or -% \texttt{b} (\textit{bold}), which represents the series of the -% font. -% -% Then comes one or two letters, which are \texttt{r} -% (\textit{upright} or roman), \texttt{o} (\textit{slanted}, or -% oblique), \texttt{c} (\textit{small caps}), or \texttt{st} -% (\textit{strict}), which represent the shape of the font. -% -% Finally the filename ends with the designsize in points. -% -% Thus the complete syntax for the font driver file names is: -% \begin{table}[htbp] -% \centering -% \begin{tabular}{rcl} -% \meta{filename}&:=& -% \meta{supplier}\meta{face}\meta{series}\meta{shape}\meta{size}\texttt{.mf}\\ -% \meta{supplier}&:=&\texttt{f}\\ -% \meta{face}&:=&\texttt{ul}\\ -% \meta{series}&:=&\texttt{m \char"7C\ b}\\ -% \meta{shape}&:=&\texttt{r \char"7C o \char"7C c \char"7C st}\\ -% \meta{size}&:=&\texttt{\char"7C\ 8 \char"7C\ 9 \char"7C\ 10 -% \char"7C\ 12 \char"7C\ 17} -% \end{tabular} -% \end{table} -% The \texttt{fontname} scheme actually says to put \meta{encoding} -% information after the \meta{shape}, but since this is \texttt{8r} -% for \TeX{} Text, it would make filenames longer then 8 characters in -% the cases of \meta{size} of 10, 12, and 17, so this information is -% left out (which is permisable in \texttt{fontname}, but -% unfortunate). -% -% This way of naming the font driver files will, if you use -% \texttt{kpathsea}, put the \texttt{ful*.*pk} files in\newline -% \indent\meta{pk--base--dir}\texttt{/public/universa/}\newline -% and the \texttt{ful*.tfm} files in\newline -% \indent\meta{tfm--base--dir}\texttt{/public/universa/}\newline -% which I think is the intuitivly correct place to put them. This also -% means, that the \texttt{*.mf} files provided with this package, -% should be placed in\newline -% \indent\meta{mf--source--base--dir}\texttt{/public/universa/}\newline -% again very intuitive. -% -% Below is a table of the usual directory names under -% \textsf{Unix}--like and \textsf{MSDOS}--like (including Windows95) -% systems.\meta{mode} is \textsf{dvips}'s name for your printer. -% \begin{table}[htbp] -% \begin{tabular}{% -% @{\vline\extracolsep{1em}\space}l% -% @{\space\vline\extracolsep{1em}\space}l% -% @{\space\vline\extracolsep{1em}\space}l% -% @{\space\vline\extracolsep{1em}}} -% \hline -% Varibale&\textsf{Unix}--like systems&\textsf{MSDOS}--like systems\\ -% \hline -% \meta{tfm--base--dir}& -% \texttt{/var/spool/texmf/pk/}\meta{mode}\texttt{/}& -% \texttt{C:\Lcs{}FONTS\Lcs{}PK\Lcs{}}\meta{mode}\Lcs{}\\ -% \meta{tfm--base--dir}& -% \texttt{/var/spool/texmf/tfm/}& -% \texttt{C:\Lcs{}FONTS\Lcs{}TFM\Lcs{}}\\ -% \meta{tfm--base--dir}& -% \texttt{/usr/local/lib/texmf/fonts/source/}& -% \texttt{C:\Lcs{}TEX\Lcs{}MFINPUTS\Lcs{}}\\ -% \hline -% \end{tabular} -% \caption{Common directory names.} -% \end{table} -% -% \subsection{The \LaTeX\ and \NFSS\ Support} -% -% To use the \universal{} font with \LaTeXe{}\footnote{I have made -% \emph{no} attempt to provide support for \LaTeX2.09, since this -% format is obsolete, and those who \emph{do} use it, will proberly -% never bother to look at CTAN for new fonts anyway.}, you should load -% the package \textsf{uni} with the command -% \begin{quote} -% \Lcs{usepackage}\oarg{options}\marg{uni} -% \end{quote} -% in your preamble (i.e., after \Lcs{documentclass} and before -% \Lcs{begin\{document\}}). \meta{options} can be any of the options -% described below, but no other. -% -% \subsubsection{Options to \textsf{uni}} -% -% \marginpar{\raggedright\texttt{strict}} -% \index{strict=\texttt{strict}\space(Option)} -% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{strict}.} -% The \texttt{srict} option is intended to fassilitate typesetiing of -% the \universal{} font in a \emph{strict} \textunibf{bauhaus} -% fashion, that is \emph{only} in minuscules. -% -% In this font, only the series may be variated, that is, there is a -% bold series strict shaped font of any size, and a medium series -% strict shaped font of any size, in the \universal{} family. -% -% This option can be used in conjuntion with options \texttt{medium} -% and \texttt{bold}. Please notice, that it doesn't make any sense to -% ask for a small caps or slanted shaped font, while using this option. -% -% Notice that only \Lcs{textuni} and \Lcs{uni} is defined if option -% \texttt{strict} was given to \textsf{uni} package. -% -% \marginpar{\raggedright\texttt{default}} -% \index{default=\texttt{default}\space(Option)} -% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{default}.} -% If you give the \texttt{default} option to the \textsf{uni} package, -% the default font of the document will be \textunirm{universal}. -% -% If you also used the option \texttt{bold} the default font will be -% the \universal{} font in \textbf{bold} series. Otherwise it will be -% in medium series. -% -% With this option, \Lcs{textit}, \Lcs{it}, and \Lcs{itshape} shifts -% to \textunisl{universal slanted} font, i.e., there is no -% \textit{italic} font avaliable. -% -% \DescribeMacro{\textcmr} -% \DescribeMacro{\cmr} -% To make it possible to change back to Donald E.\ Knuth's Computer -% Modern Roman font, even when the \texttt{default} option is given, -% we define macros \Lcs{textcmr} and \Lcs{cmr}, which switches the -% \Lcs{fontfamily} to \texttt{cmr} locally and gobally respecivly. -% -% You should use this option with some care, since the \universal{} -% font isn't very suited for longer texts, but rather for short -% letters, quotes, and other pieces of text where the graphical -% apperance is important. -% -% \marginpar{\raggedright\texttt{medium}} -% \index{medium=\texttt{medium}\space(Option)} -% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{medium}.} -% When this option is given, command \Lcs{textuni} switches to -% \textunirm{medium series universal font}, as do \Lcs{uni}. The other -% font selection commands behave as always (see below). This is the -% default option to \textsf{uni}, i.e., not normally needed. -% -% \marginpar{\raggedright\texttt{bold}} -% \index{bold=\texttt{bold}\space(Option)} -% \Newestchanges{v2.0}{98/08/01}{Added options \texttt{bold}.} -% If this option is given, commands \Lcs{textuni} and \Lcs{uni} -% switches to \textunibf{bold series universal font}. Other font -% selection commands behave as always (see below). Notice that it -% makes no sense to give both option \texttt{medium} and option -% \texttt{bold} to the \textsf{uni} package. -% -% \subsubsection{Font Selection Commands} -% -% \DescribeMacro{\textuni}\DescribeMacro{\uni} -% These two commands only change the current font family to -% \texttt{uni} \emph{and nothing else}. That means, that if you say -% for example -% \begin{verbatim} -% {\sl Hello \textuni{world}} -% \end{verbatim} -% you get \emph{both} `Hello' and `world' in slanted shape, and the -% output would be -% \begin{quote} -% {\sl Hello \textuni{world}} -% \end{quote} -% To put it in another way: Font encoding, shape, size, and -% baselineskip is preserved under \Lcs{textuni} and \Lcs{uni}, while -% font family is not. -% -% \textbf{Execptions:} If you gave the \texttt{bold} option to the -% \textsf{uni} package, then this command will always give you a bold -% series font. If you gave the \texttt{strict} option, then this -% command will always give you a strict shaped font. -% -% These commands can be used in conjuntion with \LaTeX{} commands -% \Lcs{textbf}, \Lcs{textsl}, and even \Lcs{sc}, or \Lcs{rm} to give -% different series and shapes. -% -% \DescribeMacro{\textunirm}\DescribeMacro{\unirm} -% If you in the previous example intended to shift to -% \textunirm{medium upright universal} font you could instead have -% used \Lcs{textunirm}, since this command \emph{does not} preserve -% font shape, i.e., the shape is always changed to upright, regardless -% of the prevouis shape. So if you said -% \begin{verbatim} -% {\sl Hello \textunirm{world}} -% \end{verbatim} -% you would get -% \begin{quote} -% {\sl Hello \textunirm{world}} -% \end{quote} -% -% \DescribeMacro{\textunisl}\DescribeMacro{\unisl} -% \DescribeMacro{\textunisc}\DescribeMacro{\unisc} -% \DescribeMacro{\textunist}\DescribeMacro{\unist} -% \label{expl:cmds} -% Actually \Lcs{textunirm} and \Lcs{unirm} isn't the only commands -% that aggresively changes most of the font -% parameters. \Lcs{textunisl}, \Lcs{textunisc}, and \Lcs{textunist}, -% \emph{always} gives you \textunisl{medium slanted}, -% \textunisc{medium small caps}, and \textunist{medium strict} -% respecitivly no matter what the values of \Lcs{f@shape} was before. -% -% \DescribeMacro{\textunibf}\DescribeMacro{\unibf} -% \DescribeMacro{\textunibsl}\DescribeMacro{\unibsl} -% \DescribeMacro{\textunibsc}\DescribeMacro{\unibsc} -% \DescribeMacro{\textunibst}\DescribeMacro{\unibst} -% In the same category is \Lcs{textunibf}, \Lcs{textunibsl}, -% \Lcs{textunibsc}, and \Lcs{textunist} which always changes the font -% series to \textbf{bold}, along with change in shape (upright, -% slanted, small caps, and strict in that order). -% -% All of the `aggresive' commands, \emph{do not} however change the -% \emph{size} and \emph{baselineskip} of the font. This should be done -% by using \LaTeX{} commands such as \Lcs{small}, \Lcs{Large}, -% \Lcs{fontsize}\marg{size}\marg{lineskip}, -% etc. -% -% Notice that the `aggresive' commands always changes to the -% appropiate font series. That is, even if you gave the \texttt{bold} -% option to \textsf{uni}, \Lcs{textunirm} will still give you -% \textunirm{medium upright universal} font. This particular instance -% illustrates the use of the aggresive commands quite well I think. -% -% To summerize: The `aggresive' commands \emph{doesn't} preserve -% fammily, series and shapes, but \emph{does} preserve encoding, size, -% and baslineskip. -% -% \textbf{Warning:} The font shifting commands \Lcs{textuni...} and -% \Lcs{uni...} in this section is \emph{not} defined if you gave the -% \texttt{strict} option to the \textsf{uni} package. -% -% \DescribeMacro{\unifamily} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unifamily} to -% fasilitate easier and stronger font loading.} -% One can also use the rather primitive command \Lcs{unifamily} in -% conjunction with \Lcs{selectfont} as described in \ftnguide{}, to -% change the font family to \universal{} if absolute control is -% preferd. -% -% \Lcs{unifamily} is used by all the other font switching commands, so -% if you redefine it, or \Lcs{unifamilydefault}, you could get strange -% resault. -% -% \DescribeMacro{\unifamilydefault} -% This command normally expands to \texttt{uni}, which is the `family' -% name of the \universal{} package. If you redefine this command to be -% something else, e.g., \texttt{cmr}, \Lcs{unifamily} will load -% another font. -% -% \DescribeMacro{\uniseries} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{uniseries} to -% fasilitate easier and stronger font loading.} -% If the \texttt{bold} option to \textsf{uni} is used this command -% will select the default series of the \universal{} font, defined in -% \Lcs{uniseriesdefault}, which ofcourse defaults to \texttt{b}, i.e., -% bold series. if you redefine \Lcs{uniseriesdefault} to be -% \texttt{m}, then \Lcs{uniseries} will select medium series -% fonts. -% -% If \texttt{bold} option wasn't given, then this expands to nothing, -% as do \Lcs{uniseriesdefault}. -% -% This command is used by \Lcs{textuni} and \Lcs{uni}. -% -% \DescribeMacro{\unishape} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unishape} to -% fasilitate easier and stronger font loading.} -% If the \texttt{strict} option to \textsf{uni} is used this command -% will select the default shape of the \universal{} font, defined in -% \Lcs{unishapedefault}, which ofcourse defaults to \texttt{st}, i.e., -% strict shape. If you redefine \Lcs{unishapedefault} to be -% \texttt{n}, then \Lcs{uniseries} will select upright shaped fonts. -% -% If \texttt{strict} option wasn't given, then this expands to nothing, -% as do \Lcs{unishapedefault}. -% -% This command is used by \Lcs{textuni} and \Lcs{uni}. -% -% -% \DescribeMacro{\stshape} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{stshape} to make package -% conform to \LaTeXe{} better.} -% This command switches to \emph{strict} shape, i.e., all majuscules -% will be typeset as minuscles. This makes it possible in a simple way -% to typeset text in the way Herbert Bayer thought it should, as -% evident from the citation above. -% -% This command uses the command \Lcs{stdefault}, which defaults to -% \texttt{st}. If you redefine this to something alse, e.g., -% \texttt{sl} you will get a \textsl{slanted} font. -% -% This command is used by \Lcs{textunist}, \Lcs{textunibst}, -% \Lcs{unibst} and \Lcs{unist}, and is defined no matter waht options -% you gave to the \textsf{uni} package. -% -% \textbf{Warning:} Since \emph{strict} is a non--standard shape, this -% command should not be used outside the \universal{} font, since this -% may give you unexpected resaults. -% -% \subsubsection{Special Character Commands} -% -% For the individual commands that makes various special characters, -% please consult table~\ref{tab:characters} above. -% -% \subsubsection{Other Commands} -% -% \DescribeMacro{\k} -% The macro \Lcs{k} used in the \universal{} font gives the accent -% ogenek, that is a reversed cidelia accent. It takes one argument, -% which shuold be a single letter, under which it puts the accent. For -% example, you could say \Lcs{textuni\{}\Lcs{k\{a\}\}} and get -% \textuni{\k{a}}. -% -% \DescribeMacro{\DeclareUniChar} -% \Newestchanges{v2.0}{98/08/01}{Configuration of \textsf{uni} package -% provided via the commands \Lcs{DeclareUniChar} and -% \Lcs{DeclareUniCommand}.} -% Now you can configure the special character commands of the font, -% via the commands \Lcs{DeclareUniChar} and -% \Lcs{DeclareUniCommand}. The commands defined via these commands -% will only work in accordence with it's definition inside the -% \universal{} font, and if defined elsewhere according to it's -% definition there, else it will give an error message. -% -% \Lcs{DeclareUniChar} is used to define a command sequence -% representing a single character in the \universal{} font, much like -% \Lcs{DeclareTextSymbol}, or in \TeX{} \Lcs{chardef}, though the -% control sequence will produce an error message outside the -% \universal{} font, and properle unexpected resaults outside the -% \texttt{OT1} encoding\footnote{This should not be a problem.}. -% -% \Lcs{DeclareUniCommand} is used to define control sequences inside -% the \universal{} font, representing many characters or doing complex -% manuvers on characters and stuff. The optional argument to -% \Lcs{DeclareUniCommand} can be used to say how many arguments the -% control sequence should have, just like \Lcs{newcommand}. However, -% it is not possible to give a default first argument. -% -% The below defintion uses the \textsf{color} package to typeset a -% square, circle, and triangle in different colours\footnote{Since the -% documentation should be avaliable to all, I can not provide you with -% the outcome of this example, since it needs the \textsf{color} -% package wich may not be avaliable on all sites. I suggest you try -% it out, or something similar, if you can.}. -% \begin{verbatim} -% \DeclareUniCommand{\mybauforms}{% -% \lower.5ex\hbox{\color{blue}\bautriangle}% -% \kern-.5em\raise.5ex\hbox{\color{read}\baucircle}% -% \kern-.5em\lower.5ex\hbox{\color{yellow}\bausquare}} -% \end{verbatim} -% Yet another example, using arguments could be -% \begin{verbatim} -% \DeclareUniCommand{\mybaulogo}[1]{\bauhead\ {\Large #1}} -% \end{verbatim} -% so you could say \verb+\mybaulogo{Christian Holm}+ and get: -% \begin{quote} -% {\uni \bauhead {\Large Christian Holm}} -% \end{quote} -% and I bet you can come up with some even more useful and complex -% commands. -% -% The syntax of \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand} is -% \begin{quote} -% \Lcs{DeclareUniChar}\marg{cmd}\marg{slot}\newline -% \Lcs{DeclareUniCommand}\marg{cmd}\oarg{arg}\marg{definition} -% \end{quote} -% where \meta{cmd} is the user command defined, \meta{slot} is the -% number of the character in the font, \meta{arg} is the number of -% arguments and \meta{definition} is what \meta{cmd} does. -% -% \subsubsection{File Names for the \LaTeX{} files} -% -% All the \LaTeX{} files contain the three letters \texttt{uni}, to -% reflect the connectedness of the files. The font definition files -% all start with the letter code appropiate for the encodeing. -% -% To follow the scheme of the \MF{} files, it would be appropiate to -% place all \LaTeX{} files in\newline -% \indent\meta{tex--base--dir}\footnote{On \textsf{Unix}--like systems -% \meta{tex--base--dir} is usually something like -% \texttt{/usr/local/lib/texmf/}, and on \textsf{MSDOS}--like systems -% something like \texttt{C:\Lcs{}TEX}\Lcs{} -% .}\texttt{/tex/latex/universa/} -% -% \subsection{The Major differences between version 1.0 and 2.0} -% -% \paragraph{First of:} \emph{a lot} of bugs and errors has been -% corrected. In version~1.0, I had made the (stupid) mistake of -% calling the macro \textuni{mode\_setup} before I defined the -% unsharped units. Ofcourse a quick look in the \MFbook{} showed be -% just how stupid this is. This made the font very vunerable to mode -% specifications, which ofcourse isn't the idea. -% -% \paragraph{Secondly:} I chose a completly new approach to the -% character programs, which resaultet in \texttt{unibase.mf}. The idea -% is to define a few macros, and then utilize those in the character -% programs, so that these programs can be kept simple, efficient, and -% intuitive. -% -% A quick look at \texttt{unibase.mf} will also reveal that I chose a -% new way of adjusting the characters. This means that the macros -% \texttt{bauhaus...} present in version~1.0 no longer is needed, and -% since they only tended to ubscure things rather then simplify them, -% I went back to the plain \MF{} macro \texttt{beginchar}, which is -% much stronger. -% -% All in all, \texttt{unibase.mf} provides a much stronger and uniform -% frame work for character design, then did the old -% \texttt{universal.mf}. -% -% \paragraph{Thirdly:} The file names have been keept inside -% \textsc{msdos} conventions, that is first name of maximum 8 -% charcaters, and last name of maximum 3 characters. This does mean, -% however, that some file names are not intutive, but I have tried to -% make them as much as I could. -% -% Also, every file associated with this font, execpt the font -% definition files (\texttt{*uni.fd}), and font driver files -% (\texttt{ful*.mf}) begins with the three letters \texttt{uni}, to -% emphasize the connection. -% -% \paragraph{Fouthly:} Some new font shapes are avaliable, as -% explained above. I found out, during the design of the characters, -% that new the base file \texttt{unibase.mf} kept showing new -% potentiality, and the extension of the font to include more shapes -% was very easy inside the frame of this base, so I thought ``What the -% heck!'' -% -% \paragraph{Fifthly:} Some of the \textuni{bauhaus} symbols avaliable -% in version~1.0, has been taken out, and some new, more general -% characters have been added. Most of the absent symbols where not -% really of general use, so I decided to take them out, since I was -% never really satisfied with those anyway. This also made the font -% contain exactly 128 characters, just like a normal Computer Modern -% Roman font. -% -% \paragraph{Sixthly:} I improved the \LaTeX{} and \NFSS{} support -% considerably. The changes are legion, but let me sum up the most -% important here. -% \begin{enumerate} -% \item Stronger font selection commands. -% \item Command names that should be more intuitive. -% \item Preperations for \texttt{T1} encoding. -% \item Conformation to \LaTeXe{} style, and therefore a better -% chance to conform with the future \LaTeX3 format. -% \item More and better options. -% \end{enumerate} -% -% \StopEventually{\AtEndDocument{\PrintIndex\PrintChanges}} -% -%\iffalse -%<*package> -%\fi -% \section{\LaTeX\ Support Files} -% -% \subsection{The style file --- \texttt{uni.sty}} -% \file{uni.sty} -% -% In version~2.0, the commands in this file has been redefined using -% the macros recommended in \ftnguide{} and \clsguide{}. This should -% make the commands and macros more portable, and secure. Further, it -% should make it upward--compatiable with future releases of other -% packages and in the end \LaTeX3. -% -% \subsubsection{Intilalizing} -% -% First we need to identify the package, its version and release -% date, etc. -% \begin{macrocode} -\def\fileversion{v2.0} -\def\filedate{98/08/01} -\ProvidesPackage{uni}[\filedate\space\fileversion\space universal - package.] -% \end{macrocode} -% Then we setup some new \Lcs{if} commands, to help in different -% sitations, depending on options passed to the package etc. -% \begin{macrocode} -\newif\if@uni\@unifalse -\newif\ifstri@t\stri@tfalse -\newif\ifdef@ult\def@ultfalse -\newif\ifm@dium\m@diumfalse - -% \end{macrocode} -% -% \subsubsection{Options} -% -% We define some options that can be passed to the package. -% Option \texttt{strict} is intended to make it possible to do -% \emph{strict} Herbert Bayer typesetting, that is only in -% minuscles. Option \texttt{default} will make the \emph{default} font -% \universal{} of the entire document, while option -% \texttt{medium} and \texttt{bold} decides wether the default font -% used by \Lcs{textuni} is normal or bold series. Finally option -% \texttt{medium} is declared default. -% \begin{macrocode} -\DeclareOption{strict}{\stri@ttrue} -\DeclareOption{default}{\def@ulttrue} -\DeclareOption{medium}{\m@diumtrue} -\DeclareOption{bold}{\m@diumfalse} -\ExecuteOptions{medium} -\ProcessOptions\relax - -% \end{macrocode} -% -% \subsubsection{Special Characters} -% -% \begin{macro}{\uni@init} -% \begin{macro}{\DeclareUniChar} -% \Newestchanges{v2.0}{98/08/01}{Added for faster and more stable -% loading of special charactes.} -% \begin{macro}{\DeclareUniCommand} -% \Newestchanges{v2.0}{98/08/01}{Added for faster and more stable -% decleration of \universal{} commands.} -% \begin{macro}{\Declare@Uni} -% \begin{macro}{\DeclareUni@xarg} -% \begin{macro}{\DeclareUni@narg} -% \begin{macro}{\UniError} -% To facilitate the special character positions of the \universal{} -% font, we define the internal commands \Lcs{uni@init}, and the user -% commands \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand}. -% -% \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand} is very much like -% the \LaTeX{} commands \Lcs{DeclareTextSymbol} and -% \Lcs{DeclareTextCommand}, execpt we have to take into account, that -% the commands may very well be defined in \texttt{ot1enc.def} or the -% like. Since some of the characters provided with this font, is -% usually part of an 8 bit font, I can't just use the character -% numbers straight of (this is a 7 bit font), and I have some very -% non--standard characters as well. -% -% Though the two commands differ a bit, the main mechanism is the -% same, so I will explain them together, and note the -% differences\footnote{The syntax of the macroes are explanied on -% page~\pageref{expl:cmds}.} . -% \begin{enumerate} -% \item When either of the commands is used, we first call the macro -% \Lcs{Declare@uni}, which sets up 2 or 3 commands. -% \item Inside \Lcs{Declare@Uni}, we define \Lcs{temp@a} to be -% \Lcs{uni@}\meta{cmd-name}, where \meta{cmd-name} is \meta{cmd} -% stripped of the escape character (\Lcs{}). -% \item Then we check wether \Lcs{cmd} is defined. -% \begin{itemize} -% \item If \meta{cmd} \emph{isn't} defined, then we define -% \Lcs{temp@c} to give \Lcs{uni@}\meta{cmd-name} (which isn't -% defined yet) inside the \universal{} font, otherwise an error -% message (\Lcs{UniError}). -% \item If \meta{cmd} \emph{is} defined, we define \Lcs{temp@b} to -% be \Lcs{no@uni@}\meta{cmd-name}, \Lcs{temp@c} to give -% \Lcs{uni@}\meta{cmd-name} inside the \universal{} font, and -% \Lcs{no@uni@}\meta{cmd-name} (which isn't defined yet) -% elsewhere. Then we define \Lcs{no@uni@}\meta{cmd-name} to be -% what \meta{cmd} currently is. -% \end{itemize} -% This finishes \Lcs{Declare@Uni} off. -% \item The next step depends a bit on which of the macros that is -% utiliezed. What is coomon is that \Lcs{uni@}\meta{cmd-name} (hold -% in \Lcs{temp@a}) is defined to be the last argument of the command. -% \begin{itemize} -% \item In \Lcs{DeclareUniChar}, we define \Lcs{uni@}\meta{cmd-name} -% via the \TeX{} command \Lcs{chardef} to be \meta{slot}, which -% should be a number (decimal, octal, or hexal) between 0 and -% 127. Using the \TeX{} primitive will make \LaTeX{} think of -% \meta{cmd} as a single character. -% \item If \Lcs{DeclareUniCommand} was given an optional argument, -% we use the command \Lcs{DeclareUni@xarg} to define -% \Lcs{uni@}\meta{cmd-name} --- which uses \Lcs{newcommand} with -% \emph{one} optinal argument --- to be -% \meta{definition}. Otherwise we use \Lcs{DeclareUni@narg} --- -% which uses \Lcs{newcommand} with \emph{no} optinal arguments --- -% to do the trick. -% Using the \LaTeX{} complex \Lcs{newcommand}, makes \meta{cmd} a -% strong command. -% \end{itemize} -% \item Finally we define \meta{cmd} to be \Lcs{temp@d}, which was the -% conditional command defined in step 2. -% \end{enumerate} -% -% Notice the use of \Lcs{aftergroup}. This means that \meta{cmd-name} -% shouldn't be too long, i.e., $>300$ characters, which isn't a real -% limitation, but now I said it. This macro, together with the group -% in \Lcs{temp@c} is what made it possible to give arguments to -% \meta{cmd} defined by \Lcs{DeclareUniCommand}. -% -% This way of doing things has a number of benefiets. 1) First of I -% makes it very simple to redefine the behaviour of the \universal{} -% speciffic character commands. All you have to do is to use -% \Lcs{DeclareUniChar} or \Lcs{DeclareUniChar} in your preamble (and -% \emph{only} there). 2) Since \TeX{} are faster at evaluating -% \Lcs{if...}'s, switching to \universal{} commands should take a -% minimum amount of time. 3) From a portability point of view, this -% way of shifting meanings of commands such as \Lcs{textquotedblleft}, -% according to context, doesn't screw up older documents where the -% \textsf{uni} package is added to. -% -% There are some disadvantage. 1) Most noticably there is \emph{no} -% conformation to \emph{any} existing encoding, which however is a -% problem of the in the font, not the \textsf{uni} package. 2) -% The heavy use of \Lcs{def}, \Lcs{edef}, and \Lcs{let}, is not -% exactly \LaTeX3 policy, but is needed here. 3) The definition of the -% commands may slow \TeX{} down a bit, but should be bearable. -% \begin{macrocode} -\newcommand{\uni@init}{\@unitrue} -\DeclareRobustCommand{\Declare@Uni}[1]{% - \edef\temp@{\expandafter\@gobble\string#1} - \edef\temp@a{\csname uni@\temp@\endcsname} - \@ifundefined{\temp@}{% - \edef\temp@c{{% - \noexpand\if@uni\noexpand\aftergroup\temp@a\noexpand% - \else\noexpand\UniError{#1}\noexpand\fi}}}{% - \edef\temp@b{\csname no@uni@\temp@\endcsname} - \edef\temp@c{{% - \noexpand\if@uni\noexpand\aftergroup\temp@a\noexpand% - \else\noexpand\aftergroup\temp@b\noexpand\fi}} - \expandafter\let\temp@b#1}} -\DeclareRobustCommand{\DeclareUniChar}[2]{% - \Declare@Uni{#1} - \expandafter\chardef\temp@a=#2 - \let#1\temp@c} -\def\DeclareUniCommand#1{% - \@ifnextchar[{\DeclareUni@xarg#1}{\DeclareUni@narg#1}} -\def\DeclareUni@xarg#1[#2]#3{% - \Declare@Uni{#1} - \expandafter\DeclareRobustCommand\temp@a[#2]{#3} - \let#1\temp@c} -\def\DeclareUni@narg#1#2{% - \Declare@Uni{#1} - \expandafter\DeclareRobustCommand\temp@a{#2} - \let#1\temp@c} -\@onlypreamble\DeclareUniChar\relax -\@onlypreamble\DeclareUniCommand\relax -\DeclareRobustCommand{\UniError}[1]{% - \PackageError{uni}{% - Command \string#1 not defined outside universal font.}{% - Correct your source file, so that \string#1 doesn't appear^^J% - ouside of universal font, then run LaTeX again.^^J% - Prepare your self for some gastly output.}} -% \expandafter\show\csname no@uni@\temp@\endcsname -% \expandafter\show\csname uni@\temp@\endcsname -% \expandafter\show\csname \temp@\endcsname - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bausquare} -% \Newestchanges{v2.0}{98/08/01}{\universal{} specific -% characters declared by seperate macro.} -% \begin{macro}{\baucircle} -% \begin{macro}{\bautriangle} -% \begin{macro}{\bauhead} -% \begin{macro}{\bauforms} -% \begin{macro}{\dh} -% \begin{macro}{\ng} -% \begin{macro}{\th} -% \begin{macro}{\varQ} -% \begin{macro}{\NG} -% \begin{macro}{\TH} -% \begin{macro}{\textogonek} -% \begin{macro}{\textbraceleft} -% \begin{macro}{\textbraceright} -% \begin{macro}{\textsection} -% \begin{macro}{\textbar} -% \begin{macro}{\guilsinglleft} -% \begin{macro}{\guilsinglright} -% \begin{macro}{\textquotedblleft} -% \begin{macro}{\textquotedblright} -% \begin{macro}{\quotesinglbase} -% \begin{macro}{\quotedblbase} -% \begin{macro}{\guillemoleft} -% \begin{macro}{\guillemoright} -% \begin{macro}{\k} -% \begin{macro}{\DH} -% \begin{macro}{\DJ} -% \begin{macro}{\dj} -% \begin{macro}{\textunderscore} -% This command takes care of commands for non--standard placement, and -% symbols in the \universal{} font, while using standard \LaTeXe{} -% encodings, such as \texttt{OT1}. -% -% For instance, the symbols \textunibf{\}}, \textunibf{\{} isn't -% present in Computer Modern fonts, but is accesiable through the -% command \Lcs{}\texttt{\{}, and \Lcs{}\texttt{\}} in the \universal{} -% font. On the other hand \char"00{} isn't present in this font, but -% is replaced by \textunibf{\char"00}. -% -% Some of the commands avaliable are well--known to the \texttt{T1} -% encodeing, and are provided with the same commmand names as in that -% encoding. -% -% The decleration of these commands use my (slick) macros -% \Lcs{DcelareUniChar} and \Lcs{DcelareUniCommand} --- very neat I -% think. -% -% \begin{macrocode} -\DeclareUniChar{\bausquare}{"00} -\DeclareUniChar{\baucircle}{"01} -\DeclareUniChar{\bautriangle}{"02} -\DeclareUniChar{\bauhead}{"03} -\DeclareUniChar{\bauforms}{"04} -\DeclareUniChar{\dh}{"05} -\DeclareUniChar{\ng}{"06} -\DeclareUniChar{\th}{"07} -\DeclareUniChar{\varQ}{"08} -\DeclareUniChar{\NG}{"09} -\DeclareUniChar{\TH}{"0A} -\DeclareUniChar{\textogonek}{"0B} -\DeclareUniChar{\textbraceleft}{"0C} -\DeclareUniChar{\textbraceright}{"0D} -\DeclareUniChar{\textsection}{"0E} -\DeclareUniChar{\textbar}{"0F} -\DeclareUniChar{\guilsinglleft}{"22} -\DeclareUniChar{\guilsinglright}{"5C} -\DeclareUniChar{\quotesinglbase}{"2C} -\DeclareUniCommand{\quotedblbase}{\char"2C\kern-.3em\char"2C} -\DeclareUniCommand{\textquotedblleft}{``} -\DeclareUniCommand{\textquotedblright}{''} -\DeclareUniCommand{\guillemoleft}{\char"22\char"22} -\DeclareUniCommand{\guillemoright}{\char"5C\char"5C} -\DeclareUniCommand{\DH}{\raise.5ex\hbox{\char"2D}\kern-.5em D} -\DeclareUniCommand{\DJ}{\raise.5ex\hbox{\char"2D}\kern-.5em D} -\DeclareUniCommand{\dj}{\raise.75ex\hbox{\char"2D}\kern-1em d} -\DeclareUniCommand{\textunderscore}{\lower.5ex\hbox{\char"7B}} -\DeclareUniCommand{\k}[1]{% - \leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% - \else{\ooalign{\unhbox\z@\crcr\hidewidth\char11\hidewidth}}\fi} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsubsection{Font Selection} -% -% \begin{macro}{\unifamily} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unifamily} to -% fasilitate easier and stronger font loading.} -% The real command. This switches to \universal{} font, and can -% be used by authors in conjunction with \LaTeXe{} primitive -% \Lcs{selectfont}. \Lcs{unifamily} is used below in \Lcs{textuni...}, -% and \Lcs{uni...}. -% -% \begin{macro}{\unifamilydefault} -% \changes{v2.0}{98/08/01}{Defined to make package conform to -% \LaTeXe{} better.} -% Here \Lcs{unifamilydefault} is by default defined to be -% \texttt{uni}, but could ofcourse expand to something -% different. However, the expnasion should be a font family (like -% \texttt{cmr}) or the like. -% -% \begin{macrocode} -\DeclareRobustCommand\unifamily{% - \not@math@alphabet\unifamily\relax% - \fontfamily\unifamilydefault\selectfont} -\newcommand{\unifamilydefault}{uni} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\uniseries} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{uniseries} to -% fasilitate easier and stronger font loading.} -% If the \texttt{bold} option is used with the \textsf{uni} package, -% then this command switches to whatever series is defined via -% \Lcs{uniseriesdefault} (default is \textbf{bold} series), otherwise -% it does nothing. Since this command is used in \Lcs{textuni} and -% \Lcs{uni}, this way will not allow anyother series if \texttt{bold} -% option is given, expect \textbf{bold}. However, if \texttt{bold} -% isn't given, then \emph{any} series is possible. -% -% \begin{macro}{\uniseriesdefault} -% \changes{v2.0}{98/08/01}{Defined to make package conform to -% \LaTeXe{} better.} -% Here \Lcs{uniseriesdefault} is defined to be \texttt{b} -% (\textbf{medium}) if the \texttt{bold} option \emph{was} given to -% \textsf{uni} package. Otherwise it expans to nothing -% (\Lcs{relax}). This macro is used by \Lcs{uniseries}. -% \begin{macrocode} -\ifm@dium - \let\uniseries\relax - \let\uniseriesdefault\relax -\else - \DeclareRobustCommand\uniseries{% - \not@math@alphabet\uniseries\relax% - \fontseries\uniseriesdefault\selectfont} - \newcommand{\uniseriesdefault}{b} -\fi - -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\unishape} -% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unishape} to -% fasilitate easier and stronger font loading.} -% If the \texttt{strict} option is used with the \textsf{uni} package, -% then this command switches to whatever shape is defined via -% \Lcs{unishapedefault} (default is \emph{strict} shape), otherwise -% it does nothing. Since this command is used in \Lcs{textuni} and -% \Lcs{uni}, this way will not allow anyother shape if \texttt{strict} -% option is given, expect \emph{strict}. However, if \texttt{strict} -% isn't given, then \emph{any} series is possible. -% -% \begin{macro}{\unishapedefault} -% \changes{v2.0}{98/08/01}{Defined to make package conform to -% \LaTeXe{} better.} -% Here \Lcs{unishapedefault} is defined to be \texttt{st} -% (\emph{strict}) if the \texttt{strict} option \emph{was} given to -% \textsf{uni} package. Otherwise it expans to nothing -% (\Lcs{relax}). This macro is used by \Lcs{unishape}. -% \begin{macrocode} -\ifstri@t - \DeclareRobustCommand\unishape{% - \not@math@alphabet\unishape\relax% - \fontseries\unishapedefault\selectfont} - \newcommand{\unishapedefault}{st} -\else - \let\unishape\relax - \let\unishapedefault\relax -\fi -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\stshape} -% \changes{v2.0}{98/08/01}{Defined \Lcs{stshape} to make package -% conform to \LaTeXe{} better.} -% This command selects the shape holded by \Lcs{stdefault} (defaults -% to \texttt{st} --- strict) in any family or series. This is used by -% commands \Lcs{textunist}, \Lcs{textunibst}, \Lcs{unist}, and -% \Lcs{unibst}. -% -% \begin{macro}{\stdefault} -% \changes{v2.0}{98/08/01}{Defined to make package conform to -% \LaTeXe{} better.} -% The shape selected by \Lcs{stshape}. -% \begin{macrocode} -\DeclareRobustCommand\stshape{% - \not@math@alphabet\stshape\relax% - \fontshape\stdefault\selectfont} -\newcommand{\stdefault}{st} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \paragraph{Local Font Selection} -% \begin{macro}{\textuni} -% \Newestchanges{v2.0}{98/08/01}{\Lcs{textbayer} changed to -% \Lcs{textuni}, and defined using \LaTeXe{} scheme.} -% \begin{macro}{\textunirm} -% \begin{macro}{\textunibf} -% \begin{macro}{\textunisl} -% \begin{macro}{\textunisc} -% \begin{macro}{\textunibsl} -% \begin{macro}{\textunibsc} -% These are the macros that switches to \universal{} font, -% locally, i.e., for a few words, in various series and shapes. The -% names are pretty selfexplanetory, I think. These macros will -% \emph{always} change the font series and shape accroding to it's -% definiton, nothing more, and nothing less, exepct \Lcs{textuni}, -% which only changes the cuurent family to \texttt{uni}. Notice it -% simply uses the \Lcs{unifamily} command to do the trick. -% -% The second argument to \Lcs{DeclareTextFontCommand} should not -% normally contain commands that typeset, or commands not relevant to -% the selection of fonts, but to make up for the non--default -% characeters and character placements, we \emph{do} include -% \Lcs{uni@init} in the argument. -% -% Notice that only \Lcs{textuni} is defined if option \texttt{strict} -% was given to \textsf{uni} package. -% \begin{macrocode} -\DeclareTextFontCommand{\textuni}{% - \uni@init\unifamily\uniseries\unishape} -\ifstri@t -\else - \DeclareTextFontCommand{\textunirm}{% - \uni@init\unifamily\mdseries\upshape} - \DeclareTextFontCommand{\textunibf}{% - \uni@init\unifamily\bfseries\upshape} - \DeclareTextFontCommand{\textunisl}{% - \uni@init\unifamily\mdseries\slshape} - \DeclareTextFontCommand{\textunisc}{% - \uni@init\unifamily\mdseries\scshape} - \DeclareTextFontCommand{\textunist}{% - \uni@init\unifamily\mdseries\stshape} - \DeclareTextFontCommand{\textunibsl}{% - \uni@init\unifamily\bfseries\slshape} - \DeclareTextFontCommand{\textunibsc}{% - \uni@init\unifamily\bfseries\scshape} - \DeclareTextFontCommand{\textunibst}{% - \uni@init\unifamily\bfseries\stshape} -\fi - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \paragraph{Global Font Selection} -% \begin{macro}{\uni} -% \Newestchanges{v2.0}{98/08/01}{\Lcs{bayer} changed to \Lcs{uni}} -% \begin{macro}{\unibf} -% \begin{macro}{\unibf} -% \begin{macro}{\unisl} -% \begin{macro}{\unisc} -% \begin{macro}{\unibsl} -% \begin{macro}{\unibsc} -% These macros works as \Lcs{textuni...} above, execpt the take effect -% from the point used, to the end of the current group. Again font -% selection is \emph{exactly} as given in the command name, execpt for -% \Lcs{uni} which only changes the family. -% -% Notice that only \Lcs{uni} is defined if option \texttt{strict} -% was given to \textsf{uni} package. -% \begin{macrocode} -\DeclareOldFontCommand{\uni}{% - \uni@init\unifamily\uniseries\unishape}{} -\ifstri@t -\else - \DeclareOldFontCommand{\unirm}{% - \uni@init\unifamily\mdseries\upshape}{} - \DeclareOldFontCommand{\unibf}{% - \uni@init\unifamily\bfseries\upshape}{} - \DeclareOldFontCommand{\unisl}{% - \uni@init\unifamily\mdseries\slshape}{} - \DeclareOldFontCommand{\unisc}{% - \uni@init\unifamily\mdseries\scshape}{} - \DeclareOldFontCommand{\unist}{% - \uni@init\unifamily\mdseries\stshape}{} - \DeclareOldFontCommand{\unibsl}{% - \uni@init\unifamily\bfseries\slshape}{} - \DeclareOldFontCommand{\unibsc}{% - \uni@init\unifamily\bfseries\scshape}{} - \DeclareOldFontCommand{\unibst}{% - \uni@init\unifamily\bfseries\stshape}{} -\fi - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \paragraph{\texttt{default} Option Font} -% Now if you gave the \texttt{default} option to the package, -% \Lcs{ifdef@ult} evaluates to true, and so we setup the default font -% to be \universal{}, in the medium or bold version, depending -% on wether you gave the \texttt{medium} option or not. -% \begin{macrocode} -\ifdef@ult - \renewcommand{\familydefault}{uni} - \ifm@dium\renewcommand{\seriesdefault}{m} - \else\renewcommand{\seriesdefault}{b}\fi - \renewcommand{\itdefault}{sl} -% \end{macrocode} -% \begin{macro}{\cmrfamily} -% \begin{macro}{\cmrdefault} -% \begin{macro}{\textcmr} -% \begin{macro}{\cmr} -% We define \Lcs{cmrfamily} and \Lcs{cmrdefault} to change back to -% Computer Modern Roman font, if so wanted. The macros \Lcs{textcmr} -% and \Lcs{cmr} are the logical extensions of \Lcs{cmrfamily}. -% \begin{macrocode} - \DeclareRobustCommand\cmrfamily{% - \not@math@alphabet\cmrfamily\relax% - \fontencoding\cmrenc\fontfamily\cmrdefault\selectfont} - \newcommand{\cmrdefault}{cmr} - \newcommand{\cmrenc}{OT1} - \DeclareTextFontCommand{\textcmr}{\cmrfamily} - \DeclareOldFontCommand{\cmr}{\cmrfamily}{} -\fi - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -%\iffalse -% -%\fi -% \subsection{The Font Definition Files --- \texttt{*uni.fd}} -% -% These files is needed in the New Font Selection Scheme, used by -% \LaTeXe{}, but really isn't nessecary for pure \TeX{} or \LaTeX2.09 -% users, but since those are treathned races, I did put in the extra -% effort and made the files. -% -% What they really do, is to speciffy what font driver file should be -% loaded when the user swichtes font. Notice, alot of the font shapes -% etc.\ avaliable in the Computer Modern Roman scheme isn't avaliable -% in the \universal{} font, so we substitute with whatever is -% closest, something from the \universal{} or Computer Modern -% Roman scheme. -% -% The reason why the file names may look a bit wierd, is to make the -% font conform to the standard set by \texttt{fontname} used by -% \texttt{kpathsea} in most \TeX{}, \LaTeX{}, and \MF{} systems. -% -% \paragraph*{Math Encoding}\file{oml.fd} -% First comes the the font definition file for \emph{math}, but since -% no math characters is defined in the \universal{} font, we -% substitute with the relevant fonts from Computer Modern Roman. -%\iffalse -%<*oml> -%\fi -% \begin{macrocode} -\ProvidesFile{omluni.fd} - [1998/08/01 v2.0 Non Standard LaTeX font definitions] -\DeclareFontFamily{OML}{uni}{\skewchar\font127 } -\DeclareFontShape{OML}{uni}{m}{n}{<-> ssub * cmm/m/it}{} -\DeclareFontShape{OML}{uni}{m}{it}{<-> ssub * cmm/m/it}{} -\DeclareFontShape{OML}{uni}{m}{sl}{<-> ssub * cmm/m/it}{} -\DeclareFontShape{OML}{uni}{m}{sc}{<-> ssub * cmm/m/it}{} -\DeclareFontShape{OML}{uni}{bx}{n}{<-> ssub * cmm/b/it}{} -\DeclareFontShape{OML}{uni}{bx}{it}{<-> ssub * cmm/b/it}{} -\DeclareFontShape{OML}{uni}{bx}{sl}{<-> ssub * cmm/b/it}{} -\DeclareFontShape{OML}{uni}{bx}{sc}{<-> ssub * cmm/b/it}{} - -% \end{macrocode} -%\iffalse -% -%\fi -% -% \paragraph*{Symbols Encoding}\file{omsuni.fd} -% Next is the definitions for \emph{symbols} fonts, but as above, -% there is no seperate symbol font defined for the \universal{} -% font, so we substitute for default. -%\iffalse -%<*oms> -%\fi -% \begin{macrocode} -\ProvidesFile{omsuni.fd} - [1998/08/01 v2.0 Non Standard LaTeX font definitions] -\DeclareFontFamily{OMS}{uni}{\skewchar\font48 } -\DeclareFontShape{OMS}{uni}{m}{n}{<-> ssub * cmsy/m/n}{} -\DeclareFontShape{OMS}{uni}{m}{it}{<-> ssub * cmsy/m/n}{} -\DeclareFontShape{OMS}{uni}{m}{sl}{<-> ssub * cmsy/m/n}{} -\DeclareFontShape{OMS}{uni}{m}{sc}{<-> ssub * cmsy/m/n}{} -\DeclareFontShape{OMS}{uni}{bx}{n}{<-> ssub * cmsy/b/n}{} -\DeclareFontShape{OMS}{uni}{bx}{it}{<-> ssub * cmsy/b/n}{} -\DeclareFontShape{OMS}{uni}{bx}{sl}{<-> ssub * cmsy/b/n}{} -\DeclareFontShape{OMS}{uni}{bx}{sc}{<-> ssub * cmsy/b/n}{} - -% \end{macrocode} -%\iffalse -% -%\fi -% -% \paragraph*{Normal Encoding}\file{ot1uni.fd} -% Now the definitions for the normal font. This \emph{is} ofcourse -% defined, anything else would be ludicruis. It is very straight -% forward most of the way. However, notice the substitutions at the -% end of the file. -% -%\iffalse -%<*ot1> -%\fi -% \begin{macrocode} -\ProvidesFile{ot1uni.fd}% - [1998/08/01 v2.0 Non standard LaTeX font definitions] -\DeclareFontFamily{OT1}{uni}{\hyphenchar\font45 } - -% \end{macrocode} -% Next comes the specifications of what to load in \textunirm{normal -% upright shape} -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{m}{n}{ - <5><6><7><8>fulmr8 - <9>fulmr9 - <10><10.95>fulmr10 - <12><14.4>fulmr12 - <17.28><20.74><24.88>fulmr17 - }{} - -% \end{macrocode} -% Next comes the specifications of what to load in \textunisl{normal -% slanted shape} -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{m}{sl}{ - <5><6><7><8>fulmo8 - <9>fulmo9 - <10><10.95>fulmo10 - <12><14.4>fulmo12 - <17.28><20.74><24.88>fulmo17 - }{} - -% \end{macrocode} -% Now for \textunisc{small caps medium} definitions. -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{m}{sc}{ - <5><6><7><8>fulmc8 - <9>fulmc9 - <10><10.95>fulmc10 - <12><14.4>fulmc12 - <17.28><20.74><24.88>fulmc17 - }{} - -% \end{macrocode} -% Now for \textunist{strict medium} definitions. -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{m}{st}{ - <5><6><7><8>fulmst8 - <9>fulmst9 - <10><10.95>fulmst10 - <12><14.4>fulmst12 - <17.28><20.74><24.88>fulmst17 - }{} - -% \end{macrocode} -% Next comes the specifications of what to load in \textunibf{bold -% face upright shape} -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{b}{n}{ - <5><6><7><8>fulbr8 - <9>fulbr9 - <10><10.95>fulbr10 - <12><14.4>fulbr12 - <17.28><20.74><24.88>fulbr17 - }{} - -% \end{macrocode} -% Next comes the specifications of what to load in -% \textunibsl{bold face slanted shape} -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{b}{sl}{ - <5><6><7><8>fulbo8 - <9>fulbo9 - <10><10.95>fulbo10 - <12><14.4>fulbo12 - <17.28><20.74><24.88>fulbo17 - }{} - -% \end{macrocode} -% And \textunibsc{small caps bold face} definitions. -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{b}{sc}{ - <5><6><7><8>fulbc8 - <9>fulbc9 - <10><10.95>fulbc10 - <12><14.4>fulbc12 - <17.28><20.74><24.88>fulbc17 - }{} - -% \end{macrocode} -% And \textunibst{strict bold face} definitions. -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{b}{st}{ - <5><6><7><8>fulbst8 - <9>fulbst9 - <10><10.95>fulbst10 - <12><14.4>fulbst12 - <17.28><20.74><24.88>fulbst17 - }{} - -% \end{macrocode} -% -% Now for the substitutions. This is straight forward, that -% is, upright slanted is substituted by upright; bold face condensed, -% and bold face extra is substituted by boldface; and italic by -% slanted\footnote{As mentioned earlier, one of the characteristics -% of this dont, is that it has no serifs, so it would be strange -% to include italics in this font.}. -% \begin{macrocode} -\DeclareFontShape{OT1}{uni}{m}{it}{<->ssub*uni/m/sl}{} -\DeclareFontShape{OT1}{uni}{m}{ui}{<->ssub*uni/m/n}{} -\DeclareFontShape{OT1}{uni}{b}{it}{<->ssub*uni/b/sl}{} -\DeclareFontShape{OT1}{uni}{bx}{n}{<->ssub*uni/b/n}{} -\DeclareFontShape{OT1}{uni}{bx}{sl}{<->ssub*uni/b/sl}{} -\DeclareFontShape{OT1}{uni}{bx}{sc}{<->ssub*uni/b/sc}{} -\DeclareFontShape{OT1}{uni}{bx}{st}{<->ssub*uni/b/st}{} -\DeclareFontShape{OT1}{uni}{bx}{it}{<->ssub*uni/b/sl}{} -\DeclareFontShape{OT1}{uni}{bc}{ui}{<->ssub*uni/b/n}{} -\DeclareFontShape{OT1}{uni}{sbc}{n}{<->ssub*uni/b/n}{} - -% \end{macrocode} -%\iffalse -% -%\fi -% -% \paragraph*{T1 encoding}\file{t1uni.fd} -% Since the T1 encoding relies on the font scheme of \texttt{exbase} -% (EC fonts), and \texttt{dxbase} (DC fonts), by J\"org Knappen and -% Nobert Schwartz, which is a whole new way of making fonts, that -% requires some special messaures that I couldn't incorporate into the -% \universal{} font without a whole lot of work, I chose not to -% make support for the T1 scheme. Therefore this file issues a warning -% and then exists the whole \LaTeX{} run. This may seem a bit drastic, -% but it ensures that you don't get screwed up resuats. -%\iffalse -%<*t1> -%\fi -% \begin{macrocode} -\ProvidesFile{t1uni.fd} - [1998/08/01 v2.0 Non Standard LaTeX font definitions] -\typeout{WARNING: universal font not avaliable in t1 definition.} -\typeout{WARNING: exiting, correct your source.} -\stop - -% \end{macrocode} -%\iffalse -% -%\fi -% -% \paragraph*{U Encoding}\file{uuni.fd} -% This is similar to the normal encoding above, execpt encoding is U. -%\iffalse -%<*u> -%\fi -% \begin{macrocode} -\ProvidesFile{uuni.fd} - [1998/08/01 v2.0 Non Standard LaTeX font definitions] -\DeclareFontFamiliy{U}{uni}{\hyphenchar\font45} -\DeclareFontShape{U}{uni}{m}{n}{ - <5><6><7><8>fulmr8 - <9>fulmr9 - <10><10.95>fulmr10 - <12><14.4>fulmr12 - <17.28><20.74><24.88>fulmr17 - }{} -\DeclareFontShape{U}{uni}{m}{sl}{ - <5><6><7><8>fulmo8 - <9>fulmo9 - <10><10.95>fulmo10 - <12><14.4>fulmo12 - <17.28><20.74><24.88>fulmo17 - }{} -\DeclareFontShape{U}{uni}{m}{sc}{ - <5><6><7><8>fulmc8 - <9>fulmc9 - <10><10.95>fulmc10 - <12><14.4>fulmc12 - <17.28><20.74><24.88>fulmc17 - }{} -\DeclareFontShape{U}{uni}{m}{st}{ - <5><6><7><8>fulmst8 - <9>fulmst9 - <10><10.95>fulmst10 - <12><14.4>fulmst12 - <17.28><20.74><24.88>fulmst17 - }{} -\DeclareFontShape{U}{uni}{b}{n}{ - <5><6><7><8>fulbr8 - <9>fulbr9 - <10><10.95>fulbr10 - <12><14.4>fulbf12 - <17.28><20.74><24.88>fulbr17 - }{} -\DeclareFontShape{U}{uni}{b}{sl}{ - <5><6><7><8>fulbo8 - <9>fulbo9 - <10><10.95>fulbo10 - <12><14.4>fulbo12 - <17.28><20.74><24.88>fulbo17 - }{} -\DeclareFontShape{U}{uni}{b}{sc}{ - <5><6><7><8>fulbc8 - <9>fulbc9 - <10><10.95>fulbc10 - <12><14.4>fulbc12 - <17.28><20.74><24.88>fulbc17 - }{} -\DeclareFontShape{U}{uni}{b}{st}{ - <5><6><7><8>fulbst8 - <9>fulbst9 - <10><10.95>fulbst10 - <12><14.4>fulbst12 - <17.28><20.74><24.88>fulbst17 - }{} -\DeclareFontShape{U}{uni}{m}{it}{<->ssub*uni/m/sl}{} -\DeclareFontShape{U}{uni}{m}{ui}{<->ssub*uni/m/n}{} -\DeclareFontShape{U}{uni}{b}{it}{<->ssub*uni/b/sl}{} -\DeclareFontShape{U}{uni}{bx}{n}{<->ssub*uni/b/n}{} -\DeclareFontShape{U}{uni}{bx}{sl}{<->ssub*uni/b/sl}{} -\DeclareFontShape{U}{uni}{bx}{sc}{<->ssub*uni/b/sc}{} -\DeclareFontShape{U}{uni}{bx}{st}{<->ssub*uni/b/st}{} -\DeclareFontShape{U}{uni}{bx}{it}{<->ssub*uni/b/sl}{} -\DeclareFontShape{U}{uni}{bc}{ui}{<->ssub*uni/b/n}{} -\DeclareFontShape{U}{uni}{sbc}{n}{<->ssub*uni/b/n}{} - -% \end{macrocode} -%\iffalse -% -%\fi - -%\iffalse -%<*unibase> -%\fi -% -% \section{The Font Macros and Programs} -% -% \subsection{Base file --- \texttt{unibase.mf}} -% \file{unibase.mf} -% \Newestchanges{v2.0}{98/08/01}{Base file \texttt{unibase.mf} swa the -% light of day, providing many driver, font control, and drawing -% macros.} -% -% This file defines all the macroes used in the source programs -% for the font. I could have chosen to use \texttt{cmbase}, but -% rather then defining a lot of variables that isn't used, I chose -% to make a base file myself. Also, some af the drawing macros -% presented here still needed to be defined. This file could be -% made into a binary file, but I think that would be a bit to -% much. -% -% First we define the variable \texttt{unibase}, to check later if -% this file has been loaded. -% \begin{macrocode} -unibase := 1 ; -string univer ; -univer = "2.0" ; -if proofing > 1 : - message "Base file for font `universal', version " & univer ; -fi -% \end{macrocode} -% Secondly, we define the variables \texttt{medium} and \texttt{bold} -% to control the font serie to be produced. If \texttt{medium} is set -% to \textsl{true} in the driver file, then a medium series -% (\Lcs{mdseries}) font will be produced, while \texttt{bold} ofcourse -% generates a boldface font. The medium serie may very well be -% more suitiable for long texts then the default font. In $10pt$ -% the default thickness of the pen is $\frac{5}{6}pt\approx 0.8pt$ -% wide for the minuscles, and a bit wider for the majuscules. If -% \texttt{medium} is \texttt{true} then it is $\frac{5}{9}pt\approx -% 0.6pt$ wide. -% -% Booleans \texttt{slant} and \texttt{caps} is used to control the -% shape of the font. If both is \textsl{false} a normal (upright) -% shaped font (\Lcs{upshape}) font is generated. If \texttt{slant} or -% \texttt{caps} is true, either a slanted (\Lcs{slshape}) or small -% caps (\Lcs{scshape}) shaped font is generated. The values of these -% booleans should be set in the driver file, \emph{before} any call to -% \texttt{start\_font}. -% \begin{macrocode} -boolean medium , slant , bold , caps , strict ; -medium := false ; slant := false ; bold := false ; -caps := false ; strict := false ; -% \end{macrocode} -% And then the font is identified as \texttt{"universal"}. -% \begin{macrocode} -font_identifier:="universal"; - -% \end{macrocode} -% -% \subsubsection{Font macros} -% -% These macroes have to do with the general initialization and -% production of the font. The macros needed later on is -% \texttt{start\_font}, and \texttt{end\_font}. -% -% The general idea is, that as little as possible should be -% defined in the driver file, so that the font will have a uniform -% look in all series, shapes, and sizes. All that is needed in the -% driver file is to define some of the above booleans to true, call -% the macro \texttt{start\_font} giving it the size (in \texttt{pt\#}) -% of the font as argument, include of source files, and call the macro -% \texttt{end\_font}. -% -% \begin{fontmacro}{start\_font} -% This is the macro for setting up the needed dimensions and -% variables. First we take into acount the \textit{mode} used, by -% calling \texttt{mode\_setup}, then we define the correct, -% \textit{sharped} units, bassed on the argument to the macro, wich -% should be the size of the font in \texttt{pt\#}. -% \begin{macrocode} -def start_font(expr size) = - u# := size/18 ; - mode_setup; - x_h# := 8u# ; x_w# := 8u# ; m_w# := 11u# ; l_h# := 13u# ; - p_d# := 5u# ; l_s# := 2u# ; r_s# := 2u# ; A_w# := 10u# ; - M_w# := 14u# ; c_d# := 3u#/2 ; C_d# := 2u# ; -% \end{macrocode} -% We test to see, if any of the above booleans is set to -% \textsl{true}, and if so, takes appropiate action. If -% \texttt{medium} is set, the pens gets thinner, thereby producing -% a lighter font. If \texttt{bold} the pens gets thicker, and so a -% heavier font is produced. If \texttt{slant} is set, then the -% inclination (\texttt{slantratio}) of the font is assigned. -% -% No other dimensions then the pen thickness should be differ among -% the \emph{medium} and \emph{bold} font. However, two dimension -% \texttt{c\_d} and \texttt{C\_d} is always set to the same value as -% the pens would be in the current size, if the font to be made was -% \emph{bold}. -% -% Also notice, that two different pens thicknesses is defined -% \texttt{p\_t} and \texttt{P\_t}, so that the majuscules may come out -% a bit thicker then the minuscles. Ofcourse this adds to the -% complexity of the drawing macroes defined below, but in a very -% straight forward way, so I dont't think it will be a problem. -% -% Then we set \texttt{currenttransform} to take into account the -% varibale \texttt{slantratio}. -% \begin{macrocode} - if (medium and bold) : - message "Font can't be both medium and bold, making medium font." ; - medium := true ; - fi; - if medium : p_t# := 2u#/3 ; P_t# := u# ; P_T# := u# ; fi ; - if bold : P_T# := 3u#/2 ; p_t# := 3u#/2 ; P_t# := 2u# ; fi ; - a_h# := x_h#+p_t#/2 ; - if (slant and (caps or strict)) : double_shape := 1 ; fi ; - if (caps and (slant or strict)) : double_shape := 1 ; fi ; - if (strict and (caps or slant)) : double_shape := 1 ; fi ; - if known double_shape : - message "Font cannot be two shapes, doing upright shape." ; - slant := false ; caps := false ; strict := false ; - fi ; - if slant : slantratio := 1/6 ; else: slantratio := 0 ; fi ; - currenttransform := identity slanted slantratio ; -% \end{macrocode} -% We need to set some paramteres for the Font Metric File -% (\texttt{*.tfm}), so that \TeX{} knows how to typeset the characters -% of the font. This is pretty straight, as desribed in the \MFbook{}. -% \begin{macrocode} - font_x_height 8u# ; font_quad 12u#+2u# ; - font_normal_space 8u# ; font_normal_stretch 3u# ; - font_normal_shrink 2u# ; font_extra_space 2u# ; - font_coding_scheme:="TeX text" ; font_size 18u# ; -% \end{macrocode} -% Next we assigns some variables we need later on, defines the -% \emph{un\/}sharped (mode dependent) units, declares some variables -% for later use, and call the macro \texttt{do\_pens} to save the pens -% needed by the font. -% \begin{macrocode} - spanish_shriek:=hex"3C" ; spanish_query:=hex"3E"; - define_pixels(u,x_h,x_w,m_w,l_h,p_d,A_w,M_w,c_d,C_d,a_h); - define_blacker_pixels(p_t,P_t,P_T); - picture e_pic, a_pic ; - do_pens ; -% \end{macrocode} -% The definitions of \texttt{extra\_beginchar} and -% \texttt{extra\_endchar} is responsible for the extra stem width -% of the font. Since this font is pretty uniform in width, we -% can easily do this globally. I got the trick from \texttt{cmbase}, -% where you instead use \texttt{adjust\_fit} after \texttt{beginchar}. -% However, for the above reasons, and because it lessens the source -% programs considerably, I chose to do it this way. -% -% The inclusion of the assignement -% \begin{verbatim} -% charcode := charcode + code_offset ; -% \end{verbatim} -% is for the small caps font, so that characters may be placed at -% non--standard positions in the font. When we are not making a small -% caps font, \texttt{code\_offset} should ofcourse be set to 0 (zero). -% \begin{macrocode} - extra_beginchar := extra_beginchar&"fit_font;" ; - extra_endchar := extra_endchar& - "end_fit_font;extra_proof_rules;charcode:=charcode+code_offset;" ; - code_offset := 0 ; -enddef; - -% \end{macrocode} -% \end{fontmacro} -% -% \begin{fontmacro}{do\_pens} -% This macro is used to set up the pens needed in this font. It is -% called every time one of the dimensions \texttt{p\_t\#} or -% \texttt{P\_t\#} is changed, since those are the \texttt{p/P}en -% \texttt{t/T}hicknesses. -% -% Apart from saving a lot of time, as explained in the \MFbook{}, this -% also garanties, that all pens are transformed correctly when the -% font shape is \textsl{slanted}. -% \begin{macrocode} -def do_pens = - clear_pen_memory ; - pickup pencircle scaled P_T slanted slantratio ; - UniPencir := savepen ; - pickup pencircle scaled p_t slanted slantratio ; - unipencir := savepen ; - pickup pencircle scaled P_t slanted slantratio ; - Unipencir := savepen ; - pickup pensquare scaled P_T slanted slantratio ; - UniPensqu := savepen ; - pickup pensquare scaled p_t slanted slantratio ; - unipensqu := savepen ; - pickup pensquare scaled P_t slanted slantratio ; - Unipensqu := savepen ; -enddef ; - -% \end{macrocode} -% \end{fontmacro} -% -% \begin{fontmacro}{fit\_font} -% This is the macro that changes the width of the font. It is -% derived from \texttt{cmbase}s \texttt{normal\_adjust\_fit}, though -% used in a slightly different way here. As explained in the \MFbook, -% this is a very nice macro, since it is essesially an add--on -% feature. We still specify the width of character in -% \texttt{beginchar}, and \texttt{w} is still this dimension. However, -% extra space is added to the character at both the left and right, -% so that characters don't get too close. -% \begin{macrocode} -def fit_font = - l := -hround(l_s#*hppp) ; interim xoffset := -l ; - charwd := charwd+l_s#+r_s# ; r := l+hround(charwd*hppp) ; - w := r-hround(r_s#*hppp) ; - italcorr charht*slantratio ; -enddef; - -% \end{macrocode} -% \end{fontmacro} -% \begin{fontmacro}{end\_fit\_font} -% Again, this is taken from \texttt{cmbase}, so that extra space is -% added on the sides of the character. -% \begin{macrocode} -def end_fit_font = - w := r+l ; -enddef; - -% \end{macrocode} -% \end{fontmacro} -% -% \begin{fontmacro}{extra\_proof\_rules} -% When doing proofing, it is nice to have some extra rules on the -% proofs, so that errors and mistakes are easiler seen. This macro -% does just that. A verticatal rule is produced at the left and -% right edge, and through the middle of the character. Horizontal -% rules are produced at one quarter, half, and three quarters of the -% character height. Also, if the charcter extence below the baseline, -% a rule is produced at one half the depth. -% \begin{macrocode} -def extra_proof_rules = - if proofing > 1 : - for xa = l,r,w/2: proofrule((xa,-d), (xa,h)) ; endfor ; - for ya = 0,h/4,h/2,3h/4,h: proofrule((l,ya), (r,ya)) ; endfor ; - if d > 0 : - proofrule((l,-d/2), (r,-d/2)) ; - proofrule((l,-d), (r,-d)) ; - fi - fi -enddef ; - -% \end{macrocode} -% \end{fontmacro} -% \begin{fontmacro}{end\_font} -% \texttt{end\_font} is used at the end of the driver file, to set -% ligatures, and end of the file. There is nothing fancy here. Do, -% however, notice no `f' ligatures is defined, as in the Computer -% Modern Roman. This is because they are not meant to be there, -% because `ff' shouldn't come out as `\textunibf{f\kern-.25ex f}', -% which looks bad, but rather as `\textunibf{ff}'. -% -% Also notice, that we haven't defined any characters \textunibf{``} -% or \textunibf{''}, since we make these up of two \textunibf{`} or -% \textunibf{'}. This gives us two more slots we can put other -% characters into. -% \begin{macrocode} -inner bye; % so we can use it inside a macro -def end_font = - ligtable "u" : "h" kern u# ; - ligtable "f" : "f" kern 0 , "l" kern 0 , "i" kern 0 ; - ligtable "o" : "l" kern u# ; - ligtable "?" : "`" =: spanish_query ; - ligtable "!" : "`" =: spanish_shriek ; - ligtable "`" : "`" kern -l_s#-r_s#+p_t# ; - ligtable "'" : "'" kern -l_s#-r_s#+p_t# , - "?" kern 2u#, "!" kern 2u# ; - ligtable "-" : "-" =: hex"7B" ; - ligtable hex"7B" : "-" =: hex"7C" ; - ligtable hex"22" : hex"22" kern -l_s#-r_s# ; - ligtable hex"5C" : hex"5C" kern -l_s#-r_s# ; - ligtable hex"20" : - "l" kern -3c_d#*cosd(15)-p_t#*sind(15)-l_s#-r_s# , - "L" kern -3c_d#*cosd(15)-p_t#*sind(15)-l_s#-r_s# ; - bye -enddef; - -% \end{macrocode} -% \end{fontmacro} -% \begin{fontmacro}{do\_caps} -% This next macro is for the \textunisc{small caps} version of the -% font. Most of it is taken from \texttt{csc.mf} of the Computer -% Modern Font, though not as many dimensions have been redefined in -% this macro. The idea is to utilize this macro whenever you want to -% make a small caps version of majuscles. This macro is used in both -% \texttt{unilow.mf} and \texttt{unilig.mf}. -% -% The argument to \texttt{do\_caps} is the number the new characters -% should be offset from it's original position in the font. -% -% The last \texttt{do\_pens} is needed, since the programs uses saved -% pens, and we have just redefined the dimensions for the pens. -% \begin{macrocode} -def do_caps(expr offset) = - sc_shrink := x_h#/l_h# ; - P_t# := sc_shrink*P_t# ; l_h# := sc_shrink*l_h# ; - A_w# := sc_shrink*A_w# ; M_w# := sc_shrink*M_w# ; - C_d# := sc_shrink*C_d# ; - code_offset := offset ; - define_pixels(l_h,A_w,M_w,C_d) ; - define_blacker_pixels(P_t) ; - do_pens ; -enddef ; - -% \end{macrocode} -% \end{fontmacro} -% \begin{fontmacro}{end\_do\_caps} -% When ever we need to get back to the default setting of dimensions, -% after the use of \texttt{do\_caps}, we call on this macro to do the -% job. The idea is to multiply by \texttt{no\_shrink} which is the -% reciprocal of \texttt{sc\_shrink}. -% \begin{macrocode} -def end_do_caps = - no_shrink := 1/sc_shrink ; - P_t# := no_shrink*P_t# ; l_h# := no_shrink*l_h# ; - A_w# := no_shrink*A_w# ; M_w# := no_shrink*M_w# ; - C_d# := no_shrink*C_d# ; - code_offset := 0 ; - define_pixels(l_h,A_w,M_w,C_d) ; - define_blacker_pixels(P_t) ; - do_pens ; -enddef ; - -% \end{macrocode} -% \end{fontmacro} -% -% \subsubsection{Control macroes} -% -% These macroes are designed to ease the control of individual -% characters. -% -% \begin{fontmacro}{no\_adjust} -% If a character is not supposed to have extra space on either side -% you can say \texttt{no\_adjust} just before -% \begin{quote} -% \texttt{extra\_beginchar := extra\_beginchar\&"} -% \meta{your begin char stuff}\texttt{";}\\ -% \texttt{extra\_endchar := extra\_endchar\&"} -% \meta{your stuff endchar stuff}\texttt{";}\\ -% \texttt{beginchar(}\meta{usual arguments}\texttt{);} -% \end{quote} -% where the two string assigments are optional. -% \begin{macrocode} -def no_adjust= - old_begin_adjust := extra_beginchar ; - old_end_adjust := extra_endchar ; - extra_beginchar := " " ; - extra_endchar := - "extra_proof_rules;charcode:=charcode+code_offset" ; -enddef; - -% \end{macrocode} -% \end{fontmacro} -% -% \begin{fontmacro}{restore\_adjust} -% Use this command to restore automaticly adding extra space around -% the characters. Must be used between a \texttt{endchar} and -% \texttt{beginchar}. -% \begin{macrocode} -def restore_adjust= - extra_beginchar := old_begin_adjust ; - extra_endchar := old_end_adjust ; -enddef; -string old_begin_adjust, old_end_adjust ; - -% \end{macrocode} -% \end{fontmacro} -% -% \subsubsection{Drawing macroes} -% -% I have made this macros for drawing, to ease up the writing of -% source programs. They all simulate a pen of breadth \textit{thick} -% always moving perpendecular to the current path. This is needed -% in the \universal{} font, since all pen breadths are supposed -% to be equal anywhere (at least within a paricular `group'), in any -% direction. -% -% All of the macros heavely use \texttt{penpos}, so the use -% is pretty reliant on the appropiate use of this macro. This -% put some restrictions on the arguments, since \texttt{penpos} -% deals with angles of all sorts. -% -% In the macroes, we use vectors with number $m$, as assigened in the -% last argument of the macros. $m$ should be assigend so that the -% vectors $m,m+1,\ldots,m+4$ does not conflict with already assigned -% vectors, or vectors to be assigend in the current picture. -% -% Though it may seem a somewhat \textit{ad hoc} solution, it is the -% best way I could think of. Ofcourse I could check to see what -% vectors are defined, and then use some others, but that would -% complicate the code unessecary, and since the idea is to hide the -% actual vector operations in the macros, I descided to use the -% course. -% -% (No labels are produced on the proofsheets by this macroes, -% since they use very high numbers, which is rather destracting.) -% -% \begin{fontmacro}{unicir} -% Draws a circle of outer radius \texttt{rad}, and centered at -% \texttt{center}, which shoud be a pair. Notice, no effort is -% made to keep the circle within the character, so the use of -% this macro, should be governed with some caution. -% -% The second argument is the \emph{thickness} of the pen drawing the -% segment. -% -% The last argument \texttt{m} is to insure the uniqueness of -% all pairs. That is, if you need more then one circle in a letter, -% then \texttt{m} should take different values for each circle, so that -% $m_{i}-m_{i+1}>4$. Also \texttt{m} should not take any value -% corrosponing to vectors already defined. This is most easily done if -% \texttt{m} is asigned a large value, like say a multipla of 10, or -% even 100. -% \begin{macrocode} -def unicir(expr rad, thick, center, m)= - pickup pensquare scaled thick; - top z[m] = (0,rad) + center ; penpos[m](thick,90) ; - lft z[m+1] = (-rad,0) + center ; penpos[m+1](thick,180) ; - bot z[m+2] = (0,-rad) + center ; penpos[m+2](thick,270) ; - rt z[m+3] = (rad,0) + center ; penpos[m+3](thick,0) ; - penstroke z[m]e{left}..z[m+1]e{down}.. - z[m+2]e{right}..z[m+3]e{up}..cycle ; - penlabels(range m thru m+3); -enddef; - -% \end{macrocode} -% \end{fontmacro} -% -% \begin{fontmacro}{uniarc} -% Produce a segment of a circle, with radius \texttt{rad}, and -% centered at \texttt{center}. -% -% The size of the segment is determind by the arguments -% \texttt{ang\_a} and \texttt{ang\_b}, consider as angles from a -% horizontal linesegment from \texttt{center} traveling right. That -% means you should specify the angles in at counter--clockwise way, -% and between -360 and 360. \texttt{ang\_b} \emph{must} be bigger then -% \texttt{ang\_a}, otherwise the output is totally unpredictiable. -% -% The second argument is the \emph{thickness} of the pen drawing the -% segment, Again the last argument \texttt{m} is to insure the -% uniqueness of the vectors. The comments above on the argument also -% applies here. -% \begin{macrocode} -def uniarc(expr rad, thick, center, ang_a, ang_b, m)= - pickup pensquare scaled thick ; - path arc.l, arc.r, arc.e ; n:=m ; ang_c := abs(ang_b-ang_a) ; -% \end{macrocode} -% First we check to see, if the user somehow requested an arc of more -% then $360^\circ$. If so, we just call \texttt{unicir}, since this is -% properly intended. If not, we go on to define relevant vectors. -% \begin{macrocode} - if ang_c >= 360 : - unicir(rad,center,n) ; - else: -% \end{macrocode} -% We acctualy define the vectors as if we started in the arc on the -% positiv $x$--axis, considering \texttt{center} as origo, an then -% latter on turn the arc the appropiate angle. Notice the heavy use of -% \texttt{penpos} and \texttt{[ ]} to evaluate variable \texttt{m}. -% \begin{macrocode} - top z[n] = (0,rad) + center ; penpos[n](thick,90) ; - arc.r := z[n]r{left} ; - arc.l := z[n]l{left} ; -% \end{macrocode} -% The next \texttt{if...fi} loop ensures we don't define a -% whole lot of useless vectors. The \MF{} primitiv path macro -% \texttt{...} does a very good job at approching a segment of a -% circle even if only two points are defined in an interval of -% $90^\circ$, if we at the same time utilizes the direction mechanisme -% of \MF{}. -% \begin{macrocode} - if ang_c > 90 : - n := n+1 ; lft z[n] = (-rad,0) + center ; penpos[n](thick,180) ; - arc.r := arc.r&z[n-1]r..z[n]r{down} ; - arc.l := arc.l&z[n-1]l..z[n]l{down} ; - if ang_c > 180 : - n := n+1 ; bot z[n] = (0,-rad) + center ; penpos[n](thick,270) ; - arc.r := arc.r&z[n-1]r..z[n]r{right} ; - arc.l := arc.l&z[n-1]l..z[n]l{right} ; - if ang_c > 270 : - n := n+1 ; rt z[n] = (rad,0) + center ; penpos[n](thick,0) ; - arc.r := arc.r&z[n-1]r..z[n]r{up} ; - arc.l := arc.l&z[n-1]l..z[n]l{up} ; - fi ; - fi ; - fi ; -% \end{macrocode} -% After the \texttt{if} loop, we define the final point, make the -% complete path, and finishes off by drawing the arc, turned the -% appropiate angle. -% \begin{macrocode} - n:=n+1 ; z[n] = z[m] rotatedabout(center,ang_c) ; - penpos[n](thick,90+ang_c) ; - arc.r := arc.r&z[n-1]r..z[n]r{dir(180+ang_c)} ; - arc.l := arc.l&z[n-1]l..z[n]l{dir(180+ang_c)} ; - arc.e := arc.l--reverse arc.r--cycle; - fill (arc.e rotatedabout(center,-90+ang_a)); - fi; - penlabels(range m thru n); -enddef; - -% \end{macrocode} -% Notice the use of two paths, and reversal of one. This is -% essentially what the \texttt{plain.mf} macro \texttt{penstroke} -% does. However, that macro couldn't be used here, since we are -% building a path on the fly, so every step is needed to be fully -% known, and \texttt{penstroke} makes new variables to do the job. -% -% Also, we use the integer \texttt{n} for surfixes, since this -% limits the creation of vectors, and eases the path building. -% \end{fontmacro} -% -% \begin{fontmacro}{uniend} -% This macro is somewhat similar to \texttt{uniarc} above, but has a -% different use. Where \texttt{uniarc} is intended for arcs with a -% radius bigger then the pen thickness, this macro is intended for -% arcs with a radius of exactly same size as the pen thickness, hence -% this macro produces a \emph{filled} segment of a circle with a -% radius of the current pen thickness. -% -% This macro, like \texttt{uniarc}, takes 5 arguments: the radius of -% the arc; the center of the arc, which should be of type -% \texttt{pair}; the starting and ending angle; plus the first number -% of the vectors needed to draw this figure. The considerations above -% in \texttt{uniarc} conserning the angles also apply here. -% -% Notice once again the use of \texttt{if..fi} loops to define the -% relevant vectors and paths. -% \begin{macrocode} -def uniend(expr rad, center, ang_a, ang_b, m)= - path arc ; n:=m ; ang_c := abs(ang_b-ang_a) ; - if ang_c >= 360 : - Rad := 2*rad ; - pickup pencircle scaled Rad ; z[n]=center ; drawdot z[n] ; - else: - z[n] = (0,rad) + center ; arc := center{up}--z[n]{left} ; - if ang_c > 90 : - n := n+1 ; z[n] = (-rad,0) + center ; - arc := arc&z[n-1]..z[n]{down} ; - if ang_c > 180 : - n := n+1 ; z[n] = (0,-rad) + center ; - arc := arc&z[n-1]..z[n]{right} ; - if ang_c > 270 : - n := n+1 ; z[n] = (rad,0) + center ; - arc := arc&z[n-1]..z[n]{up} ; - fi ; - fi ; - fi ; - n := n+1 ; z[n] = z[m] rotatedabout(center,ang_c) ; - arc := arc&z[n-1]..z[n]{dir(180+ang_c)}--cycle ; - fill (arc rotatedabout(center,-90+ang_a)); - fi; - penlabels(range m thru n); -enddef; - -% \end{macrocode} -% Notice, once more we are building a path on the fly, so some caution -% was used here. Again the \texttt{plain.mf} macro \texttt{penstroke} -% doesn't do the job here. This is because only a part of a stroke is -% actually wanted. You might think then, that the \texttt{plain.mf} -% macro \texttt{cutoff} then would do the job, but in my experience -% that macro has some serious flaws\footnote{A quick use of the Unix -% command \texttt{grep} on most of the Computer Modern Fonts reveals -% that \texttt{cutoff} is \emph{never} used, which I take to -% indicate its weakness.}. -% \end{fontmacro} -% -% \begin{fontmacro}{unilne} -% This macro is intended for drawing non--vertical or horizontal -% lines, since this is easily done with \texttt{draw}. It takes -% six arguments, the thickness of the pen drawing the line, the -% starting point of the line (\texttt{start}), the ending point of -% line (\texttt{stop}), which should be higher and more to the right -% then the starting point, and the cutoff--style -% (\texttt{endcutstart, endcutstop}). - -% If \texttt{endcut}$x$ is positiv, then, the line is cut off -% horizontally at the relevant point $x$. -% -% If \texttt{endcut}$x$ is negativ, then, the line is cut off -% vertically at $x$. -% -% If it is zero, then the line is cut off perpendicular to the slant -% of the line at $x$. -% -% Also, if \texttt{endcut}$x$ is zero, the starting point is the -% point corrosponding to the lowest height and leftmost width, and the -% ending point corrosponds to the heighest height and rightmost width -% of the line. Again \texttt{m} insures unique vectors. -% \begin{macrocode} -def unilne(expr thick, start, stop, endcutstart, endcutstop, m)= - pickup pensquare scaled thick; - if endcutstart = endcutstop : - if endcutstart = 0 : - lft bot z[m] = start ; rt top z[m+1] = stop ; - ang_c := angle(z[m+1]-z[m]) ; - penpos[m](thick,-90+ang_c) ; - penpos[m+1](thick,-90+ang_c) ; - elseif endcutstart > 0 : - lft z[m] = start ; rt z[m+1] = stop ; - ang_c := angle(z[m+1]-z[m]) ; - penpos[m](thick/sind(ang_c),0) ; - penpos[m+1](thick/sind(ang_c),0) ; - elseif endcutstart < 0: - bot z[m] = start ; top z[m+1] = stop ; - ang_c := angle(z[m+1]-z[m]) ; - penpos[m](thick/cosd(ang_c),90) ; - penpos[m+1](thick/cosd(ang_c),90) ; - fi; - penstroke z[m]e--z[m+1]e ; - else : - message "Different endcuts on unilne not implemented yet."; - fi; - n := m + 1 ; - penlabels(range m thru n); -enddef; - -% \end{macrocode} -% \end{fontmacro} -% -%\iffalse -% -%\fi -% -%\iffalse -%<*low> -%\fi -% \subsection{The Minuscles (lowercase letters) --- \texttt{unilow.mf}} -% \file{unilow.mf} -% -% \Newestchanges{v2.0}{98/08/01}{All of \texttt{unilow.mf} is defined -% within a conditional, to ease the generation of the small caps -% shaped fonts.} -% This whole file is loaded only conditionally to make the generation -% of small caps font easier. -% \begin{macrocode} -if not caps : - -% \end{macrocode} -% \begin{fontcode}{a} -% The letter \textunibf{a} is interresting in the sense, that the bottom -% part of the curve, is \emph{not} a segement of an arc. The exact -% curvature of this part, is controversial; some font designers have -% chosen to make it a segement of an arc, making all of the curve, a -% circle; while others have chosen to make it a straight line. I -% decided to take the middleroad, since it appeals more to me -% aestheticly, even though it deviates from the principle of building -% all characters from the two simple forms: the cirle and the line. -% -% The \textuni{a} is also saved in the picture variable -% \texttt{a\_pic}, for use in \texttt{unilig.mf}. -% \begin{macrocode} - beginchar("a",x_w#,x_h#,0); "The letter a"; - uniarc(w/2,p_t,(w/2,h/2),0,290,10); - pickup unipensqu ; - z1 = ((cosd(290)*(w-p_t)+w)/2,(sind(290)*(w-p_t)+w)/2); - z2 = (w-p_t/2,2h/5) ; penpos1(p_t,-70); penpos2(p_t,-45); - fill z1l{dir(20)}..z2l{dir(45)}-- - z2r{dir(225)}..z1r{dir(200)}--cycle; - top rt z3 = (w,.5h) ; bot rt z4 = (w,0) ; draw z3{down}--z4 ; - penlabels(1,2,3,4); - a_pic := currentpicture ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{b} -% There is not much to say about this letter, only that it is a -% \textunibf{d} reflected through the vertical center axis. -% \begin{macrocode} - beginchar("b",x_w#,l_h#,0); "The letter b"; - unicir(w/2,p_t,(w/2,w/2),10); - pickup unipensqu ; - lft bot z1 = (0,w/2) ; lft top z2 = (0,h) ; draw z1{up}--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{c} -% This is a rather short program, but is interresting, since some care -% has to be taken, when assigning the width. Since a \textunibf{c} is not -% a full cirle, but only a segment opening towards the right, it would -% look wrong, if the letter was as wide, as it is tall. -% \begin{macrocode} - beginchar("c",x_w#*(1+cosd(30))/2,x_h#,0); "The letter c"; - uniarc(h/2,p_t,(h/2,h/2),30,330,10); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{d} -% A flipped \textunibf{b} --- that's it! -% \begin{macrocode} - beginchar("d",x_w#,l_h#,0); "The letter d"; - unicir(w/2,p_t,(w/2,w/2),10); - pickup unipensqu ; - rt bot z1 = (w,w/2) ; rt top z2 = (w,h) ; draw z1{up}--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{e} -% Notice the middle bar. The arc can not go all the way down to the -% bar, because then the \textunibf{e} would end in a arc, on the right -% side. We want a flat end, so an extra dot has to be made. -% -% The \textuni{e} is also saved in the picture variable -% \texttt{e\_pic}, for use in \texttt{unilig.mf}. -% \begin{macrocode} - beginchar("e",x_w#,x_h#,0); "The letter e"; - uniarc(w/2,p_t,(w/2,h/2),0,330,10); - temp := p_t/2 ; - pickup pensquare xscaled p_t yscaled temp slanted slantratio ; - top rt z1 = (w,h/2) ; drawdot z1 ; - pickup unipensqu ; - z2 = (p_t,h/2) ; z3 = (w-p_t,h/2) ; draw z2--z3 ; - penlabels(1,2,3); - e_pic := currentpicture ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{f} -% The horizontal placement of the bar is somewhat controversial. I -% think it looks best if it is placed, so that the top of the bar, is -% at the same height, as the top of an \textunibf{x}, that is $1ex$. -% \begin{macrocode} - beginchar("f",4p_t#,l_h#,0); "The letter f"; - uniarc(3/4w,p_t,(3/4w,h-3/4w),90,180,10); - pickup unipensqu ; - top rt z1 = (w,h) ; drawdot z1 ; - lft top z2 = (0,h-3/4w) ; bot lft z3 = (0,0) ; draw z2--z3 ; - top lft z4 = (0,x_h) ; top rt z5 = (w,x_h) ; draw z4--z5 ; - penlabels(1,2,3,4,5); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{g} -% The \textunibf{g} is a very good measure of how low ascenders should -% go. Some might want to add a square on top of the ascender, so that -% the letter ended in flat to the right, but I found it displeacing, -% and therefore left it out. -% \begin{macrocode} - beginchar("g",x_w#,x_h#,p_d#); "The letter g" ; - uniarc(w/2,p_t,(w/2,h/2),30,360,10) ; - pickup unipensqu ; - top rt z1 = (w,h/2) ; bot rt z2 = (w,-d) ; draw z1--z2; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{h} -% It can be argued, that this letter is too wide. However, I decieded -% to weight the concept of homongeious circles higher in this case. -% \begin{macrocode} - beginchar("h",x_w#,l_h#,0); "The letter h" ; - uniarc(w/2,p_t,(w/2,w/2),0,180,10) ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top rt z3 = (w,x_h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{i} -% Quite a simple letter, though it can be argued wether the dot should -% be square, or as here circular. -% \begin{macrocode} - beginchar("i",p_t#,l_h#,0) ; "The letter i" ; - pickup unipensqu ; - top lft z1 = (0,x_h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - pickup unipencir ; - top lft z3 = (0,h) ; drawdot z3 ; - penlabels(1,2,3) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{j} -% No left stem is added at the bottom, since it isn't needed! -% \begin{macrocode} - beginchar("j",p_t#,l_h#,p_d#); "The letter j" ; - pickup unipensqu ; - top lft z1 = (0,x_h) ; bot lft z2 = (0,-d) ; draw z1--z2 ; - pickup unipencir ; - top lft z3 = (0,h) ; drawdot z3 ; - penlabels(1,2,3) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{k} -% Again, this letter is narrower then most of the letters. This is -% because, the to arcs isn't full halfarcs, but rather quarterarcs. -% \begin{macrocode} - beginchar("k",(x_h#+3p_t#)/2,x_h#,0) ; "The letter k" ; - uniarc((h+p_t)/2,p_t,(p_t,h),270,360,10) ; - uniarc((h+p_t)/2,p_t,(p_t,0),0,90,20) ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{l} -% What is a line, but a line! Well right now it is an `l'. You may -% wonder why no stems are added, to destingish an `l' from a vertical -% bar, as in math mode. Well, how often will you put a math vertical -% bar next to an text `l'. -% \begin{macrocode} - beginchar("l",p_t#,l_h#,0) ; "The letter l" ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{m} -% This proved more tricky then I thought. Originally, I wanted the arc -% of the \textunibf{n} to be as high as those of the \textunibf{m}. This -% meant, that either the \textunibf{n} should be very narrow, or the -% \textunibf{m} very wide; either way it wouldn't look good. So after a -% few experiments, I decided for the current form. -% \begin{macrocode} - beginchar("m",m_w#,x_h#,0) ; "The letter m" ; - temp := .25*(w+p_t); - uniarc(temp,p_t,(temp,h-temp),0,180,10) ; - uniarc(temp,p_t,(w-temp,h-temp),0,180,20) ; - pickup unipensqu ; - top lft z1 = (0,h-temp) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top z3 = (w/2,h-temp) ; bot z4 = (w/2,0) ; draw z3--z4 ; - top rt z5 = (w,h-temp) ; bot rt z6 = (w,0) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{n} -% Tricky because of the \textunibf{m} (see above). -% \begin{macrocode} - beginchar("n",x_w#,x_h#,0); "The letter n" ; - uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; - pickup unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{o} -% Well, this is just a circle, nothing fancy. Why not make it oval, -% you say. I say, listen --- Herbert Bayer just turned in his grave! -% \begin{macrocode} - beginchar("o",x_w#,x_h#,0) ; "The letter o"; - unicir(w/2,p_t,(w/2,h/2),10); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{p} -% Try to flip the \textunibf{b} horizontally, and tell me what you get? -% \begin{macrocode} - beginchar("p",x_w#,x_h#,p_d#) ; "The letter p" ; - unicir(w/2,p_t,(w/2,w/2),10); - pickup unipensqu ; - lft top z1 = (0,h/2) ; lft bot z2 = (0,-d) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{q} -% Why not try to destingish the \textunibf{q} more from the \textunibf{g}? -% Well if you look at the two letters, I think, you will get the -% answer. Also, my intuition of a \textunibf{q} is that of a reflected -% \textunibf{p}, but that is just \emph{my} intuition! -% \begin{macrocode} - beginchar("q",x_w#,x_h#,p_d#) ; "The letter q" ; - unicir(w/2,p_t,(w/2,w/2),10); - pickup unipensqu ; - rt top z1 = (w,h/2) ; rt bot z2 = (w,-d) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{r} -% Well that is really simplle, but illustrates a fine point --- why -% use more strokes, when fewer is needed? -% \begin{macrocode} - beginchar("r",3p_t#,x_h#,0) ; "The letter r" ; - uniarc(w,p_t,(w,h-w),90,180,10) ; - pickup unipensqu ; - top lft z1 = (0,h-w) ; bot lft z2 = (0,0) ; draw z1--z2; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{s} -% \Newestchanges{v2.0}{98/08/01}{Considerable simplifications.} -% This is a `slow' letter, i.e.\ it takes \MF{} quite some time to -% compute. The reason is simple --- a \emph{lot} of curves is drawn. -% \begin{macrocode} - beginchar("s",x_w#,x_h#,0) ; "The letter s" ; - temp := (h+p_t)/4 ; - uniarc(temp,p_t,(temp,temp),180,270,10) ; - uniarc(temp,p_t,(w-temp,temp),270,450,20) ; - uniarc(temp,p_t,(temp,h-temp),90,270,30) ; - uniarc(temp,p_t,(w-temp,h-temp),0,90,40) ; - pickup unipensqu ; - bot lft z1 = (temp,0) ; bot rt z2 = (w-temp,0) ; draw z1--z2 ; - lft z3 = (temp,h/2) ; rt z4 = (w-temp,h/2) ; draw z3--z4 ; - top lft z5 = (temp,h) ; top rt z6 = (w-temp,h) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{t} -% As I argued before, the placement of the bar in the \textunibf{f} and -% \textunibf{t} is controversial. -% \begin{macrocode} - beginchar("t",p_t#+2c_d#,l_h#,0); "The letter t" ; - pickup unipensqu ; - top z1 = (w/2,h) ; bot z2 = (w/2,0) ; draw z1--z2 ; - top lft z3 = (0,x_h) ; top rt z4 = (w,x_h) ; draw z3--z4 ; - penlabels(1,2,3,4); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{u} -% Flip a letter here, and flip a letter there --- all in a days work -% of a font designer! -% \begin{macrocode} - beginchar("u",x_w#,x_h#,0); "The letter u" ; - uniarc(w/2,p_t,(w/2,w/2),180,360,10) ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; - top rt z3 = (w,h) ; bot rt z4 = (w,w/2) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{v} -% The lines and the arc doesn't intersect in a flowing way, but the -% error is so small it will not be seen in normal use. However, if -% the font is maginified to, say $70pt$, it might be a problem. I -% hope to get into this, some time in the future. For now, make do. -% \begin{macrocode} - beginchar("v",x_w#,x_h#,0); "The letter v" ; - unilne(p_t,(0,h),(w/2,p_t),1,1,10); - unilne(p_t,(w/2,p_t),(w,h),1,1,20); - uniarc(p_t,p_t,(w/2,p_t),180,360,30); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{w} -% Flippedy--flop. -% \begin{macrocode} - beginchar("w",m_w#,x_h#,0) ; "The letter w" ; - temp := .25*(w+p_t); - uniarc(temp,p_t,(temp,temp),180,360,10) ; - uniarc(temp,p_t,(w-temp,temp),180,360,20) ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,temp) ; draw z1--z2 ; - top z3 = (w/2,h) ; bot z4 = (w/2,temp) ; draw z3--z4 ; - top rt z5 = (w,h) ; bot rt z6 = (w,temp) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{x} -% This is a bit tricky --- the two arces are each half the width wide, -% but since they share middle part, they leave the width of the -% strokes uncoverd. To remedy this problem, four dots are drawn. It -% would be silly, if the \textunibf{x} wasn't as wide as it is tall, -% namely \texttt{x\_w}. -% \begin{macrocode} - beginchar("x",x_w#,x_h#,0) ; "The letter x" ; - uniarc(h/2,p_t,(p_t/2,h/2),270,90,10); - uniarc(h/2,p_t,(w-p_t/2,h/2),90,270,20); - temp := (w-h+p_t)/2 ; - pickup pensquare xscaled temp yscaled p_t slanted slantratio ; - lft top z1 = (0,h) ; drawdot z1 ; - lft bot z2 = (0,0) ; drawdot z2 ; - rt top z3 = (w,h) ; drawdot z3 ; - rt bot z4 = (w,0) ; drawdot z4 ; - penlabels(1,2,3,4); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{y} -% Flip an reflect, or just turn, it's all the same, it will still be a -% transformation of an \textunibf{h} -% \begin{macrocode} - beginchar("y",x_w#,x_h#,p_d#); "The letter y" ; - uniarc(w/2,p_t,(w/2,w/2),180,360,10) ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,w/2); draw z1--z2 ; - top rt z3 = (w,h) ; bot rt z4 = (w,-d) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{z} -% This is a bit tricky letter, since what I wanted was for middle line -% to have an inclination such that its edges would be tangents to the -% circle segments at the endpoints of the horizontal lines. I tried to -% solve this problem analytically, but gave up. I also tried to use -% some of \texttt{plain.mf}'s macros, but none of them gave me the -% resulat I wanted. So I finally made the approximation seen below. -% If you can come up with a good solution to this problem, please let -% me know. -% \begin{macrocode} - beginchar("z",x_w#,x_h#,0) ; "The letter z" ; - pickup unipensqu ; - top lft z1 = (0,h) ; top rt z2 = (w-p_t,h) ; draw z1--z2 ; - bot lft z3 = (p_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ; - phi := angle((w,h-p_t)-(0,p_t)) ; % Uuuuupps !?!!!!!! - z5 = (p_t,p_t) ; z6 = z5 + p_t*(-sind(phi),cosd(phi)) ; - z7 = (w-p_t,h-p_t) ; z8 = z7 + p_t*(sind(phi),-cosd(phi)) ; - uniend(p_t,z5,90+phi,270,10); - uniend(p_t,z7,-90+phi,90,20); - fill z5--z6--z7--z8--cycle ; - penlabels(range 1 thru 8); - endchar; - -% \end{macrocode} -% \end{fontcode} -% As explain in the begining of the section, this file is one big -% \texttt{if...else...fi} loop to mak the generation of the small caps -% font easier. -% -% The idea is, that if \texttt{caps} is -% \texttt{true}, then the main part of this file shouldn't be used, -% but rather \texttt{uniupp.mf} should be loaded again, but with -% different diffintions of dimensions for uppercase letters, so that -% they come out as small as lowercase letters, hence --- small -% caps. -% -% This is done by the macro \texttt{do\_caps}, which we utilies -% inside a group, so that the changes made by \texttt{do\_caps} will be -% undone after the group, and hence not affect the rest of the font. -% -% \begin{macrocode} -else : - do_caps(ASCII"a" - ASCII"A") ; - input uniupp ; - end_do_caps ; -fi ; - -% \end{macrocode} -%\iffalse -% -%\fi -%\iffalse -%<*upp> -%\fi -% \subsection{The Majuscles (uppercase letters) --- \texttt{uniupp.mf}} -% \file{uniupp.mf} -% -% As noted earlier, Herbert Bayer never did design any majuscles, -% since he considered them useless. However, majuscles are avaliable -% in the current implentation and are to be used at your lesuire. Of -% course, if you agree with the Bauhaus school, and think uppercase -% letters are useless, you shouldn't use them. Then, perhaps, you -% should also refrain from using non--standard letters shuch as German -% double s, Scandinavian ligatures, Spanish schriek, and perhaps even -% accents of any kind. This may seem a little drastic, but the -% train--of--tought should be clear: Why use letters and symbols that -% are in the best case obsolete, and in the worst useless or without -% significans? -% -% \Newestchanges{v2.0}{98/08/01}{All of \texttt{unilow.mf} is defined -% within a conditional, to ease the generation of the strict shaped -% fonts.} -% -% To facilitate a use of the \universal{} font conforming to Bayers' -% original idea, that is without majusceles this file is loaded only -% under the condition that \texttt{strict} is \emph{false}. -% \begin{macrocode} -if not strict : - -% \end{macrocode} -% \begin{fontcode}{A} -% It can be argued where the bar should be placed. I choose place it -% the middle, since most of the majuscles tend to have a symmetry axis -% long this line, so I thought it apropiate to follow this line of -% thought. Ofcourse, I'm the only one to blane for this, since Herbert -% Bayer \emph{never} designed any majuscles! (So flame me for -% guessing). -% \begin{macrocode} - beginchar("A",A_w#,l_h#,0); "The letter A"; - uniarc(w/2,P_t,(w/2,h-w/2),0,180,10); - pickup Unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; - lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{B} -% This letter is somewhat tricky, since it is not clear wether the -% arces should be placed directly on the left down stoke, or there -% should be some distance filled with horizontal bars. I chose the -% second solution, even though it isn't the most simple, and hence in -% better agrement with the concept of this font design. However, the -% first solution does make the letter very narrow compared with some -% of the other letters. -% \begin{macrocode} - beginchar("B",A_w#,l_h#,0) ; "The letter B" ; - rad := 1/4(h+P_t) ; - uniarc(rad,P_t,(w-rad,h-rad),-90,90,10) ; - uniarc(rad,P_t,(w-rad,rad),-90,90,20) ; - uniend(P_t,(P_t,h-P_t),90,180,30) ; - uniend(P_t,(P_t,P_t),180,270,40) ; - pickup Unipensqu ; - top lft z1 = (0,h-P_t) ; bot lft z2 = (0,P_t) ; draw z1--z2 ; - top lft z3 = (P_t,h) ; top rt z4 = (w-rad,h) ; draw z3--z4 ; - lft z5 = (P_t,h/2) ; rt z6 = (w-rad,1/2h) ; draw z5--z6 ; - bot lft z7 = (P_t,0) ; bot rt z8 = (w-rad,0) ; draw z7--z8 ; - penlabels(range 1 thru 8); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{C} -% This is really simple, since it is just an enlargement of the -% corresponding minuscule, so the is really nothing interresting -% here. -% \begin{macrocode} - beginchar("C",l_h#*(1+cosd(30))/2,l_h#,0); "The letter C"; - uniarc(h/2,P_t,(h/2,h/2),30,330,10); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{D} -% As with the B, there are two ways to do this letter: One way would -% be to make the arc a true half segment of a circle, the other would -% be to compose it of two quarter segments, joined by a vertical -% line. The second solution also entails, that two horizontal lines -% should connect the two quarter circles with the left vertical -% line. Again I chose the simple solution, which --- ofcourse --- -% amounts to the first mentioned above. -% \begin{macrocode} - beginchar("D",A_w#,l_h#,0); "The letter D"; - uniarc(1/2h,P_t,(w-1/2h,1/2h),-90,90,10); - uniend(P_t,(P_t,h-P_t),90,180,20); - uniend(P_t,(P_t,P_t),180,270,30); - pickup Unipensqu ; - top lft z1 = (0,h-P_t) ; bot lft z2 = (0,P_t) ; draw z1--z2 ; - top lft z3 = (P_t,h) ; top rt z4 = (w-1/2h,h) ; draw z3--z4 ; - bot lft z5 = (P_t,0) ; bot rt z6 = (w-1/2h,0) ; draw z5--z6 ; - penlabels(1,2) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{E} -% It can be argued, that the middle bar should be shorter then the top -% and bottom bar, but since this only complicates things, I chose not -% to do so. However, I am not going to be stuborn on this, and it may -% well prove to be better aestethics, if the middle bar is shortend. -% \begin{macrocode} - beginchar("E",A_w#,l_h#,0); "The letter E" ; - uniend(P_t,(P_t,h-P_t),90,180,10); - uniend(P_t,(P_t,P_t),180,270,20); - pickup Unipensqu ; - lft top z1 = (P_t,h) ; rt top z2 = (w,h) ; draw z1--z2 ; - lft z3 = (P_t,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ; - lft bot z5 = (P_t,0) ; rt bot z6 = (w,0) ; draw z5--z6 ; - lft top z7 = (0,h-P_t) ; lft bot z8 = (0,P_t) ; draw z7--z8 ; - penlabels(range 1 thru 8) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{F} -% Ofcourse, very similar to the \textunibf{E}. The consideration -% concerning the middle bar of the \textunibf{E} will ofcourse reflect -% on this letter. -% \begin{macrocode} - beginchar("F",A_w#,l_h#,0); "The letter F" ; - uniend(P_t,(P_t,h-P_t),90,180,10); - pickup Unipensqu ; - lft top z1 = (P_t,h) ; rt top z2 = (w,h) ; draw z1--z2 ; - lft z3 = (P_t,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ; - lft top z5 = (0,h-P_t) ; lft bot z6 = (0,0) ; draw z5--z6 ; - penlabels(range 1 thru 8); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{G} -% This is very similar to the minuscle \textunibf{g}, the only difference -% is the size, and that the down stroke doens't extend below the -% baseline. -% \begin{macrocode} - beginchar("G",l_h#,l_h#,0); "The letter G" ; - uniarc(w/2,P_t,(w/2,h/2),30,360,10) ; - pickup Unipensqu ; - top rt z1 = (w,h/2) ; bot rt z2 = (w,0) ; - draw z1--z2; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{H} -% An awfull simple letter. There can be no doubt on how this should -% look. -% \begin{macrocode} - beginchar("H",A_w#,l_h#,0); "The letter H" ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top rt z3 = (w,h) ; bot rt z4 = (w,0) ; draw z3--z4 ; - lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{I} -% It doesn't get any simpler! -% \begin{macrocode} - beginchar("I",P_t#,l_h#,0); "The letter I" ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{J} -% \begin{macrocode} - beginchar("J",P_t#+2C_d#,l_h#,0); "The letter J"; - uniend(P_t,(w-P_t,P_t),270,360,10); - pickup Unipensqu ; - lft bot z1 = (0,0) ; rt bot z2 = (w-P_t,0) ; draw z1--z2 ; - rt bot z3 = (w,P_t) ; rt top z4 = (w,h) ; draw z3--z4 ; - penlabels(1,2,3,4); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{K} -% Similar to \textunibf{k}. -% \begin{macrocode} - beginchar("K",(l_h#+3P_t#)/2,l_h#,0) ; "The letter K" ; - uniarc((h+P_t)/2,P_t,(P_t,h),270,360,10) ; - uniarc((h+P_t)/2,P_t,(P_t,0),0,90,20) ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{L} -% This is just a reflected \textunibf{J}. -% \begin{macrocode} - beginchar("L",P_t#+2C_d#,l_h#,0) ; "The letter L" ; - uniend(P_t,(P_t,P_t),180,270,10) ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,P_t) ; draw z1--z2 ; - bot lft z3 = (P_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{M} -% The same kind of considerations as in \textunibf{m} went into this -% letter. -% \begin{macrocode} - beginchar("M",M_w#,l_h#,0) ; "The letter M" ; - temp := .25*(w+P_t); - uniarc(temp,P_t,(temp,h-temp),0,180,10) ; - uniarc(temp,P_t,(w-temp,h-temp),0,180,20) ; - pickup Unipensqu ; - top lft z1 = (0,h-temp) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top z3 = (w/2,h-temp) ; bot z4 = (w/2,0) ; draw z3--z4 ; - top rt z5 = (w,h-temp) ; bot rt z6 = (w,0) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{N} -% Tricky because of the \textunibf{M} (see above). -% \begin{macrocode} - beginchar("N",A_w#,l_h#,0); "The letter N" ; - uniarc(w/2,P_t,(w/2,h-w/2),0,180,10) ; - pickup Unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0); draw z1--z2 ; - top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{O} -% No, this is not going to be an oval, but a \emph{circle\/}! -% \begin{macrocode} - beginchar("O",l_h#,l_h#,0) ; "The letter O"; - unicir(w/2,P_t,(w/2,h/2),10); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{P} -% No surprises. -% \begin{macrocode} - beginchar("P",A_w#,l_h#,0) ; "The letter P"; - unicir(w/2,P_t,(w/2,h-w/2),10) - pickup Unipensqu ; - lft top z1 = (0,h-w/2) ; lft bot z2 = (0,0) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{Q} -% There are to variants of this letter, one is an reflected -% \textunibf{P}, and the other is a vaiant of an \textunibf{O}. The -% default one, is the \textunibf{Q} variant. If you want to use the -% other variant, you can acceses it directly with \Lcs{varQ}, or you -% can pass the argument \texttt{varQ} to the \textsc{uni} package. -% (Option \texttt{varQ} not implemented yet!) -% \begin{macrocode} - beginchar("Q",l_h#,l_h#,p_d#) ; "The letter Q"; - unicir(w/2,P_t,(w/2,w/2),10); - pickup Unipensqu ; - top z1 = (w/2,3P_t) ; bot z2 = (w/2,-d) ; draw z1--z2 ; - penlabels(1,2); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{R} -% I'm not enterily happy with this letter, but quite frankly, I don't -% know how else to make it. Please give me your suggestion. -% \begin{macrocode} - beginchar("R",A_w#,l_h#,0) ; "The letter R"; - unicir(w/2,P_t,(w/2,h-w/2),10) ; - rad := h-w+P_t ; - uniarc(rad,P_t,(w-rad,0),0,90,20) ; - pickup Unipensqu ; - lft top z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; - temp := w/2-rad ; - if temp>0 : - pickup pensquare xscaled temp yscaled P_t ; - lft top z3 = (1/2w,rad) ; drawdot z3 ; - fi; - penlabels(1,2,3) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{S} -% Just like the minuscle \textunibf{s}, this is a `slow' letter, i.e., -% it takes \MF{} quite some time to compute. -% \begin{macrocode} - beginchar("S",A_w#,l_h#,0) ; "The letter S" ; - temp := (h+P_t)/4 ; - uniarc(temp,P_t,(temp,temp),180,270,10) ; - uniarc(temp,P_t,(w-temp,temp),270,450,20) ; - uniarc(temp,P_t,(temp,h-temp),90,270,30) ; - uniarc(temp,P_t,(w-temp,h-temp),0,90,40) ; - pickup Unipensqu ; - bot lft z1 = (temp,0) ; bot rt z2 = (w-temp,0) ; draw z1--z2 ; - lft z3 = (temp,h/2) ; rt z4 = (w-temp,h/2) ; draw z3--z4 ; - top lft z5 = (temp,h) ; top rt z6 = (w-temp,h) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{T} -% Again --- simple! -% \begin{macrocode} - beginchar("T",A_w#,l_h#,0); "The letter T" ; - pickup Unipensqu ; - top z1 = (w/2,h) ; bot z2 = (w/2,0) ; draw z1--z2 ; - top lft z3 = (0,h) ; top rt z4 = (w,h) ; draw z3--z4 ; - penlabels(1,2,3,4); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{U} -% \emph{Font--jepody:} The character of the \universal{} font, that, -% when reflected gives \textunibf{U}. -% \begin{macrocode} - beginchar("U",A_w#,l_h#,0); "The letter U" ; - uniarc(w/2,P_t,(w/2,w/2),180,360,10) ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; - top rt z3 = (w,h) ; bot rt z4 = (w,w/2) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{V} -% See also the minuscle \textunibf{v}. -% \begin{macrocode} - beginchar("V",A_w#,l_h#,0); "The letter V" ; - unilne(P_t,(0,h),(w/2,P_t),1,1,10); - unilne(P_t,(w/2,P_t),(w,h),1,1,20); - uniarc(P_t,P_t,(w/2,P_t),180,360,30); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{W} -% Flippedy--flop. -% \begin{macrocode} - beginchar("W",M_w#,l_h#,0) ; "The letter W" ; - temp := .25*(w+P_t); - uniarc(temp,P_t,(temp,temp),180,360,10) ; - uniarc(temp,P_t,(w-temp,temp),180,360,20) ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,temp) ; draw z1--z2 ; - top z3 = (w/2,h) ; bot z4 = (w/2,temp) ; draw z3--z4 ; - top rt z5 = (w,h) ; bot rt z6 = (w,temp) ; draw z5--z6 ; - penlabels(1,2,3,4,5,6); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{X} -% This is a bit tricky --- see the minuscle \textunibf{x}. -% \begin{macrocode} - beginchar("X",l_h#,l_h#,0) ; "The letter X" ; - uniarc(h/2,P_t,(P_t/2,h/2),270,90,10); - uniarc(h/2,P_t,(w-P_t/2,h/2),90,270,20); - temp := (h-w+P_t)/2 ; - pickup pensquare xscaled temp yscaled P_t slanted slantratio ; - lft top z1 = (0,h) ; draw z1 ; - lft bot z2 = (0,0) ; draw z2 ; - rt top z3 = (w,h) ; draw z3 ; - rt bot z4 = (w,0) ; draw z4 ; - penlabels(1,2,3,4); - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{Y} -% \Newestchanges{v2.0}{98/08/01}{Character \textunibf{Y} changed.} -% This actually a bit different from \textunibf{y}, but it looks right. -% \begin{macrocode} - beginchar("Y",A_w#,l_h#,0); "The letter Y" ; - uniarc(w/2,P_t,(w/2,h-P_t),180,360,10) ; - pickup Unipensqu ; - top lft z1 = (0,h) ; drawdot z1 ; - top rt z2 = (w,h) ; drawdot z2 ; - top z3 = (w/2,h-w/2) ; bot z4 = (w/2,0) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{Z} -% Again a tricky letter. For more onm this please refer to the -% minuscle \textunibf{z}. -% -% Notice that the angle \texttt{phi} in this majuscle is not the -% same as in the minuscles \textunibf{z}, since this letter doesn't fit -% in a square, but is retangular. -% \begin{macrocode} - beginchar("Z",A_w#,l_h#,0) ; "The letter Z" ; - pickup Unipensqu ; - top lft z1 = (0,h) ; top rt z2 = (w-P_t,h) ; draw z1--z2 ; - bot lft z3 = (P_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ; - phi := angle((w,h-P_t)-(0,P_t)) ; - z5 = (P_t,P_t) ; z6 = z5 + P_t*(-sind(phi),cosd(phi)) ; - z7 = (w-P_t,h-P_t) ; z8 = z7 + P_t*(sind(phi),-cosd(phi)) ; - uniend(P_t,z5,90+phi,270,10); - uniend(P_t,z7,-90+phi,90,20); - fill z5--z6--z7--z8--cycle ; - penlabels(range 1 thru 8); - endchar; - -% \end{macrocode} -% \end{fontcode} -% As explain in the begining of the section, this file is one big -% \texttt{if...else...fi} loop to mak the generation of the strict -% font easier. -% -% The idea is, that if \texttt{strict} is \texttt{true}, then the main -% part of this file shouldn't be used, but rather \texttt{unilow.mf} -% should be loaded again, but with this time the characters should be -% placed where the majuscules should be. -% -% This is done by defining \texttt{code\_offset} to be the (negative) -% difference the ASCII code for \texttt{A} and \texttt{a}. After we -% have input \texttt{unilow.mf} once more, we reset -% \texttt{code\_offset}. -% \begin{macrocode} -else : - code_offset := ASCII"A" - ASCII"a" ; - input unilow ; - code_offset := 0 ; -fi ; - -% \end{macrocode} -%\iffalse -% -%\fi -%\iffalse -%<*dig> -%\fi -% \subsection{The Numbers --- (\texttt{unidig.mf})} -% \file{unidig.mf} -% -% I couldn't find any design of numbers, I could directly ascribe to -% Herbert Bayer. I, however, found some other examples, and from -% these, and my general conception of the font, I designed the -% numerals, as they are seen below. -% -% \begin{fontcode}{0} -% Perhaps this should have been a circle, but to destingice the zero -% from the majuscle {\uni O}, I chose to strecth it. -% \begin{macrocode} -beginchar("0",A_w#,l_h#,0) ; "The number 0" ; - uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; - uniarc(w/2,p_t,(w/2,w/2),180,360,20) ; - pickup unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; - top rt z3 = (w,h-w/2) ; bot rt z4 = (w,w/2) ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{1} -% Here we use the dimension \texttt{c\_d}, since the stem should be -% thee same lenght in the medium font as in the bold face one. -% \begin{macrocode} -beginchar("1",2c_d#,l_h#,0) ; "The number 1" ; - uniend(p_t,(w-p_t,h-p_t),0,90,10) ; - pickup unipensqu ; - lft top z1 = (0,h) ; rt top z2 = (w-p_t,h) ; draw z1--z2 ; - rt top z3 = (w,h-p_t) ; rt bot z4 = (w,0) ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{2} -% Again, this is a bit tricky, for the same reason as the minuscle -% {\uni z}. -% \begin{macrocode} -beginchar("2",A_w#,l_h#,0) ; "The number 2" ; - uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; - phi := angle((w,h-w/2)-(0,p_t)) ; - z1 = (w-p_t,h-w/2) ; z2 = z1 + p_t*(sind(phi),-cosd(phi)) ; - z3 = (p_t,p_t) ; z4 = z3 + p_t*(-sind(phi),cosd(phi)) ; - fill z1--z2--z3--z4--cycle ; - uniend(p_t,z1,270+phi,360,20) ; - uniend(p_t,z3,90+phi,270,30) ; - pickup unipensqu ; - bot lft z5 = (p_t,0) ; bot rt z6 = (w,0) ; draw z5--z6 ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{3} -% By first defining to paths similar to the two circle segments, it is -% possible to calculate the intersectionpoint, and thereby the angle -% \texttt{phi}, where the to segments meet, relative to one of the -% centers. This angle is then used to define the \emph{real} path, and -% the rightmost point of the middle bar. -% \begin{macrocode} -beginchar("3",A_w#,l_h#,0) ; "The number 3" ; - path arc_a, arc_b ; - arc_a = (w,h-w/2)..(w/2,h-w) ; arc_b = (w,w/2)..(w/2,w) ; - z3 = arc_a intersectionpoint arc_b ; phi := angle(z3-(w/2,w/2)) ; - uniarc(w/2,p_t,(w/2,h-w/2),-phi,180,10) ; - uniarc(w/2,p_t,(w/2,w/2),-180,phi,20) ; - pickup unipensqu ; - rt z1 = (w/2*(1+cosd(phi)),h/2) ; lft z2 = (w/2,h/2) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{4} -% One could argue, that the top left stroke should be vertical, but I -% chose to go for a $45^\circ$ slanted line, for aestethic reasons. -% \begin{macrocode} -beginchar("4",A_w#,l_h#,0) ; "The number 4" ; - z1 = (w-p_t,h-p_t) ; z2 = z1 + p_t*(-1/sqrt(2),1/sqrt(2)) ; - z3 = (p_t,h-w+p_t) ; z4 = z3 + p_t*(-1/sqrt(2),1/sqrt(2)) ; - fill z1--z2--z4--z3--cycle ; - uniend(p_t,z1,0,135,10) ; - uniend(p_t,z3,135,270,20) ; - pickup unipensqu ; - top rt z5 = (w,h-p_t) ; bot rt z6 = (w,0) ; draw z5--z6 ; - bot lft z7 = (p_t,h-w) ; bot rt z8 = (w,h-w) ; draw z7--z8 ; - penlabels(range 1 thru 8) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{5} -% This gave me some trouble. I originally wanted the arc to have a -% diameter the width of the character, but that meant, that the to -% horizontal lines of the font, came so close to each other, that it -% didn't look good. So I played a little with \texttt{rad}, and -% decided that the current value gave the nicest resault. -% \begin{macrocode} -beginchar("5",A_w#,l_h#,0) ; "The number 5" ; - rad := 9w/20 ; - uniarc(rad,p_t,(w-rad,rad),-150,90,10) ; - uniend(p_t,(p_t,h-p_t),90,180,20) ; - uniend(p_t,(p_t,2rad),180,270,30) ; - pickup unipensqu ; - top lft z1 = (p_t,2rad) ; top rt z2 = (w-rad,2rad) ; draw z1--z2 ; - bot lft z3 = (0,2rad) ; top lft z4 = (0,h-p_t) ; draw z3--z4 ; - top lft z5 = (p_t,h) ; top rt z6 = (w,h) ; draw z5--z6 ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{6} -% This was almost to easy --- a circle, an arc, and a line connecting -% them. -% \begin{macrocode} -beginchar("6",A_w#,l_h#,0) ; "The number 6" ; - unicir(w/2,p_t,(w/2,w/2),10) ; - uniarc(w/2,p_t,(w/2,h-w/2),60,180,20) ; - pickup unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{7} -% Apperently, this character could have the same problems as the -% \textuni{2}, but it didn't --- can you see why not? -% \begin{macrocode} -beginchar("7",A_w#,l_h#,0) ; "The number 7" ; - z1 = (w-p_t,h-p_t) ; phi := angle(z1) ; - uniend(p_t,z1,-90+phi,90,10) ; - z2 = z1 + p_t*(cosd(90-phi),-sind(90-phi)) ; - z3 = (p_t/cosd(90-phi),0) ; z4 = (0,0) ; - fill z1--z2--z3--z4--cycle ; - pickup unipensqu ; - top lft z5 = (0,h) ; top rt z6 = (w-p_t,h) ; draw z5--z6 ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{8} -% Ha ha, to circles, one on top of the other. Some may prefer if the -% bottom most circle had a slightly larger radius then the top most, -% but I believe that to be in conflict with the general idea of -% simplicity. -% \begin{macrocode} -beginchar("8",1/2*(l_h#+p_t#),l_h#,0) ; "The number 8" ; - unicir(w/2,p_t,(w/2,w/2),10) ; - unicir(w/2,p_t,(w/2,h-w/2),20) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{9} -% See above under \textuni{6}. -% \begin{macrocode} -beginchar("9",A_w#,l_h#,0) ; "The number 9" ; - unicir(w/2,p_t,(w/2,h-w/2),10) ; - uniarc(w/2,p_t,(w/2,w/2),-150,0,20) ; - pickup unipensqu ; - top rt z1 = (w,h-w/2) ; bot rt z2 = (w,w/2) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -%\iffalse -% -%\fi -%\iffalse -%<*spe> -%\fi -% \subsection{Specials --- \texttt{unispe.mf}} -% \file{unispe.mf} -% -% For these characters, I couldn't find any original design, -% so once again, I did some inter-- and extrapolation, plus I had some -% print--outs of other implenations of Herbert Bayers universal -% font. So once again, I am to blame for any aestethic judgements. -% -% \begin{fontcode}{\char"10} -% At first I thought I didn't had to do this character, but then I -% realized that you \emph{do} needed, since some words are spelled -% with some sort of accent over the ``i'', other then a single dot, -% e.g., \textunibf{na\"ive}. -% \begin{macrocode} -beginchar(hex"10",p_t#,x_h#,0) ; "The dotless letter i" ; - pickup unipensqu ; - bot lft z1 = (0,0) ; top lft z2 = (0,h) ; draw z1--z2; - penlabels(1,2); -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"11} -% Non single dot j's are not as frequent as those of i's, so for the -% sake of completness, if nothing else, this letter is included. -% \begin{macrocode} -beginchar(hex"11",p_t#,x_h#,p_d#) ; "The dotless letter j" ; - pickup unipensqu ; - bot lft z1 = (0,-d) ; top lft z2 = (0,h) ; draw z1--z2 ; - penlabels(1,2); -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"24} -% I couldn't make up my mind wether this should just be a \textunibf{s}, -% with a vertical bar through, or if I should make it differntly. In -% the end, I chose to make it different, since I think it looks best -% in the context of the font. -% \begin{macrocode} -beginchar("$",(l_h#-c_d#+p_t#)/2,l_h#,c_d#) ; "The dollar sign ($)" ; - uniarc(w/2,p_t,(w/2,w/2),180,450,10) ; - uniarc(w/2,p_t,(w/2,h-c_d-w/2),0,270,20) ; - pickup unipensqu ; - top z1 = (w/2,h) ; bot z2 = (w/2,-d) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"26} -% You could argue back and forth on the shape of the ampersand, but I -% decided to go for a simple design. -% \begin{macrocode} -beginchar("&",(l_h#+p_t#)/2+c_d#,l_h#,c_d#) ; "The ampersand (&)" ; - rad := (w-c_d)/2 ; - unicir(rad,p_t,(rad,h-rad),10) ; - uniarc(rad,p_t,(rad,rad),0,270,20) ; - pickup unipensqu ; - lft bot z1 = (rad,0) ; rt bot z2 = (w,0) ; draw z1--z2 ; - rt top z3 = (w-c_d,rad) ; rt bot z4 = (w-c_d,-d) ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{?} -% I did have some considerations concerning this. Since I had kind of -% decided to make avery junction ``smooth'', this also had to -% be. However, that meant, that my original plan, to make this letter -% as wide as an \textunibf{A}, didn't work, so I had to make it less -% wide, which in the end does look better. -% \begin{macrocode} -beginchar("?",l_h#-5c_d#/2,l_h#,0) ; "The question mark (?)" ; - temp := angle((P_T,-w/2)) - 0.01 ; - uniarc(w/2,P_T,(w/2,h-w/2),temp,180,10) ; - uniend(P_T,((w+P_T)/2,h-w),90,180,20) ; - uniend(P_T,((w+P_T)/2,h-w+P_T),270,360+temp,30) ; - pickup UniPensqu ; - top z1 = (w/2,h-w) ; bot z2 = (w/2,2P_T) ; draw z1--z2 ; - pickup UniPencir ; - bot z3 = (w/2,0) ; drawdot z3 ; - penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"3E} -% These Spanish special letters, are just rotations, so nothing -% special is going on here. -% \begin{macrocode} -beginchar(spanish_query,l_h#-5c_d#/2,x_h#,p_d#) ; "The Spanish query" ; - temp := angle((-P_T,w/2))-0.01 ; - uniarc(w/2,P_T,(w/2,-d+w/2),temp,360,10) ; - uniend(P_T,((w-P_T)/2,-d+w),270,360,20) ; - uniend(P_T,((w-P_T)/2,-d+w-P_T),90,temp,30) ; - pickup UniPensqu ; - bot z1 = (w/2,-d+w) ; top z2 = (w/2,h-2P_T) ; draw z1--z2 ; - pickup UniPencir ; - top z3 = (w/2,h) ; drawdot z3 ; - penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"3C} -% See above. -% \begin{macrocode} -beginchar(spanish_shriek,P_T#,x_h#,p_d#) ; "The Spanish shriek" ; - pickup UniPencir ; top z1 = (w/2,h) ; drawdot z1 ; - pickup UniPensqu ; top z2 = (w/2,h-2P_T) ; bot z3 = (w/2,-d) ; - draw z2--z3 ; penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -%\iffalse -% -%\fi -%\iffalse -%<*pun> -%\fi -% \subsection{Punctuations --- \texttt{unipun.mf}} -% \file{unipun.mf} -% -% This is the programs for general punctuation marks, ranging from -% period to ast. -% -% \begin{fontcode}{\char"21} -% Quite a simple character. Notice the use of \texttt{unipencir}. -% \begin{macrocode} -beginchar("!",P_T#,l_h#,0) ; "The exclamation mark (!)" ; - pickup UniPensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,2P_T) ; draw z1--z2 ; - pickup UniPencir ; - bot lft z3 = (0,0) ; drawdot z3 ; - penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{(} -% Here, and in the next character ()) we don't use pens, since we can -% get a much better resault using the \MF{} path macro \texttt{...} . -% \begin{macrocode} -beginchar("(",x_w#/2,l_h#,p_d#) ; "The left paranthesis (()" ; - z1 = (w,h) ; z2 = (p_t,(h-d)/2) ; z3 = (w,-d) ; - z4 = (w-p_t,-d) ; z5 = (0,(h-d)/2) ; z6 = (w-p_t,h) ; - fill z1..z2..z3--z4..z5..z6--cycle ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{)} -% \begin{macrocode} -beginchar(")",x_w#/2,l_h#,p_d#) ; "The right paranthesis ())" ; - z1 = (p_t,h) ; z2 = (w,(h-d)/2) ; z3 = (p_t,-d) ; - z4 = (0,-d) ; z5 = (w-p_t,(h-d)/2) ; z6 = (0,h) ; - fill z1..z2..z3--z4..z5..z6--cycle ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% -% \begin{fontcode}{\#} -% I never really got satisfied with this letter, but this is the best -% I could do --- who ever uses a \# anyway! -% \begin{macrocode} -beginchar("#",x_w#,x_h#,0) ; "The hash mark (#)" ; - unilne(p_t,(0,0),(w/2,h),1,1,10) ; - unilne(p_t,(w/2,0),(w,h),1,1,20) ; - pickup unipensqu ; - top lft z1 = (0,(h-c_d)/2) ; top rt z2 = (w,(h-c_d)/2) ; - bot lft z3 = (0,(h+c_d)/2) ; bot rt z4 = (w,(h+c_d)/2) ; - draw z1--z2 ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\%} -% Among other characters, this one made me define a dimension called -% \texttt{c\_d}, which is to be used for all kinds of curves. The idea -% is that, some sizes curves should depend on the weight of the font, -% and others not. Those that \emph{shouldn't} will use \texttt{c\_d}. -% \begin{macrocode} -beginchar("%",x_w#,l_h#,0) ; "The percent sign (%)" ; - temp := 3c_d/2 ; - unicir(temp,p_t,(temp,h-temp),10) ; - unicir(temp,p_t,(w-temp,temp),20) ; - unilne(p_t,(0,0),(w,h),1,1,30) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{'} -% Agian we have a translated comma --- the apostrophe. -% \begin{macrocode} -beginchar("'",2P_T#,l_h#,0) ; "The apostrophe (')" ; - uniend(w/2,(w/2,h-w/2),0,180,10) ; - z1 = (0,h-w/2) ; z2 = (w,h-w/2) ; z3 = (0,h-3w/2) ; - fill z1--z2--z3--cycle ; penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{*} -% This isn't really complicated execpt for the value of \texttt{temp}, -% which insures that the top of ast will be in the character. -% \begin{macrocode} -beginchar("*",x_w#,l_h#,0) ; "The ast (*)" ; - path rect ; - temp := h-(w*sind(60)-p_t*cosd(60))/2 ; - pickup unipensqu ; - lft z1 = (0,temp) ; rt z2 = (w,temp) ; draw z1--z2 ; - rect = (bot lft z1)--(top lft z1)--(top rt z2)--(bot rt z2)--cycle ; - fill rect rotatedabout((w/2,temp),60) ; - fill rect rotatedabout((w/2,temp),120) ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{+} -% Plus and minus, now that's easy. -% \begin{macrocode} -beginchar("+",x_w#,x_h#,0) ; "The plus sign (+)" ; - pickup unipensqu ; - lft z1 = (0,w/2) ; rt z2 = (w,w/2) ; draw z1--z2 ; - bot z3 = (w/2,0) ; top z4 = (w/2,w) ; draw z3--z4 ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{,} -% Incedently, the apostrophs (both single and reversed), are -% just translations and reflections of the comma. -% -% \textsl{Mathemathical problem:} Work out which algebraic group the -% characters `\textunibf{,}', `\textunibf{'}', and `\textunibf{`}', -% belongs to? -% \begin{macrocode} -beginchar(",",2P_T#,2P_T#,2P_T#) ; "The punctuation ," ; - uniend(w/2,(w/2,0),0,180,10) ; - z1 = (0,0) ; z2 = (w,0) ; z3 = (0,-d) ; - fill z1--z2--z3--cycle ; penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{-} -% Minus? --- isn't it the opposite of plus? -% \begin{macrocode} -beginchar("-",4x_w#/5,x_h#,0) ; "The hyphen (-)" ; - pickup unipensqu ; - lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ; - penlabels(1,2); -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{.} -% Wow, a dot! -% \begin{macrocode} -beginchar(".",2P_T#,2P_T#,0) ; "The punctuation ." ; - uniend(w/2,(w/2,h/2),0,360,10) ; -% pickup UniPencir ; lft bot z1 = (0,0) ; drawdot z1 ; penlabels(1); -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{/} -% This is a nice utilization of \texttt{unilne}. -% \begin{macrocode} -beginchar("/",x_w#,l_h#,0) ; "The slash (/)" ; - unilne(p_t,(0,0),(w,h),1,1,10) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{:} -% Wauw, \emph{two} dots --- cool! -% \begin{macrocode} -beginchar(":",2P_T#,x_h#,0) ; "The punctuation :" ; - uniend(w/2,(w/2,h-w/2),0,360,10) ; - uniend(w/2,(w/2,w/2),0,360,20) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{;} -% Again, this is straight forward. -% \begin{macrocode} -beginchar(";",2P_T#,x_h#,2P_T#) ; "The punctuation ;" ; - uniend(w/2,(w/2,h-w/2),0,360,10) ; - uniend(w/2,(w/2,0),0,180,20) ; - z2 = (0,0) ; z3 = (w,0) ; z4 = (0,-d) ; fill z2--z3--z4--cycle ; - penlabels(1,2,3,4) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"3D} -% These characters are rediculously simple. -% \begin{macrocode} -beginchar("=",x_w#,x_h#,0) ; "The equal sign (=)" ; - pickup unipensqu ; - top lft z1 = (0,(h-p_t)/2) ; top rt z2 = (w,(h-p_t)/2) ; - bot lft z3 = (0,(h+p_t)/2) ; bot rt z4 = (w,(h+p_t)/2) ; - draw z1--z2 ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{@} -% Now this was a bit of a challenge. It is clear, that the left stroke -% should be a straight line tarveling all the way to the baseline, but -% how big should the small circle be. I decided to go for the largest -% one, that didn't touch or intersected the outer arc more then one -% place, i.e., at the far left. -% \begin{macrocode} -beginchar("@",l_h#,l_h#,0) ; "The at sign (@)" ; - uniarc(w/2,p_t,(w/2,h/2),0,240,10) ; - unicir(w/3,p_t,(2w/3,w/3),20) ; - pickup unipensqu ; - top rt z1 = (w,w/2) ; bot rt z2 = (w,0) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{[} -% Notice the soft corners. This is ofcourse accomplieshed with -% \texttt{uniend}, which turned out to be a very nice macro. -% \begin{macrocode} -beginchar("[",3p_t#,l_h#,p_d#) ; "The left bracket ([)" ; - uniend(p_t,(p_t,h-p_t),90,180,10) ; - uniend(p_t,(p_t,-d+p_t),180,270,20) ; - pickup unipensqu ; - top lft z1 = (p_t,h) ; top rt z2 = (w,h) ; draw z1--z2 ; - top lft z3 = (0,h-p_t) ; bot lft z4 = (0,-d+p_t) ; draw z3--z4 ; - bot lft z5 = (p_t,-d) ; bot rt z6 = (w,-d) ; draw z5--z6 ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{]} -% Speaking of reflections. -% \begin{macrocode} -beginchar("]",3p_t#,l_h#,p_d#) ; "The right braket (])" ; - uniend(p_t,(w-p_t,h-p_t),0,90,10) ; - uniend(p_t,(w-p_t,-d+p_t),270,360,20) ; - pickup unipensqu ; - top lft z1 = (0,h) ; top rt z2 = (w-p_t,h) ; draw z1--z2 ; - top rt z3 = (w,h-p_t) ; bot rt z4 = (w,-d+p_t) ; draw z3--z4 ; - bot lft z5 = (0,-d) ; bot rt z6 = (w-p_t,-d) ; draw z5--z6 ; - penlabels(range 1 thru 6) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{`} -% Who is this `comma' character --- he keeps poping up the strangest -% places. -% \begin{macrocode} -beginchar("`",2P_T#,l_h#,0) ; "The reversed apostroph (`)" ; - uniend(w/2,(w/2,h-w),180,360,10) ; - z1 = (0,h) ; z2 = (0,h-w) ; z3 = (w,h-w) ; fill z1--z2--z3--cycle ; - penlabels(1,2,3) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{--} -% Ah, a horizontal line --- how fascinating! -% \begin{macrocode} -beginchar(hex"7B",m_w#,x_h#,0) ; "The en-dash (--)" ; - pickup unipensqu ; - lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{---} -% And another horizontal line --- and it's even longer then the -% previous one. -% \begin{macrocode} -beginchar(hex"7C",M_w#,x_h#,0) ; "The em-dash (---)" ; - pickup unipensqu ; - lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ; - penlabels(1,2) ; -endchar; - -% \end{macrocode} -% \end{fontcode} -%\iffalse -% -%\fi -%\iffalse -%<*acc> -%\fi -% \subsection{Accents --- \texttt{uniacc.mf}} -% \file{uniacc.mf} -% \begin{fontcode}{\char"12} -% Even though you use a reversed apostrophe in \LaTeX{} to get this -% accent, the accent shouldn't look like a apostophe, that would be -% far to clumsy. So instead we \emph{rotate} a comma and translate it -% --- algebraic groups again! -% \begin{macrocode} -beginchar(hex"12",x_w#,l_h#,0) ; "The accent `" ; - uniend(P_T/2,(w/2,a_h+P_T/2),90,270,10) ; - z1 = (w/2,a_h+P_T) ; z2 = (w/2,a_h) ; z3 = (w/2+P_T,a_h) ; - fill z1--z2--z3--cycle ; penlabels(1,2,3) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"13} -% See above. -% \begin{macrocode} -beginchar(hex"13",x_w#,l_h#,0) ; "The accent '" ; - uniend(P_T/2,(w/2,a_h+P_T/2),-90,90,10) ; - z1 = (w/2,a_h+P_T) ; z2 = (w/2,a_h) ; z3 = (w/2-P_T,a_h) ; - fill z1--z2--z3--cycle ; penlabels(1,2,3) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"14} -% \begin{macrocode} -beginchar(hex"14",x_w#,l_h#,0) ; "The accent hachek" ; - z1 = (w/2,a_h+p_t) ; uniend(p_t,z1,225,315,10) ; - z2 = z1 + p_t*(-1,-1)/sqrt(2) ; z3 = z1 + p_t*(-1,1) ; - z4 = z3 + (-p_t*sqrt(2),0) ; path rombe ; - rombe := z1--z2--z4--z3--cycle ; fill rombe ; - fill rombe reflectedabout ((w/2,0),(w/2,h)) ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"15} -% \begin{macrocode} -beginchar(hex"15",x_w#,l_h#,0) ; "The accent breve" ; - rad := 3p_t/2 ; uniarc(rad,p_t,(w/2,a_h+rad),180,360,10) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"16} -% \begin{macrocode} -beginchar(hex"16",x_w#,a_h#+p_t#,0) ; "The accent macron (bar)" ; - pickup unipensqu ; - bot lft z1 = (w/2-2p_t,a_h) ; bot rt z2 = (w/2+2p_t,a_h) ; - draw z1--z2 ; penlabels(1,2) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"17} -% \begin{macrocode} -beginchar(hex"17",A_w#+4/3*(l_h#-x_h#)*slantratio,l_h#,0) ; - "The accent circle" ; - rad := P_T ; unicir(rad,p_t,(w/2,h-rad),10) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"18} -% \begin{macrocode} -beginchar(hex"18",x_w#,x_h#,2c_d#) ; "The accent cidelia" ; - uniarc(d/2,2P_T/3,(w/2+d/4,-d/2),90,270,10) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"20} -% \begin{macrocode} -phi := 15 ; tmp# := 3c_d# ; define_pixels(tmp) ; -beginchar(hex"20",tmp#*cosd(phi)+p_t#*sind(phi),l_h#,0) ; - "The accent bar over l" ; - z1 = (0,(h+p_t*cosd(phi)-tmp*sind(phi))/2) ; - z2 = (p_t*sind(phi),(h-p_t*cosd(phi)-tmp*sind(phi))/2) ; - z3 = (w,(h-p_t*cosd(phi)+tmp*sind(phi))/2) ; - z4 = (w-p_t*sind(phi),(h+p_t*cosd(phi)+tmp*sind(phi))/2) ; - fill z1--z2--z3--z4--cycle ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"5E} -% \begin{macrocode} -beginchar(hex"5E",x_w#,l_h#,0) ; "The accent hat" ; - z1 = (w/2,a_h+p_t) ; uniend(p_t,z1,45,136,10) ; - z2 = z1 + p_t*(-1,1)/sqrt(2) ; z3 = z1 + p_t*(-1,-1) ; - z4 = z3 + (-p_t*sqrt(2),0) ; path rombe ; - rombe := z1--z2--z4--z3--cycle ; fill rombe ; - fill rombe reflectedabout ((w/2,0),(w/2,h)) ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"5F} -% \begin{macrocode} -beginchar(hex"5F",x_w#,l_h#,0) ; "The accent dot" ; - pickup UniPencir ; bot z1 = (w/2,a_h) ; drawdot z1 ; penlabels(1) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"7D} -% \begin{macrocode} -beginchar(hex"7D",x_w#,l_h#,0) ; "The accent ''" ; - rad := P_T/2 ; - uniend(rad,(w/2-rad,a_h+rad),-90,90,10) ; - uniend(rad,(w/2+P_T,a_h+rad),-90,90,20) ; - z1 = (w/2-rad-P_T,a_h) ; z2 = (w/2-rad,a_h) ; - z3 = (w/2-rad,a_h+P_T) ; fill z1--z2--z3--cycle ; - z4 = (w/2,a_h) ; z5 = (w/2+P_T,a_h) ; - z6 = (w/2+P_T,a_h+P_T) ; fill z4--z5--z6--cycle ; - penlabels(range 1 thru 6) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"7E} -% \begin{macrocode} -beginchar(hex"7E",x_w#,l_h#,0) ; "The accent ~" ; - rad := (w*sqrt(2)+p_t)/4 ; temp := (2w-p_t*sqrt(2))/8 ; - uniarc(rad,p_t,(w/2+temp,a_h+rad),225,315,10) ; - uniarc(rad,p_t,(w/2-temp,a_h+rad-2temp),45,135,20) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"7F} -% \begin{macrocode} -beginchar(hex"7F",x_w#,l_h#,0) ; "The accent umlout (double dot)" ; - pickup UniPencir ; - bot z1 = (w/2-P_T,a_h) ; bot z2 = (w/2+P_T,a_h) ; - drawdot z1 ; drawdot z2 ; penlabels(1,2) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -%\iffalse -% -%\fi -%\iffalse -%<*lig> -%\fi -% \subsection{Ligatures --- \texttt{unilig.mf}} -% \file{unilig.mf} -% -% \begin{fontcode}{SS} -% If we are making a small caps shaped font, then we need to make an -% upper case version of the german double s (\ss), so we start of -% testing if the \texttt{caps} flag is set. -% \begin{macrocode} -if caps: - beginchar(hex"19",5/2x_w#,x_h#,0) ; "Ligature SS" ; - temp := (h+p_t)/4 ; - uniarc(temp,p_t,(temp,temp),180,270,10) ; - uniarc(temp,p_t,(2w/5-temp,temp),270,450,20) ; - uniarc(temp,p_t,(temp,h-temp),90,270,30) ; - uniarc(temp,p_t,(2w/5-temp,h-temp),0,90,40) ; - pickup unipensqu ; - bot lft z1 = (temp,0) ; bot rt z2 = (2w/5-temp,0) ; - lft z3 = (temp,h/2) ; rt z4 = (2w/5-temp,h/2) ; - top lft z5 = (temp,h) ; top rt z6 = (2w/5-temp,h) ; - draw z1--z2 ; draw z3--z4 ; draw z5--z6 ; - penlabels(1,2,3,4,5,6) ; - currentpicture := currentpicture + (currentpicture shifted - (3/5w,0)) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"19} -% If we are not making a small caps font, then the usual german double -% s is made. -% \begin{macrocode} -else: - beginchar(hex"19",(l_h#+3p_t#)/2,l_h#,p_t#) ; "Ligature ss" ; - rad := (w-p_t)/2 ; - uniarc(rad,p_t,(p_t+rad,h-rad),-90,180,10) ; - uniarc(rad,p_t,(p_t+rad,rad),-90,90,20) ; - pickup unipensqu ; - top lft z1 = (p_t,h-rad) ; bot lft z2 = (p_t,-d) ; draw z1--z2 ; - lft z3 = (0,h/2) ; rt z4 = (w-rad,h/2) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar ; -fi ; - -% \end{macrocode} -% \end{fontcode} -% The next three characters should not be made in a small caps font, -% so these are all put in side the conditinal -% \begin{verbatim} -% if not caps : -% \end{verbatim} -% However, we need to put small caps versions of these letters in the -% position of these charcaters, so we use a little trick later on to -% do this. -% -% And if we are making a \emph{strict} shaped font, then we need to -% put these characters into two slots each, with three slots between -% the to replicas of the character. In that case, we first evaluate -% the code once, then if \texttt{strict} is false, we go on in the -% code, otherwise, we evaluate the code once more, \emph{but} the -% characters is put into new slots 3 slots later then before, since -% \texttt{code\_offset} now is 3. Finally in the end we reset -% \texttt{code\_offset}. -% -% This trick is used also in \texttt{uniext.mf} and -% \texttt{unilow.mf}. -% -% \begin{fontcode}{\char"1A} -% This is just a combination of an \textunibf{a} and \textunibf{e}, -% which we earlier on saved in the picture variables \texttt{a\_pic} -% and \texttt{e\_pic}. -% \begin{macrocode} -if not caps : - for temp = 1,2 : - if temp = 2 : code_offset := 3 ; fi ; - beginchar(hex"1A",2x_w#-p_t#,x_h#,0) ; "Ligature ae" ; - currentpicture := a_pic + ( e_pic shifted ((w-p_t)/2,0)) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"1B} -% This is just a compinition of an \textunibf{o} and -% \textunibf{e}. The \textunibf{e} we saved earlier on in the picture -% variable \texttt{e\_pic}. The \textunibf{o} part is drawn anew. -% \begin{macrocode} - beginchar(hex"1B",2x_w#-p_t#,x_h#,0) ; "Ligature oe" ; - unicir(h/2,p_t,(h/2,h/2),10) ; - currentpicture := currentpicture + (e_pic shifted ((w-p_t)/2,0)) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"1C} -% This is really a simple letter. It utilizes the to macros -% \texttt{unicir} and \texttt{unilne} in a very nice way, I think. -% \begin{macrocode} - beginchar(hex"1C",x_w#,x_h#,0) ; "Ligature o/" ; - unicir(w/2,p_t,(w/2,h/2),10) ; - unilne(p_t,(0,0),(w,h),1,1,20) ; - endchar ; - exitif (not strict) ; - if temp = 2 : code_offset := 0 ; fi ; - endfor ; -fi ; - -% \end{macrocode} -% \end{fontcode} -% Since we don't want any majusculues in the \emph{strict} shaped -% font, the next three characteres is only generated if -% \texttt{strict} is \texttt{false}. -% -% Since we have to make two version of the majuscules below in a small -% caps font, we set up an \texttt{fot} loop. The trick is this: The -% loop while always execute once, so the characters will always be -% made in the original size. Now, if we are making a small caps font, -% then the loop will execute once more, and we call the macro -% \texttt{do\_font} (\texttt{temp = 2}), so that the new characters -% will have the right dimensions. -% \begin{macrocode} -if not strict : - for temp = 1,2 : - if temp = 2 : do_caps(-3) ; fi ; - -% \end{macrocode} -% \begin{fontcode}{\char"1D} -% It wouln't make any sense to just do a combinition of \textunibf{A} -% and \textunibf{E}, as were done in minuscules above, so we draw the -% whole letter anew. -% \begin{macrocode} - beginchar(hex"1D",M_w#,l_h#,0) ; "Ligature AE" ; - uniarc(w/2,P_t,(w/2,h-w/2),90,180,21) ; - uniend(P_t,((w+P_t)/2,P_t),180,270,30) ; - pickup Unipensqu ; - top lft z1 = (w/2,h) ; top rt z2 = (w,h) ; - top lft z3 = (0,h-w/2) ; bot lft z4 = (0,0) ; - lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; - bot lft z7 = ((w+P_t)/2,0) ; bot rt z8 = (w,0) ; - top z9 = (w/2,h) ; bot z10 = (w/2,P_t) ; - draw z1--z2 ; draw z3--z4 ; draw z5--z6 ; - draw z7--z8 ; draw z9--z10 ; - penlabels(range 1 thru 10) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"1E} -% Again, a simple combination of \textunibf{O} and \textunibf{E}, -% wouldn't work. -% \begin{macrocode} - beginchar(hex"1E",M_w#,l_h#,0) ; "Ligature OE" ; - uniarc(h/2,P_t,(h/2,h/2),90,270,10) ; - pickup Unipensqu ; - top lft z1 = (h/2,h) ; top rt z2 = (w,h) ; draw z1--z2 ; - lft z3 = (h/2,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ; - bot lft z5 = (h/2,0) ; bot rt z6 = (w,0) ; draw z5--z6 ; - top z7 = (h/2,h) ; bot z8 = (h/2,0) ; draw z7--z8 ; - penlabels(range 1 thru 8) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"1F} -% What a said above the minuscule \textunibf{\o} also goes for this -% letter, since this is nothing but an enlargement of that character. -% \begin{macrocode} - beginchar(hex"1F",l_h#,l_h#,0) ; "Liguture O/" ; - unicir(w/2,P_t,(w/2,h/2),10) ; - unilne(P_t,(0,0),(w,h),1,1,20) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% This is where it gets tricky. First we check to see if we are -% maiking an small caps font, and if not so, we should exit the loop -% right away, so that we don't screw up the minuscules we already have -% made above. If, however, we are making a small caps font, we should, -% after the second run, restore the dimensions to it's original state. -% \begin{macrocode} - exitif (not caps) ; - if temp = 2 : end_do_caps ; fi ; - endfor ; -fi ; - -% \end{macrocode} -%\iffalse -% -%\fi -%\iffalse -%<*ext> -%\fi -% \subsection{Extras --- \texttt{uniext.mf}} -% \file{uniext.mf} -% -% Please notice I included \textunibf{\char"0B}, \textunibf{\char"0C}, -% \textunibf{\char"0D}, and \textunibf{\char"0E}, which isn't -% standard Computer Modern Roman policy. See more below. -% -% \Newestchanges{v2.0}{98/08/01}{Some of the \textunibf{bauhaus} symbols -% that where avaliable in v1.0, has been taken out.} -% The first part of this file is some symbols relevant to the -% \textunibf{bauhaus} school. Please notice that some of the symbols -% present in version~1.0 has been taken out\footnote{If you have used -% version~1.0 of this font, and liked those characters and found them -% useful, you should e--mail me \texttt{} and let me -% know. If I get enough letters on this I will incorporate them again -% in future releases.}, since the were seldomly used, and it made the -% font contain exactly 128 characters. -% -% These characters should \emph{not} be slanted in a slanted shaped -% font, hence we redefine \texttt{currenttrans} to \texttt{identity}, -% just before the next character, and resets it after the last -% character. Also notice that \textuni{\bauhead} and -% \textuni{\bauforms} may take some time to generate. -% \begin{macrocode} -currenttransform := identity ; - -% \end{macrocode} -% -% \begin{fontcode}{\char"00} -% The next three characters are really not the complicated or useful -% by themselves, but if you combine them, maybe even with the -% \textsf{color} package of \LaTeX{}, you can really add some -% \textunibf{bauhaus} flavour to your document. -% -% The square, ofcourse is obvious. -% \begin{macrocode} -beginchar(hex"00",l_h#,l_h#,0) ; "The filled square symbol" ; - z1 = (0,0) ; z2 = (w,0) ; z3 = (w,h) ; z4 = (0,h) ; - fill z1--z2--z3--z4--cycle ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"01} -% Also four vectors are defined, put translated a bit, and another -% path macro --- it is amazing how much you can do with so little. -% \begin{macrocode} -beginchar(hex"01",l_h#,l_h#,0) ; "The filled circle symbol" ; - z1 = (w,h/2) ; z2 = (w/2,h) ; z3 = (0,h/2) ; z4 = (w/2,0) ; - fill z1..z2..z3..z4..cycle ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"02} -% Maybe every side of this trangle should be of the same length, mut -% then I had to make the triangle either lower, or wider then the -% square and circle. I couldn't decide, so I went for equal character -% dimensions --- so I believe in equality, sue me! -% \begin{macrocode} -beginchar(hex"02",l_h#,l_h#,0) ; "The filled triangle symbol" ; - z1 = (0,0) ; z2 = (w,0) ; z3 = (w/2,h) ; - fill z1--z2--z3--cycle ; - penlabels(1,2,3) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"03} -% This is a typical \textuni{bauhaus} symbol. I think it is very -% beautiful. -% -% First we draw the surrounding circle. -% \begin{macrocode} -beginchar(hex"03",2l_h#,2l_h#,0) ; "The bauhaus-head symbol" ; - unicir(w/2,2c_d/9,(w/2,w/2),40) ; -% \end{macrocode} -% Then we define some horizontal variables $a_{1\ldots6}$ and some -% vertical variables $b_{1\ldots8}$. -% \begin{macrocode} - a1 := .702h ; a2 := .561h ; a3 := .491h ; a4 := .351h ; - a5 := .272h ; a6 := .140h ; - b1 := .202w ; b2 := .307w ; b3 := .412w ; b4 := .447w ; - b5 := .465w ; b6 := .518w ; b7 := .588w ; b8 := .623w ; -% \end{macrocode} -% Then we define the vectors needed for the eye, and draw the eye. -% \begin{macrocode} - temp := c_d/6 ; pickup pensquare scaled temp ; - top lft z1 = (b1,a1) ; top rt z2 = (b2,a1) ; draw z1--z2 ; - bot rt z3 = (b4,a3) ; top rt z4 = (b4,a2) ; draw z3--z4 ; - z5 = (b2,a1) ; z6 = (b4,a1) ; z7 = (b4,a2) ; z8 = (b2,a2) ; - fill z5--z6--z7--z8--cycle ; -% \end{macrocode} -% Then we define the vectors needed for the nostril, and draw it. We -% still use the pen used for the edges of the eye. -% \begin{macrocode} - lft bot z9 = (b4,a4) ; lft bot z10 = (b7,a4) ; draw z9--z10 ; -% \end{macrocode} -% Next up is the chin. Again the same pen. -% \begin{macrocode} - lft bot z11 = (b2,a6) ; rt bot z12 = (b6,a6) ; draw z11--z12 ; -% \end{macrocode} -% Now it's time for the lips. They need to be thicker then the chin -% and edges of the eye, so we pickup a new pen. -% \begin{macrocode} - temp := 3c_d/5 ; pickup pensquare scaled temp ; - lft top z13 = (b5,a5) ; rt top z14 = (b6,a5) ; draw z13--z14 ; -% \end{macrocode} -% It's time for the lower part of the face. Here we don't need to find -% strange paths or the like, so we do it all with a \texttt{fill} -% command. -% \begin{macrocode} - z15 = (b6,a4) ; z16 = (b7,a4) ; z17 = (b7,a6) ; z18 = (b6,a6) ; - fill z15--z16--z17--z18--cycle ; -% \end{macrocode} -% Since it is not know where the forehead will end at the top, or -% where the nect will end in the bottom, we define some temporay -% paths, and make up the real ones from those. -% -% First we need to declare the paths. -% \begin{macrocode} - path noselft, nosert, necklft, neckrt ; - path headcircle , parttop, partbot; -% \end{macrocode} -% Then we build five temporary paths, one for each side of the -% forehead and neck, and one for the surronding circle. -% \begin{macrocode} - z19 = (b7,a4) ; z20 = (b7,h) ; noselft = z19--z20 ; - z21 = (b8,h) ; z22 = (b8,a4) ; nosert = z21--z22 ; - z23 = (b3,a6) ; z24 = (b3,0) ; necklft = z23--z24 ; - z25 = (b6,0) ; z26 = (b6,a6) ; neckrt = z25--z26 ; - z27 = (w/2,h) ; z28 = (w,h/2) ; z29 = (w/2,0) ; z30 = (0,h/2) ; - headcircle := z27..z28..z29..z30..cycle ; -% \end{macrocode} -% Now we can determine the intersection points between our temporary -% paths and the circle, and define the vectors we need. -% -% We also find the parts of the path \texttt{headcircle} that are -% relevant for our to areas we need to fill. At last we can fill the -% areas. -% \begin{macrocode} - z31 = noselft intersectiontimes headcircle ; - z32 = nosert intersectiontimes headcircle ; - parttop = subpath(y31,y32) of headcircle ; - z33 = neckrt intersectiontimes headcircle ; - z34 = necklft intersectiontimes headcircle ; - partbot = subpath(y34,y33) of headcircle ; - fill z19--parttop--z22--cycle ; - fill z23--partbot--z26--cycle ; - penlabels(range 1 thru 34) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"04} -% \Newestchanges{v2.0}{98/08/01}{Joseph Collins came up with the -% analytic solution --- thanks JC.} -% This is an interresting character. In version~1.0, I posed it as an -% mathemathical puzzle, and engourage people to work on it, and if -% they came up with a solution, pass it on to me. Well, Joseph Collins -% \index{Collins, Joseph} did just that, and for this I owe him many -% thanks. For more details on the problem and its solution, take a -% look in appendix~\ref{app:solu}. -% -% First we define some pen sizes we want to use, the variable -% \texttt{phi} and draw the circle around the character. -% \begin{macrocode} -beginchar(hex"04",2l_h#,2l_h#,0) ; "The bauhaus-forms symbol" ; - phi := 36.673 ; - thn_pen := 2c_d/9 ; med_pen := 3c_d/9 ; thk_pen := 4c_d/9 ; - unicir(w/2,thn_pen,(w/2,w/2),20) ; -% \end{macrocode} -% Then we define the three vertices of the triangle --- points $A,B,C$ -% in the notation of appendix~\ref{app:solu} --- and draw the curved -% ends there. -% \begin{macrocode} - z1 = (thn_pen+med_pen,h/2) ; - z2 = (.6433w-med_pen,.9790h-med_pen) ; - z3 = (.6433w-med_pen,.0210h+med_pen) ; - uniend(med_pen,z1,phi+90,270-phi,30) ; - uniend(med_pen,z2,0,phi+90,40) ; - uniend(med_pen,z3,270-phi,360,50) ; -% \end{macrocode} -% After this, we calculate the rest of the points needed for the top -% most edge of the triangle, line $|AC|$. Then we reflect it -% horizontaly to get the bottom most line $|AB|$. -% -% Then we draw the vertical line $|BC|$ via a pen. -% \begin{macrocode} - z4 = z1 + med_pen*(-sind(phi),cosd(phi)) ; - z5 = z2 + med_pen*(-sind(phi),cosd(phi)) ; - path sl_line ; sl_line = z1--z4--z5--z2--cycle ; fill sl_line ; - fill sl_line reflectedabout((0,h/2),(w,h/2)) ; - pickup pensquare scaled med_pen ; - lft bot z6 = z2 ; lft top z7 = z3 ; draw z6--z7 ; -% \end{macrocode} -% Now it's time for the four vertices $P,Q,R,S$ of the square. Again -% we draw the cured ends at those four vertices. This time we use a -% thicker pen. -% \begin{macrocode} - z8 = (.3687w+thk_pen,.2254h+thk_pen) ; - z9 = (.9179w-thk_pen,.2254h+thk_pen) ; - z10 = (.9179w-thk_pen,.7746h-thk_pen) ; - z11 = (.3687w+thk_pen,.7746h-thk_pen) ; - uniend(thk_pen,z8,180,270,60) ; - uniend(thk_pen,z9,270,360,70) ; - uniend(thk_pen,z10,0,90,80) ; - uniend(thk_pen,z11,90,180,90) ; -% \end{macrocode} -% Finally we define the remaning needed vectors, and draw the edges -% $|PQ|,|QR|,|RS|$ and $|SP|$ of the square. -% \begin{macrocode} - pickup pensquare scaled thk_pen ; - lft top z12 = z8 ; rt top z13 = z9 ; draw z12--z13 ; - lft bot z14 = z9 ; lft top z15 = z10 ; draw z14--z15 ; - bot rt z16 = z10 ; bot lft z17 = z11 ; draw z16--z17 ; - top rt z18 = z11 ; bot rt z19 = z8 ; draw z18--z19 ; - penlabels(range 1 thru 19) ; -endchar ; - -% \end{macrocode} -% After these five characters we reset \texttt{currenttransform} to -% include the slant specified by \texttt{slantratio}, so that the rest -% of the font will come out as it slanted if such a font is begin made. -% \begin{macrocode} -currenttransform := identity slanted slantratio ; - -% \end{macrocode} -% \end{fontcode} -% -% Next we provide 6 charecters not directly avaliable in the -% \texttt{OT1} encoding, but avaliable in the \texttt{T1} encoding of -% the Cork fonts. These are \textunibf{\NG}, \textunibf{\TH}, -% \textunibf{\dh}, \textunibf{\ng}, and \textunibf{\th}, plus the -% accent `ogoneck' (on an \textunibf{a} it looks like -% \textunibf{\k{a}}). -% -% We do need to check again, wether we are making a small caps shaped -% font, and if so, we should not generate the minuscles -% \textunibf{\dh}, \textunibf{\ng}, and \textunibf{\th}. -% -% However, if we are making a \emph{strict} shaped font, then we need -% to make the characters twice, and we employe the trick used in -% \texttt{unilig.mf} again. -% -% \begin{fontcode}{\char"05} -% I am not completly happy with this character, but it was the best I -% could think of. Please let me know if you have any kinds of -% suggestions. -% \begin{macrocode} -if not caps : - for temp = 1,2 : - if temp = 2 : code_offset := 3 ; fi ; - beginchar(hex"05",x_w#,l_h#,0) ; "The letter eth" ; - unicir(w/2,p_t,(w/2,w/2),10) ; - uniarc(w/2,p_t,(w/2,h-w/2),0,120,20) ; - pickup unipensqu ; - top rt z1 = (w,h-w/2) ; bot rt z2 = (w,w/2) ; draw z1--z2 ; - z3 = (w/2,h-w/2+p_t/sqrt(2)) ; z4 = (w/2+p_t/sqrt(2),h-w/2) ; - z5 = (w,h-p_t/sqrt(2)) ; z6 = (w-p_t/sqrt(2),h) ; - fill z3--z4--z5--z6--cycle ; - penlabels(range 1 thru 6) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"06} -% This is very much like \textunibf{n}, but has a longer rightmost -% down stroke. -% \begin{macrocode} - beginchar(hex"06",x_w#,x_h#,p_d#) ; "The letter eng" ; - uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; - pickup unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top rt z3 = (w,h-w/2) ; bot rt z4 = (w,-d) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"07} -% \begin{macrocode} - beginchar(hex"07",x_w#,l_h#,p_d#) ; "The letter thorn" ; - rad := (h+d)/4 ; - uniarc(rad,p_t,(w-rad,rad),-90,90,10) ; - pickup unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,-d) ; draw z1--z2 ; - top lft z3 = (p_t,2rad) ; top rt z4 = (w-rad,2rad) ; - bot lft z5 = (p_t,0) ; bot rt z6 = (w-rad,0) ; - draw z3--z4 ; draw z5--z6 ; - penlabels(range 1 thru 6) ; - endchar ; - exitif (not strict) ; - if temp = 2 : code_offset := 0 ; fi ; - endfor ; -fi ; - -% \end{macrocode} -% \end{fontcode} -% -% Like in \texttt{unilig.mf} we now employe a trick to generate to -% versions of the uppercase letters \textunibf{\NG} and -% \textunibf{\TH}, that is \textunibsc{\ng} and \textunibsc{\th}. -% -% Since there us only two majuscules here, we might as well take -% advantige of the extra slot, and make a small caps version of -% \textunibf{\varQ}, so this is defined before \textunibf{\NG}, to -% take the place of \textunibf{dh}. -% \begin{macrocode} -if not strict : - for temp = 1,2 : - if temp = 2 : do_caps(-3) ; fi ; - -% \end{macrocode} -% \begin{fontcode}{\char"08} -% This is the variant of \textunibf{Q} based an \textunibf{P}. This -% one is \emph{non}--default, you can acces this letter with -% \Lcs{varQ}\footnote{I am somewhat troubled with the majuscle `Q', -% because I don't know if the default one should be `\textunibf{Q}' or -% `\textunibf{\varQ}'. I will keep both characters in the font, but if -% enough wnats to chage the default, I will consider this -% ofcourse. Tell me \emph{your} opinon!}. -% \begin{macrocode} - beginchar(hex"08",A_w#,l_h#,0) ; "The variant letter Q"; - unicir(w/2,P_t,(w/2,h-w/2),10) - pickup Unipensqu ; - rt top z1 = (w,h-w/2) ; rt bot z2 = (w,0) ; draw z1--z2 ; - penlabels(1,2); - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"09} -% This is similar to \textunibf{N}, execpt the rightmost vertical -% stroke ends in an arc. -% \begin{macrocode} - beginchar(hex"09",A_w#,l_h#,0) ; "The letter Eng" ; - rad := 3C_d ; - uniarc(w/2,P_t,(w/2,h-w/2),0,180,10) ; - uniarc(rad,P_t,(w-rad,rad),-90,0,20) ; - pickup Unipensqu ; - top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0); draw z1--z2 ; - top rt z3 = (w,h-w/2) ; bot rt z4 = (w,rad) ; draw z3--z4 ; - penlabels(1,2,3,4) ; - endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"0A} -% \begin{macrocode} - beginchar(hex"0A",A_w#,l_h#,0) ; "The letter Thorn" ; - rad := h/4 ; - uniarc(rad,P_t,(w-rad,h/2),-90,90,10) ; - pickup Unipensqu ; - top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; - top lft z3 = (P_t,h/2+rad) ; top rt z4 = (w-rad,h/2+rad) ; - bot lft z5 = (P_t,h/2-rad) ; bot rt z6 = (w-rad,h/2-rad) ; - draw z3--z4 ; draw z5--z6 ; - penlabels(range 1 thru 6) ; - endchar ; - exitif (not caps) ; - if temp = 2 : end_do_caps ; fi ; - endfor ; -fi ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"0B} -% This is actually a reversed cidelia accent. -% \begin{macrocode} -beginchar(hex"0B",x_w#,x_h#,2c_d#) ; "The accent ogoneck" ; - uniarc(d/2,2P_T/3,(w/2-d/4,-d/2),-90,90,10) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"0C} -% I chose to include the braces in the font, since you might needed -% them, and the Computer Modern Roman braces, doesn't really go with -% the rest of the font, so if you had to use those, it wouldn't look -% very good. They are, however not in the standard position, since -% that is already taken up. -% \begin{macrocode} -beginchar(hex"0C",3c_d#,l_h#,p_d#) ; "The left brace ({)" ; - uniarc(2c_d,p_t,(3c_d,h-2c_d),90,180,10) ; - uniarc(2c_d,p_t,(3c_d,-d+2c_d),180,270,20) ; - pickup unipensqu ; - top lft z1 = (c_d,h-2c_d) ; bot lft z2 = (c_d,-d+2c_d) ; draw z1--z2 ; - lft z3 = (0,(h-d)/2) ; rt z4 = (c_d,(h-d)/2) ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"0D} -% Discussion above. -% \begin{macrocode} -beginchar(hex"0D",3c_d#,l_h#,p_d#) ; "The right brace (})" ; - uniarc(2c_d,p_t,(0,h-2c_d),0,90,10) ; - uniarc(2c_d,p_t,(0,-d+2c_d),270,360,20) ; - pickup unipensqu ; - top rt z1 = (w-c_d,h-2c_d) ; bot rt z2 = (w-c_d,-d+2c_d) ; - draw z1--z2 ; - rt z3 = (w,(h-d)/2) ; lft z4 = (w-c_d,(h-d)/2) ; draw z3--z4 ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"0E} -% The paragraph sign is usually in the \texttt{cmsy} family, avaliable -% in \texttt{OT1} encoding only, but for the same reasons as the -% braces above, I decided to include this charater in the font. -% \begin{macrocode} -beginchar(hex"0E",(l_h#+p_d#+2p_t#)/3,l_h#,p_d#) ; - "The Paragraph sign" ; - uniarc(w/2,p_t,(w/2,h-w/2),30,270,10) ; - uniarc(w/2,p_t,(w/2,w/2-d),-150,90,20) ; - unicir(w/2,p_t,(w/2,(h-d)/2),30) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"0F} -% I guess there are no real surprises here --- it's just a bar! -% \begin{macrocode} -beginchar(hex"0F",p_t#,l_h#,p_d#) ; "The symbol bar (|)" ; - pickup unipensqu ; - lft top z1 = (0,h) ; lft bot z2 = (0,-d) ; draw z1--z2 ; - penlabels(1,2); -endchar ; - -% \end{macrocode} -% \end{fontcode} -% -% The next two characters is included, since I think it would be a -% good idea to use \universal{} characters for German -% quotation, instead of some Computer Modern Roman character, which -% would be totally out of place. -% -% If you use the \textsf{uni} package you can say -% \begin{verbatim} -% {\uni -% \guillemoleft Hello World\guillemoright\newline -% \guilsinglleft Hello World\guilsinglright} -% \end{verbatim} -% and get -% \begin{quote} -% {\uni -% \guillemoleft Hello World\guillemoright\newline -% \guilsinglleft Hello World\guilsinglright} -% \end{quote} -% -% \begin{fontcode}{\char"22} -% This is quote a simple character. Do notice the nice use of -% \texttt{uniend}, to produce the soft turn. -% \begin{macrocode} -beginchar(hex"22",2x_w#/3,x_h#,0) ; "The single left guillomot" ; - z1 = (p_t,h/2) ; z2 = (w,h) ; phi := angle(z2-z1) ; - uniend(p_t,(z1),90+phi,270-phi,10) ; - z3 = (w-p_t/sind(phi),h) ; z4 = z1 + p_t*(-sind(phi),cosd(phi)) ; - path rombe ; rombe := z1--z2--z3--z4--cycle ; fill rombe ; - fill rombe reflectedabout ((0,h/2),(w,h/2)) ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -% \begin{fontcode}{\char"5C} -% \begin{macrocode} -beginchar(hex"5C",2x_w#/3,x_h#,0) ; "The single right guillomot"; - z1 = (w-p_t,h/2) ; z2 = (0,h) ; phi := 180-angle(z2-z1) ; - uniend(p_t,(z1),phi-90,90-phi,10) ; - z3 = (p_t/sind(phi),h) ; z4 = z1 + p_t*(sind(phi),cosd(phi)) ; - path rombe ; rombe := z1--z2--z3--z4--cycle ; fill rombe ; - fill rombe reflectedabout ((0,h/2),(w,h/2)) ; - penlabels(1,2,3,4) ; -endchar ; - -% \end{macrocode} -% \end{fontcode} -%\iffalse -% -%\fi -%\iffalse -%<*font> -%\fi -% \section{Font driver files}\file{ful*.mf} -% -% This section describes the driver files -% \texttt{uni}\meta{series}\meta{shape}\meta{size}\texttt{.mf}, where -% \meta{series} is one of \texttt{r} (medium), or \texttt{bf} -% (boldface), \meta{shape} one of upright (no letter), \texttt{sl} -% (slanted), or \texttt{sc} (small caps), and \meta{size} is the -% designsize in points, one of 8, 9, 10, 12, or 17. -% -% To make the source file shorter, I employed a little trick, -% exploiting some of the features of the \textsf{docstrip} -% program. That, on the other hand means that the line numbers you see -% here, doesn't conform to the actual ones in the driver files. -% -% First we make sure the base file \texttt{unibase.mf} is loaded, but -% not more then once in a run. This is needed since this file contains -% all the macros and definitions for the font. -% -% \begin{macrocode} -if unknown unibase : input unibase; fi; - -% \end{macrocode} -% Next we define some \textsl{boolean} variables, determining the -% shape of the font we are to create. This are straight forward, and -% should be self explanetory. Any number of variables may be set to -% \texttt{true}, execpt that it makes no sense to define both -% \texttt{bold} and \texttt{medium} to \texttt{true}, so this will be -% considered an error, and a medium font will be made. (See alse the -% explanation of the \texttt{start\_font} macro in the -% \texttt{unibase.mf} section.) -% -% \begin{verbatim} -%<+medium>medium := true ; -%<+bold>bold := true ; -%<+slanted>slant := true ; -%<+caps>caps := true ; -%<+strict>strict := true ; -%<+eight>start_font(8pt#) ; -%<+nine>start_font(9pt#) ; -%<+ten>start_font(10pt#) ; -%<+twelve>start_font(12pt#) ; -%<+seventeen>start_font(17pt#) ; -%\end{verbatim} -% -% The next part of the files just inputs the nessecary source files, -% and there is nothing special here. Finally we end the font with the -% macro \texttt{end\_font}. -% \begin{macrocode} -input uniupp ; input unilow ; input unidig ; input unispe ; -input unilig ; input unipun ; input uniacc ; input uniext ; - -end_font; - -% \end{macrocode} -%\iffalse -% -%\fi -%\iffalse -%<*docpackage> -%\fi -% \section{Commands for the Documentation --- \texttt{unidoc.sty}} -% \file{unidoc.sty}\label{app:unidoc} -% -% \textsc{Warning:} Most of the macros defined in this file uses -% \TeX{} primitivs like \Lcs{def} and \Lcs{let}, contorary to the -% recommendations in \clsguide{}. This means you shouldn't try to use -% this package in conjunction with normal \LaTeXe{} documents, since -% it will not nessecarily by portable, and may generate unwanted -% resaults. This package is \emph{only} intended for the documentation -% of the \universal{} package, \emph{and nothing else!} -% -% \subsection{Initializing} -% -% First we need to identify the package, its version and release -% date, etc. -% \begin{macrocode} -\def\fileversion{v2.0} -\def\filedate{98/08/01} -\ProvidesPackage{unidoc}[\filedate\space\fileversion\space universal - documenation package.] -% \end{macrocode} -% Then we load some pacakges needed. \textsf{doc} is ofcourse needed -% to do all the actual typesetting of macros etc., while \textsf{uni} -% is needed for the fonts\footnote{This means ofcourse, that you -% needed to have all the \MF{} sources ready, or in other words, you -% should have run \texttt{uni.ins} through \LaTeX{}.}, and finally -% \textsf{mflogo} is needed for the \MF{} logo. -% \begin{macrocode} -\newif\ifeepic\eepicfalse -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{uni}} -\ProcessOptions\relax -\RequirePackage{doc} -\RequirePackage{mflogo} -\RequirePackage{uni} -\IfFileExists{eepic.sty}{% - \RequirePackage{eepic}\eepictrue}{% - \PackageWarning{unidoc}{`eepic.sty' not found, so there will be no - pictures - you are warned.}\eepicfalse} - -% \end{macrocode} -% -% \subsection{Macros for the Index} -% -% \begin{macro}{\file} -% First we save the argument --- the current output filename --- in a -% command, set the codeline counter to zero (since every starts at -% line 1, obviously). Then we check to see if we are outputting files -% at all. If we are, we write an index entry. -% \begin{macrocode} -\def\file#1{ - \def\c@r{#1} - \c@CodelineNo0 - \if@filesw - \immediate\write\@indexfile - {\string\indexentry{#1=\string\texttt{#1}% - \string\space(File)}% - {\thepage}}\fi} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\main} -% This command is used be \texttt{doc.sty}, to choose the font for the -% codelines numbers in the index. It is set to \texttt{typewriter}. -% \begin{macrocode} -\def\main#1{\texttt{{\small\c@r}:\ #1}} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\src} -% To make the index reflect, that more then one file is present, and -% therefore more then one entry could have the same codeline number, -% we put the file name before the codeline number in the index. The -% name is gotten from the \Lcs{file} command. This ofcourse takes up -% quite some space in the index, so later on we speciffy the index -% to only have 2 columns. -% \begin{macrocode} -\def\src#1#2{\texttt{{\small#1}:\ #2}} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\fontcodeindex} -% The next two commands are responsible for writting the index entries -% of the above environments. They are similar to the \texttt{doc} -% package command \Lcs{codeline@wrindex} but uses the filenames -% defined by \Lcs{file} (via the \Lcs{src} command), and the -% \Lcs{fontcodeindex} uses a font appropiat for the font descriped -% (i.e., \Lcs{FontCodeFont}) -% \begin{macrocode} -\def\fontcodeindex#1{% - \@bsphack\begingroup\let\_=\protect\_% - \special@index{% - \expandafter\string#1\actualchar% - {\string\FontCodeFont\space#1}% - \encapchar src{\c@r}}\endgroup\@esphack} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\fontmacroindex} -% \begin{macrocode} -\def\fontmacroindex#1{% - \@bsphack\begingroup\let\_=\protect\_% - \special@index{% - \expandafter\string#1\actualchar% - {\string\MacroFont\space#1}% - \encapchar src{\c@r}}\endgroup\@esphack} - -% \end{macrocode} -% \end{macro} -% -% \subsection{Descriptive Environments} -% -% The next counters are to do some more advanced stuff on the on line -% numbers in the index. Instead of just writting the beginning line of -% the fontcode, we writte the complete interval of the fontcode. See -% also the command \Lcs{f@ntcodeindex} and \Lcs{f@ntmacroindex}. -% \begin{macrocode} -\newcount\startfontcodeline -\newcount\startfontmacroline - -% \end{macrocode} -% \begin{macro}{\fontcode} -% \begin{macro}{\endfontcode} -% \begin{macro}{\FontCodeFont} -% Next comes two environments for descriping the font programs, and -% font macros. They are similar to the environment \texttt{macro} in -% the \texttt{doc} package. However, some alterations is made, so that -% the right font is used in the index. (See also the -% \Lcs{fontcodeindex} macro below.) Also, notice the defintion of -% \Lcs{saved@macroname} and \Lcs{PrintFontName}. This is done so that -% control sequnces in the argument to \texttt{fontcode} environment, -% which should expand to a single letter, comes out expanded, rather -% then the actual control sequences, which isn't wanted here. -% \begin{macrocode} -\def\fontcode#1{ - \def\saved@fontname{#1} - \let\temp@MF\MacroFont\let\MacroFont\FontCodeFont - \let\temp@PMN\PrintMacroName\let\PrintMacroName\PrintFontName - \let\temp@SMI\SpecialMainIndex - \let\SpecialMainIndex\fontcodeindex - \macro{#1}} -\def\endfontcode{ - \endmacro - \let\MacroFont\temp@MF - \let\SpecialMainIndex\temp@SMI - \let\PrintMacroName\temp@PMN} -\let\FontCodeFont\unibf -\def\PrintFontName#1{\strut\MacroFont\saved@fontname\ } - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{\fontmacro} -% \begin{macro}{\endfontmacro} -% This is similar to \texttt{fontcode} environment, but is used to -% descripe the macros of \texttt{unibase}. The reason why we employ to -% environments, and not just one, is that the margin notes should come -% out in \texttt{typewriter} font in this environment, while it -% should be in \universal{} font above. -% \begin{macrocode} -\def\fontmacro#1{ - \let\temp@under\_ - \let\_\MacroUnderscore - \let\temp@SMI\SpecialMainIndex - \let\SpecialMainIndex\fontmacroindex - \macro{#1}} -\def\endfontmacro{% - \endmacro\let\SpecialMainIndex\temp@SMI\let\_\temp@under} -\def\MacroUnderscore{{\char"5F}} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macrocode} -\let\beginillu\ifeepic -\let\illuother\else -\let\endillu\fi - -% \end{macrocode} -% -% \subsection{Useful Commands} -% -% \begin{macro}{\Newestchanges} -% This macro is intended to be used like the \Lcs{changes} macro of -% the \textsf{doc} package. However, it should only be used on the last -% most change. But rather then just making an entry in the the -% glossary, it will also print a line saying when this macro was last -% changed. This is something like what is done in -% \texttt{ltxguide.cls}, but a bit different, since in that class not -% enough is being done glossary--wise, and too much is done -% margin--wise. When making an update to a macro, the new -% \Lcs{changes} should be made with \Lcs{Newestchanges}, and the old -% \Lcs{Newestchanges} should be renamed to \Lcs{changes}. Notice that -% \texttt{doc.sty} says \Lcs{def}\Lcs{saved@macroname}\texttt{\{\}}, -% so we can't say -% \begin{verbatim} -% \ifx\saved@macroname\relax -% \end{verbatim} -% since \Lcs{relax} \emph{isn't} the same as an empty definition, but -% \Lcs{@empty} is. In the case that \Lcs{saved@macroname} is defined -% to something, then we put a bullet ($\bullet$) in the margin, and -% attach a footnote to it, where the footnote text contains the proper -% information. Ofcourse this could led to a lot of footnotes, but the -% alternative is to redefine the \texttt{macro} environment, and I -% really didn't have the stomach for that, Sorry. Notice the use of -% \Lcs{@gobble}, that removes the leading `v' in the version number. -% \begin{macrocode} -\def\Newestchanges#1#2#3{ - \ifx\saved@macroname\@empty% - \marginpar{\small\raggedright{\sl Change on} #2, {\sl Version} - \expandafter\@gobble#1} - \else% - \llap{$\bullet$\footnote{{\sl Change of } - {\MacroFont\expandafter\string\saved@macroname} - {\sl on} #2, {\sl Version }\expandafter\@gobble#1}} - \fi - \changes{#1}{#2}{#3}} - -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\Lcs} -% Finally we define a short hand for \Lcs{...}, to make the -% documentaion easier. -% \begin{macrocode} -\def\Lcs#1{\texttt{\char"5C{}#1}} - -% \end{macrocode} -% \end{macro} -% -% \subsubsection{The Font Charts} -% -% \begin{macro}{\FontChart} -% This macro is for typesetting a table of the font. It is taken from -% \texttt{testfont.tex}. -% -% First we define some counters to use in the table. \Lcs{n} is the -% counts the number of letters and symbols typeset so far, while -% \Lcs{m} is counting the number of typeset characters in current -% line. \Lcs{p} is a penalty counter. The dimension \Lcs{dim} is used -% for setting the characters appropiate. -% -% We also define a new \Lcs{if}, used to see if we should go on. -% -% \Lcs{oct} and \Lcs{hex} are used for typesetting numbers in -% octadecimal and hexadecimal notation respectivily. -% \begin{macrocode} -\newcount\n\newcount\m\newcount\p\newdimen\dim -\newif\ifskipping -\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} -\def\hex#1{\hbox{\rm\H{}\tt#1}} - -% \end{macrocode} -% \begin{macro}{\setdigs} -% This is used to set the counters \Lcs{n} and \Lcs{m} every time a -% new (double) line is started. -% \begin{macrocode} -\def\setdigs#1"#2{\gdef\h{#2} - \m=\n \divide\m by 64 \xdef\0{\the\m}% - \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\testrow} -% This is used to see how we should typeset the current row. -% \begin{macrocode} -\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}% - \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F% - \global\p=\lastpenalty}} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\oddline} -% This is used to typeset topmost line of a double line. It basically -% just putting a line and some saces into the chart. -% \begin{macrocode} -\def\oddline{ - \cr\noalign{\nointerlineskip}\multispan{19}\hrulefill& - \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr - \noalign{\nointerlineskip}} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\evenline} -% This is used to typeset bottommost line of a double line. It -% basically does the same as \Lcs{oddline}, but also checks to see if -% we need to end the chart or go on. -% \begin{macrocode} -\def\evenline{ - \loop\skippingfalse - \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m - \expandafter\setdigs\meaning\next \testrow - \ifnum\p=1 \skippingtrue \fi\fi - \ifskipping \global\advance\n 16\repeat - \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi - \next} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\morechart} -% This macro is called every time we need to typeset a new double line -% of the chart. -% \begin{macrocode} -\def\morechart{ - \cr\noalign{\hrule\penalty5000} - \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m} - \chartline \evenline} - -% \end{macrocode} -% \end{macro} -% \begin{macro}{\chartline} -% \begin{macro}{\chartstrut} -% \Lcs{chartline} is called every time we need to typeset a line of -% the chart. Notice it uses the macro \Lcs{:} to do the -% job. \Lcs{chartstrut} is used to get approiate spacing. -% \begin{macrocode} -\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&} -\def\chartstrut{\lower4.5pt\vbox to14pt{}} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macro}{\:} -% \begin{macro}{\reposition} -% \begin{macro}{\centerlargechars} -% These macros are used for typesetting the actual characters in the -% chart. \Lcs{:} gives the appropiate space for a character and -% encriments the \Lcs{n} counter, while \Lcs{reposition} places the -% character nicely in the the chart. \Lcs{centerlargechars} does the -% same for {\large large} characters. -% \begin{macrocode} -\def\:{\setbox0=\hbox{\char\n}% - \ifdim\ht0>7.5pt\reposition - \else\ifdim\dp0>2.5pt\reposition\fi\fi - \box0\global\advance\n 1 } -\def\reposition{ - \setbox0=\vbox{\kern2pt\box0}\dim=\dp0 - \advance\dim 2pt \dp0=\dim} -\def\centerlargechars{ - \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{\chart} -% \begin{macro}{\endchart} -% These two macros is what starts and ends the chart. \Lcs{chart} sets -% up the appropiate stuff, and writes the top most line in the -% chart. \Lcs{endchart} is called by \Lcs{evenline} if no more -% characters should be typeset, and then it finished everything off, -% plus writes the last line of the chart. -% \begin{macrocode} -\def\chart{$$\global\n=0 - \halign to\hsize\bgroup - \chartstrut##\tabskip0pt plus10pt&&\hfil##\hfil&\vrule##\cr - \lower6.5pt\null&&& - \oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} -\def\endchart{ - \cr\noalign{\hrule} - \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& - &\hex C&&\hex D&&\hex E&&\hex F&\cr - \egroup$$\par} - -% \end{macrocode} -% \end{macro} -% \end{macro} -% Finally we get to the \emph{real} macro. This macro takes one -% argument, the name of the \meta{font driver file}. We put the chart -% inside a \texttt{figure} environment, so that we may refer to it -% latter. This is done using the label \texttt{chart:}\meta{font driver -% file}. The chart is encapsulated in a group, so that the definition -% of \Lcs{chart@font} doesn't get in the way elsewhere in the document. -% \begin{macrocode} -\def\FontChart#1{ -%% \marginpar{\small\raggedright Letters and symbols in \texttt{#1} -%% font.} - \begin{figure} - \begingroup - \font\chart@font=#1 - \chart@font - \chart - \endgroup -\end{figure}} - -% \end{macrocode} -% \end{macro} -% -% \subsection{Parameters and Miscillaneous Commands} -% -% This is used --- as explaind in \texttt{doc.dvi} --- to give a -% different prologue to the index, more suitable to our needs. -% \begin{macrocode} -\IndexPrologue{% - \section{Index}\markboth{Index}{Index} - The Numbers written in \textit{italic} refer to the pages, where - a macros usage is descriped, while those in \texttt{typewrite} refer - to line numbers in the files, mentioned before, where the definition - is, while \textsl{slanted} shows the places it is used. Normal letters - refer to pages, wether it be descriptions or usage.} -\GlossaryPrologue{% - \section{Change History}\markboth{Change History}{Change History} - Below is listed the changes made to the \universal{} font and the - \LaTeX{} support package \textsf{uni}, from version~1.0 to 2.0.} - -% \end{macrocode} -% Also we set the number of columns in the index to 2, since some -% space is needed for the entries -% \begin{macrocode} -\setcounter{IndexColumns}{2} - -% \end{macrocode} -% We don't want the index flutted with silly command sequences, so we -% leave some of them out. -% \begin{macrocode} -\DoNotIndex{\@bsphack,\@empty,\@esphack,\@gobble,\@ifnextchar,% - \@ifundefined,\@indexfile,\@onlypreamble,\iffalse,\_,\,\accent,% - \aftergroup,\actualchar,\advance,\begin,\begingroup,\bgroup,% - \box,\bullet,\changes,\char,\chardef,\CheckModules,\CodeLineIndex,% - \cr,\crcr,\csname,\DeclareFontFamily,\DeclareFontShape,\DeclareMacro,% - \dim,\divide,\dp,\DeclareOption,\def,\DoNotIndex,\edef,\egroup,\else,% - \end,\endcsname,\EnableCrossrefs,\encapchar,\endgroup,\endmacro,% - \expandafter,\fbox,\fi,\font,\footnote,\fontemcoding,\fontfamuliy,% - \fontseries,\fontshape,\gdef,\global,\H,\h,\halign,\hbox,\hfil,% - \hidewidth,\hrule,\hrulefill,\hsize,\ht,\hyphenchar,\if@filesw,% - \ifdim,\IfFileExists,\ifnum,\ifskipping,\ifx,\immediate,\indexentry,% - \it,\itdefault,\kern,\lastpenalty,\LaTeX,\LaTeXe,\leavevmode,\let,% - \llap,\loop,\lower,\m,\macro,\MacroFont,\marginpar,\marginparwidth,% - \markboth,\mdseries,\meaning,\multiply,\multispan,\n,\newcommand,% - \newcount,\newdimen,\newif,\newline,\next,\noalign,\noexpand,% - \nointerlineskip,\not@math@alphabet,\null,\ooalign,\p,\par,\penalty,% - \ProcessOptions,\protect,\ProvidesFile,\ProvidesPackage,% - \RecordChanges,\raggedright,\raise,\relax,\renewcommand,\repeat,% - \RequirePackage,\rm,\saved@macroname,\scshape,\section,\selectfont,% - \setcounter,\setbox,\show,\skippingfalse,\skippingture,\sl,\slshape,% - \small,\smash,\space,\special@index,\SpecialMainIndex,\stop,\string,% - \strut,\tabskip,\TeX,\TeXbook,\textit,\textsf,\textsl,\texttt,\the,% - \thepage,\tt,\typeout,\unhbox,\universal,\upshape,\usefont,\vbox,% - \vcenter,\vrule,\write,\xdef,\z@} - -% \end{macrocode} -% And then we define the behaviour of the \textsf{doc} package, by -% setting a number of flags (as explained in the documentation of the -% \textsf{doc} package). We also set the margin paragraph widths to be -% a bit smaller then usual. -% \begin{macrocode} -\EnableCrossrefs -\CodelineIndex -\RecordChanges -\CheckModules -\marginparwidth=54pt -\newcommand{\NFSS}{\textsf{NFSS}} -\newcommand{\ftnguide}{\textit{\LaTeXe{} Font Selection}} -\newcommand{\clsguide}{ - \textit{\LaTeXe{} for Class and Packages Writers}} -\newcommand{\TeXbook}{\TeX\textsf{book}} -\newcommand{\MFbook}{\MF\textsf{book}} -\newcommand{\universal}{\textunibf{universal}} - -% \end{macrocode} -%\iffalse -% -%\fi -% \Finale -% \appendix -% -% \section{Solution to the \Lcs{bauhausforms} problem} -% \label{app:solu} -% -% \subsection{The Problem} -% This I owe to Joseph Collins \texttt{}. -% -% During the preperation of version~1.0 of this font, I was loosing -% sleep over what I chose to call `The \Lcs{bauhausforms} -% problem', after the problems the symbol \textuni{\bauforms} gave -% me. -% -% As can be seen from the symbol, the idea is to make a figure out of -% a circle, a square, and a triangle. From these three figures you can -% ofcourse make infinitly many figures, even though the sizes are -% limited. The particular combination of the three figures I was -% looking, first seemed simple\footnote{And after having seen Mr.\ -% Collins solution, it did again.}, but turned out to be -% difficult. What I wanted to do was (see also -% figure~\ref{fig:bauforms}): -% \begin{quote} -% Take a circle of some radius (e.g., 1). Inside this circle draw a -% isosceles triangle $\bigtriangleup ABC$, with all vertices on the -% circle, The singular vertice $A$ placed on the horizontal line -% traveling left from the center of the circle. -% -% Now draw a square $\Box PQRS$ inside of the circle, having two -% vertices on the circle, and two on the triangle. -% -% The wanted triangle and square are such that, the opposing side of -% the singular vertice $|BC|$ should divede the square into to equal -% oblongs, i.e., intersect $|PQ|$ midway between $P$ and $Q$. -% \end{quote} -% -% \begin{figure}[htbp] -% \centering -% \beginillu -% \setlength{\unitlength}{.05\textwidth} -% \begin{picture}(10,10) -% \thinlines -% \put(-1,5){\line(1,0){12}} -% \put(5,-1){\line(0,1){12}} -% \thicklines -% \put(5,5){\circle{10}} -% \put(0,5){\line(100,74){6.521}} -% \put(0,5){\line(100,-74){6.521}} -% \put(6.4330,0.2097){\line(0,1){9.5805}} -% \put(3.6873,7.7457){\line(1,0){5.4914}} -% \put(3.6873,2.2543){\line(1,0){5.4914}} -% \put(3.6873,2.2543){\line(0,1){5.4914}} -% \put(9.1787,2.2543){\line(0,1){5.4914}} -% \put(0,5){\mbox{$A$}} -% \put(6.4330,0.2097){\mbox{$B$}} -% \put(6.4330,5){\mbox{$B^\prime$}} -% \put(6.4330,9.7903){\mbox{$C$}} -% \put(3.6873,2.2543){\mbox{$P$}} -% \put(3.6873,5){\mbox{$P^\prime$}} -% \put(9.1787,2.2543){\mbox{$Q$}} -% \put(9.1787,5){\mbox{$Q^\prime$}} -% \put(9.1787,7.7457){\mbox{$R$}} -% \put(3.6873,7.7457){\mbox{$S$}} -% \put(5,5){\mbox{$O$}} -% \put(0,5){\arc{1}{0}{0.6401}} -% \put(0,4.5){\mbox{$\varphi$}} -% \end{picture} -% \illuother -% \begin{tabular}{% -% @{\vline\extracolsep{1em}\space}% -% p{.8\textwidth}% -% @{\space\vline}} -% \hline -% Since you are processing this document without the -% \textsf{eepic} package, you will not see the illustration -% otherwise here. To compensate, I will give you a short -% description on how to draw the figure yourself. -% -% Take out some paper, a pencil, compasses, and a ruler. Now -% draw a circle of some radius $r$, with its center in origo of -% a Cartisean coordinate system. In the next subsection, you -% will find the coordinates for points $A,B,C,O,P,Q,R,$ and $S$ -% expressed in terms of $x,y,$ and $h$. You will also find the -% correct values for $x,y,h$ in that section. Multiply those -% values with $r$, and plot the points above in the coordinate -% system. Draw the triangle $\bigtriangleup ABC$, and the square -% $\Box PQRS$, and --- voila, you have the illustration.\\ -% \hline -% \end{tabular} -% \endillu -% \caption{The \Lcs{bauforms} problem.}\label{fig:bauforms} -% \end{figure} -% -% This shouldn't be to difficult, should it. Well I didn't think so, -% but after many late evenings with pen, paper, ruler, compasses, and -% heavy use of trigonometric relations, I found out that the half -% $\varphi$ of the singular vertice should obey: -% \begin{eqnarray} -% 0 &=& \sin \left( \cos^{-1} \left( \frac{\cos2\varphi}{\sqrt{2}} -% \right) \right) - \frac{\cos2\varphi}{\sqrt{2}}\nonumber\\ -% & & - 2\sqrt{2} -% \frac{\cos\varphi^2\sin\varphi}{\cos\varphi+\sin\varphi} -% \nonumber -% \end{eqnarray} -% Now I dare you to find the exact solution to that. -% -% Using numerical methodes (Newton's method), was ofcourse no -% problem, and gave satesfactory resualt. If the expression on the -% right above is labelled $f$, $f^\prime$ is: -% \begin{eqnarray} -% f^\prime &=& \frac{\sin4\varphi}{2\sqrt{\frac{3-\cos4\varphi}{4}}} -% + \sqrt{2}\sin2\varphi\nonumber\\ -% & & - \frac{2\sqrt{2}\cos\varphi}{\cos\varphi+\sin\varphi^2} -% \left( \left( \cos\varphi+\sin\varphi \right) -% \left( \cos^2\varphi-2\sin^22\varphi \right)\right. \nonumber\\ -% & & - \quad \left.\left( \cos\varphi-\sin\varphi \right) -% \cos^2\varphi\sin\varphi \right) \nonumber -% \end{eqnarray} -% Using these expressions for $f$ and $f^\prime$ in a \textsf{Fortran} -% program, I reached resaults close to what Mr.\ Collins found. -% -% \subsection{Joseph Collins' Solution} -% -% In Mr.\ Collins notation, the points on figure~\ref{fig:bauforms} -% has the following coordinates: -% \begin{eqnarray*} -% A = (0,-1) & B^\prime = (x,0) & C = (x,y)\\ -% O = (0,0) & P^\prime = (x-h,0) & Q^\prime = (x+h,0)\\ -% R = (x+h,h) & S = (x-h,h) & \\ -% \end{eqnarray*} -% Below is what Mr.\ Collins wrote me --- thank you very much. -% -% On the unit circle -% \begin{equation}\label{eq:uc} -% x^2 + y^2 = 1 -% \end{equation} -% we have the vertices of a triangle at $(-1,0)$, $(x,y)$, and -% $(x,-y)$. A square has four vertices $(x \pm h, \pm h)$, where the -% two points $(x-h, \pm h)$ lie on the triangle (constraint A) and the -% two points $(x+h, \pm h)$ lie on the circle (constraint B). Thus, -% the vertical side of the triangle bisects the square. From -% constraint A, upon consideration of similar triangles, we have -% $$\frac{y}{1+x} = \frac{h}{1+x-h}, \quad \mbox{so that}\quad -% h = \frac{(1+x) y }{1+x+y}.$$ -% By (\ref{eq:uc}), this is -% \begin{equation} \label{eq:b1} -% h = \frac{(1+x)\sqrt{1-x^2}}{1+x+\sqrt{1-x^2}} . -% \end{equation} -% From constraint B, we get -% \begin{equation} \label{eq:b2} -% (x+h)^2 + h^2 = 1 . -% \end{equation} -% Any simultaneous solution of (\ref{eq:b1}) and (\ref{eq:b2}) is also a -% solution of -% \begin{equation}\label{eq:eqn} -% 8x^3 - 4x^2 - 3x + 1 = 0, -% \end{equation} -% the relevant solution being -% \begin{equation} \label{eq:sol} -% x = \frac16 + \sqrt{\frac{11}{18}} \sin -% \left[ \frac{\pi}{6} -% - \frac13 \arctan\left(\frac{3\sqrt{237}}{23}\right) \right]. -% \end{equation} -% Equation (\ref{eq:eqn}) and solution (\ref{eq:sol}) courtesy of -% Mathematica. We get $y$ and $h$ from (\ref{eq:uc}) and -% (\ref{eq:b1}), respectively. The angle at $(-1,0)$ is $\varphi = 2 -% \arctan\bigl(y/(1+x)\bigr)$. -% -% Approximate values are -% \begin{eqnarray*} -% x &\simeq& 0.2865914\\ -% y &\simeq& 0.9580529\\ -% h &\simeq& 0.5491394 \\ -% \varphi &\simeq& 1.280129 \ ( \simeq 73.346^o) -% \end{eqnarray*} -% -% \section{Copyrights --- GNU General Public Lisence} -% \label{app:ggpl} -% -% This \MF{} implementation of the ``universal'' font and the \LaTeX{} -% support package ``uni'' copyright \copyright{} 1998 Christian Holm. -% -% This program is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% This program is distributed in the hope that it will be useful, but -% \textsc{without any warranty}; without even the implied warranty -% of \textsc{merchantability} or \textsc{fitness for a particular -% purpose}. See the GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to -% \begin{quote} -% The Free Software Foundation, Inc.\\ -% 675 Mass Ave\\ -% Cambridge\\ -% MA 02139\\ -% USA -% \end{quote} -% -% See the file \texttt{copyright} in the distribution for the complete -% GNU General Public License. -% -% You can reach the me (the copyright holder) at -% \begin{quote} -% Christian Holm\\ -% Sankt Hansgade 23, 1.\ th.\\ -% DK--2200 Copenhagen N\\ -% Denmark\\ -% E--mail: \texttt{cholm@nbi.dk} or \texttt{cholm@fys.ku.dk} -% \end{quote} -% -% \section{Wishlist} -% -% Below is a list of things I would like to do with the font and -% package. If anyone has any suggestions, ready--made code, or new -% ideas, please let me know. -% -% If you would like to take on one or more of the tasks presented -% below, please do so, but send me a note so that I may coordinate -% with my own efforts, and perhaps have a constructive dicourse. -% -% I should however instruct you to read the \emph{complete} -% documentation of the package and font, since this may give some -% reasons why I have chosen a particular approach. -% -% \begin{itemize} -% \item Make the font an 8--bit encoded (256 characters) font, -% conforming somewhat to the \texttt{T1} encoding of the Cork fonts. -% \item Making a package (perhaps \textsf{mfdoc}), to make -% documentation of \MF{} sources, just like \textsf{doc} is fore -% \LaTeX{} sources. This is ofcourse a independent project, and I -% will proberly not work on it. -% \end{itemize} -% \clearpage -% \section{Font Charts} -% \label{app:charts} -% -% Below are some charts of the \universal{} font in different series -% and shapes (medium upright, bold upright, medium slanted, medium -% small caps), all in size \texttt{8pt}. -% -% \FontChart{fulmr8.mf} -% \FontChart{fulmo8.mf} -% \FontChart{fulmc8.mf} -% \FontChart{fulmst8.mf} -% \FontChart{fulbr8.mf} -% \clearpage diff --git a/Master/texmf-dist/source/fonts/universa/uni.ins b/Master/texmf-dist/source/fonts/universa/uni.ins deleted file mode 100644 index 00771ace451..00000000000 --- a/Master/texmf-dist/source/fonts/universa/uni.ins +++ /dev/null @@ -1,180 +0,0 @@ -%% -%% This is file `uni.ins', the installation file for the -%% `universal' package. -%% -%% Copyright (C) 1998 Christian Holm. -%% -%% The universal package is free software; you can redistribute it -%% and/or modify it under the terms of the GNU General Public License -%% as published by the Free Software Foundation; either version 2 of -%% the License, or (at your option) any later version. -%% -%% The universal package is distributed in the hope that it will be -%% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -%% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -%% GNU General Public License for more details. -%% -%% You should have received a copy of the GNU General Public License -%% along with this package; if not, write to the Free Software -%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -%% - -\input docstrip.tex -\keepsilent -\declarepreamble\long - -Copyright (C) 1998 Christian Holm. - -This file is NOT the source for universal, because almost all -comments have been stripped from it. It is NOT the preferred -form of universal for making modifications to it. - -Therefore you can NOT redistribute and/or modify THIS file. -You can however redistribute the complete source (uni.dtx -and uni.ins) and/or modify it under the terms of the GNU -General Public License as published by the Free Software -Foundation; either version 2, or (at your option) any later -version. - -The universal font and package is distributed in the hope that -it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public -License along with this package; if not, write to the - Free Software Foundation, Inc., - 675 Mass Ave, Cambridge, - MA 02139, USA. - -See the file uni.dtx for further comments and documentation. - -\endpreamble - -\declarepreamble\short - -Copyright (C) 1998 Christian Holm. - -The universal font and package is distributed in the hope that -it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -See the file uni.dtx for further comments and documentation. - -\endpreamble - -\usepreamble\long -\usedir{tex/latex/universa} -\Msg{***********************************************************} -\Msg{* Generating LaTeX files} -\Msg{***********************************************************} -\generate{\file{uni.sty}{\from{uni.dtx}{package}} - \file{omluni.fd}{\from{uni.dtx}{oml}} - \file{omsuni.fd}{\from{uni.dtx}{oms}} - \file{ot1uni.fd}{\from{uni.dtx}{ot1}} - \file{t1uni.fd}{\from{uni.dtx}{t1}} - \file{uuni.fd}{\from{uni.dtx}{u}}} -\usedir{doc/latex/universa} -\Msg{***********************************************************} -\Msg{* Generating Documentation files} -\Msg{***********************************************************} -\generate{\file{unidoc.sty}{\from{uni.dtx}{docpackage}} - \file{copyright}{\from{uni.dtx}{copyright}}} -\usedir{fonts/source/public/universa} -\Msg{***********************************************************} -\Msg{* Generating METAFONT base file} -\Msg{***********************************************************} -\generate{\file{unibase.mf}{\from{uni.dtx}{unibase}}} -\usepreamble\short -\Msg{***********************************************************} -\Msg{* Generating upright medium driver files} -\Msg{***********************************************************} -\generate{\file{fulmr8.mf}{\from{uni.dtx}{font,medium,eight}} - \file{fulmr9.mf}{\from{uni.dtx}{font,medium,nine}} - \file{fulmr10.mf}{\from{uni.dtx}{font,medium,ten}} - \file{fulmr12.mf}{\from{uni.dtx}{font,medium,twelve}} - \file{fulmr17.mf}{\from{uni.dtx}{font,medium,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating upright bold face driver files} -\Msg{***********************************************************} -\generate{\file{fulbr8.mf}{\from{uni.dtx}{font,bold,eight}} - \file{fulbr9.mf}{\from{uni.dtx}{font,bold,nine}} - \file{fulbr10.mf}{\from{uni.dtx}{font,bold,ten}} - \file{fulbr12.mf}{\from{uni.dtx}{font,bold,twelve}} - \file{fulbr17.mf}{\from{uni.dtx}{font,bold,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating slanted medium driver files} -\Msg{***********************************************************} -\generate{\file{fulmo8.mf}{\from{uni.dtx}{font,medium,slanted,eight}} - \file{fulmo9.mf}{\from{uni.dtx}{font,medium,slanted,nine}} - \file{fulmo10.mf}{\from{uni.dtx}{font,medium,slanted,ten}} - \file{fulmo12.mf}{\from{uni.dtx}{font,medium,slanted,twelve}} - \file{fulmo17.mf}{\from{uni.dtx}{font,medium,slanted,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating small caps medium driver files} -\Msg{***********************************************************} -\generate{\file{fulmc8.mf}{\from{uni.dtx}{font,medium,caps,eight}} - \file{fulmc9.mf}{\from{uni.dtx}{font,medium,caps,nine}} - \file{fulmc10.mf}{\from{uni.dtx}{font,medium,caps,ten}} - \file{fulmc12.mf}{\from{uni.dtx}{font,medium,caps,twelve}} - \file{fulmc17.mf}{\from{uni.dtx}{font,medium,caps,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating strict medium driver files} -\Msg{***********************************************************} -\generate{\file{fulmst8.mf}{\from{uni.dtx}{font,medium,strict,eight}} - \file{fulmst9.mf}{\from{uni.dtx}{font,medium,strict,nine}} - \file{fulmst10.mf}{\from{uni.dtx}{font,medium,strict,ten}} - \file{fulmst12.mf}{\from{uni.dtx}{font,medium,strict,twelve}} - \file{fulmst17.mf}{\from{uni.dtx}{font,medium,strict,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating slanted bold face driver files} -\Msg{***********************************************************} -\generate{\file{fulbo8.mf}{\from{uni.dtx}{font,bold,slanted,eight}} - \file{fulbo9.mf}{\from{uni.dtx}{font,bold,slanted,nine}} - \file{fulbo10.mf}{\from{uni.dtx}{font,bold,slanted,ten}} - \file{fulbo12.mf}{\from{uni.dtx}{font,bold,slanted,twelve}} - \file{fulbo17.mf}{\from{uni.dtx}{font,bold,slanted,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating small caps bold face driver files} -\Msg{***********************************************************} -\generate{\file{fulbc8.mf}{\from{uni.dtx}{font,bold,caps,eight}} - \file{fulbc9.mf}{\from{uni.dtx}{font,bold,caps,nine}} - \file{fulbc10.mf}{\from{uni.dtx}{font,bold,caps,ten}} - \file{fulbc12.mf}{\from{uni.dtx}{font,bold,caps,twelve}} - \file{fulbc17.mf}{\from{uni.dtx}{font,bold,caps,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating strict bold face driver files} -\Msg{***********************************************************} -\generate{\file{fulbst8.mf}{\from{uni.dtx}{font,bold,strict,eight}} - \file{fulbst9.mf}{\from{uni.dtx}{font,bold,strict,nine}} - \file{fulbst10.mf}{\from{uni.dtx}{font,bold,strict,ten}} - \file{fulbst12.mf}{\from{uni.dtx}{font,bold,strict,twelve}} - \file{fulbst17.mf}{\from{uni.dtx}{font,bold,strict,seventeen}}} -\Msg{***********************************************************} -\Msg{* Generating font program files} -\Msg{***********************************************************} -\generate{\file{uniupp.mf}{\from{uni.dtx}{upp}} - \file{unilow.mf}{\from{uni.dtx}{low}} - \file{unidig.mf}{\from{uni.dtx}{dig}} - \file{unispe.mf}{\from{uni.dtx}{spe}} - \file{unilig.mf}{\from{uni.dtx}{lig}} - \file{unipun.mf}{\from{uni.dtx}{pun}} - \file{uniacc.mf}{\from{uni.dtx}{acc}} - \file{uniext.mf}{\from{uni.dtx}{ext}}} - -\Msg{***********************************************************} -\Msg{* To finish the installation you have to move the files} -\Msg{* `uni.sty' `*.fd' into a directory searched by TeX, and} -\Msg{* the files `*.mf' to a directory searched by Metafont.} -\Msg{*} -\Msg{* To produce the documentation do:} -\Msg{*\space\space latex uni.dtx} -\Msg{*\space\space latex uni.dtx} -\Msg{*\space\space makeindex -s gind -o uni.ind uni.idx} -\Msg{*\space\space makeindex -s gglo -o uni.gls uni.glo} -\Msg{*\space\space latex uni.dtx} -\Msg{*\space\space latex uni.dtx} -\Msg{* or whatever appropiate for your system.} -\Msg{***********************************************************} -\endbatchfile diff --git a/Master/texmf-dist/source/fonts/universa/universa.dtx b/Master/texmf-dist/source/fonts/universa/universa.dtx new file mode 100644 index 00000000000..b90c69e5172 --- /dev/null +++ b/Master/texmf-dist/source/fonts/universa/universa.dtx @@ -0,0 +1,5898 @@ +% \iffalse +%<*(package|oml|oms|ot1|t1|u)> +\def\unifileversion{v2.1} +\def\unifiledate{2019/08/26} +% +% \fi +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage{unidoc,latexsym} +\OnlyDescription %For short description of font and package. +% \AlsoImplementation %For full description of font and package. +\title{The \universal{} Font\\ \normalsize{Version \unifileversion}} +\author{Christian Holm\thanks{E--mail: \texttt{}}} +\date{\unifiledate} +\begin{document} +\maketitle +\begin{abstract} + This is my implementation of Herbert Bayer's ``universal'' font in + \MF{} for \TeX{} and \LaTeX{}. Extensive support for \LaTeX{} is + supplied. This font is in no way intended to be a correct, not to + mention a comlpete implementation of Herbert Bayer's original + design. This document describes how to use the font with \LaTeX{}, + and also the source code for the characters of the font. +\end{abstract} +\tableofcontents +\DocInput{universa.dtx} +\appendix + +\section{Solution to the \Lcs{bauhausforms} problem} +\label{app:solu} + +\subsection{The Problem} +This I owe to Joseph Collins \texttt{}. + +During the preperation of version~1.0 of this font, I was loosing +sleep over what I chose to call `The \Lcs{bauhausforms} +problem', after the problems the symbol \textuni{\bauforms} gave +me. + +As can be seen from the symbol, the idea is to make a figure out of +a circle, a square, and a triangle. From these three figures you can +ofcourse make infinitly many figures, even though the sizes are +limited. The particular combination of the three figures I was +looking, first seemed simple\footnote{And after having seen Mr.\ +Collins solution, it did again.}, but turned out to be +difficult. What I wanted to do was (see also +figure~\ref{fig:bauforms}): +\begin{quote} + Take a circle of some radius (e.g., 1). Inside this circle draw a + isosceles triangle $\bigtriangleup ABC$, with all vertices on the + circle, The singular vertice $A$ placed on the horizontal line + traveling left from the center of the circle. + + Now draw a square $\Box PQRS$ inside of the circle, having two + vertices on the circle, and two on the triangle. + + The wanted triangle and square are such that, the opposing side of + the singular vertice $|BC|$ should divede the square into to equal + oblongs, i.e., intersect $|PQ|$ midway between $P$ and $Q$. +\end{quote} + +\begin{figure}[htbp] + \centering + \beginillu + \setlength{\unitlength}{.05\textwidth} + \begin{picture}(10,10) + \thinlines + \put(-1,5){\line(1,0){12}} + \put(5,-1){\line(0,1){12}} + \thicklines + \put(5,5){\circle{10}} + \put(0,5){\line(100,74){6.521}} + \put(0,5){\line(100,-74){6.521}} + \put(6.4330,0.2097){\line(0,1){9.5805}} + \put(3.6873,7.7457){\line(1,0){5.4914}} + \put(3.6873,2.2543){\line(1,0){5.4914}} + \put(3.6873,2.2543){\line(0,1){5.4914}} + \put(9.1787,2.2543){\line(0,1){5.4914}} + \put(0,5){\mbox{$A$}} + \put(6.4330,0.2097){\mbox{$B$}} + \put(6.4330,5){\mbox{$B^\prime$}} + \put(6.4330,9.7903){\mbox{$C$}} + \put(3.6873,2.2543){\mbox{$P$}} + \put(3.6873,5){\mbox{$P^\prime$}} + \put(9.1787,2.2543){\mbox{$Q$}} + \put(9.1787,5){\mbox{$Q^\prime$}} + \put(9.1787,7.7457){\mbox{$R$}} + \put(3.6873,7.7457){\mbox{$S$}} + \put(5,5){\mbox{$O$}} + \put(0,5){\arc{1}{0}{0.6401}} + \put(0,4.5){\mbox{$\varphi$}} + \end{picture} + \illuother + \begin{tabular}{% + @{\vline\extracolsep{1em}\space}% + p{.8\textwidth}% + @{\space\vline}} + \hline + Since you are processing this document without the + \textsf{eepic} package, you will not see the illustration + otherwise here. To compensate, I will give you a short + description on how to draw the figure yourself. + + Take out some paper, a pencil, compasses, and a ruler. Now + draw a circle of some radius $r$, with its center in origo of + a Cartisean coordinate system. In the next subsection, you + will find the coordinates for points $A,B,C,O,P,Q,R,$ and $S$ + expressed in terms of $x,y,$ and $h$. You will also find the + correct values for $x,y,h$ in that section. Multiply those + values with $r$, and plot the points above in the coordinate + system. Draw the triangle $\bigtriangleup ABC$, and the square + $\Box PQRS$, and --- voila, you have the illustration.\\ + \hline + \end{tabular} + \endillu + \caption{The \Lcs{bauforms} problem.}\label{fig:bauforms} +\end{figure} + +This shouldn't be to difficult, should it. Well I didn't think so, +but after many late evenings with pen, paper, ruler, compasses, and +heavy use of trigonometric relations, I found out that the half +$\varphi$ of the singular vertice should obey: +\begin{eqnarray} +0 &=& \sin \left( \cos^{-1} \left( \frac{\cos2\varphi}{\sqrt{2}} + \right) \right) - \frac{\cos2\varphi}{\sqrt{2}}\nonumber\\ +& & - 2\sqrt{2} + \frac{\cos\varphi^2\sin\varphi}{\cos\varphi+\sin\varphi} + \nonumber +\end{eqnarray} +Now I dare you to find the exact solution to that. + +Using numerical methodes (Newton's method), was ofcourse no +problem, and gave satesfactory resualt. If the expression on the +right above is labelled $f$, $f^\prime$ is: +\begin{eqnarray} +f^\prime &=& \frac{\sin4\varphi}{2\sqrt{\frac{3-\cos4\varphi}{4}}} + + \sqrt{2}\sin2\varphi\nonumber\\ +& & - \frac{2\sqrt{2}\cos\varphi}{\cos\varphi+\sin\varphi^2} + \left( \left( \cos\varphi+\sin\varphi \right) + \left( \cos^2\varphi-2\sin^22\varphi \right)\right. \nonumber\\ +& & - \quad \left.\left( \cos\varphi-\sin\varphi \right) + \cos^2\varphi\sin\varphi \right) \nonumber +\end{eqnarray} +Using these expressions for $f$ and $f^\prime$ in a \textsf{Fortran} +program, I reached resaults close to what Mr.\ Collins found. + +\subsection{Joseph Collins' Solution} + +In Mr.\ Collins notation, the points on figure~\ref{fig:bauforms} +has the following coordinates: +\begin{eqnarray*} + A = (0,-1) & B^\prime = (x,0) & C = (x,y)\\ + O = (0,0) & P^\prime = (x-h,0) & Q^\prime = (x+h,0)\\ + R = (x+h,h) & S = (x-h,h) & \\ +\end{eqnarray*} +Below is what Mr.\ Collins wrote me --- thank you very much. + +On the unit circle +\begin{equation}\label{eq:uc} + x^2 + y^2 = 1 +\end{equation} +we have the vertices of a triangle at $(-1,0)$, $(x,y)$, and +$(x,-y)$. A square has four vertices $(x \pm h, \pm h)$, where the +two points $(x-h, \pm h)$ lie on the triangle (constraint A) and the +two points $(x+h, \pm h)$ lie on the circle (constraint B). Thus, +the vertical side of the triangle bisects the square. From +constraint A, upon consideration of similar triangles, we have +$$\frac{y}{1+x} = \frac{h}{1+x-h}, \quad \mbox{so that}\quad + h = \frac{(1+x) y }{1+x+y}.$$ +By (\ref{eq:uc}), this is +\begin{equation} \label{eq:b1} + h = \frac{(1+x)\sqrt{1-x^2}}{1+x+\sqrt{1-x^2}} . +\end{equation} +From constraint B, we get +\begin{equation} \label{eq:b2} + (x+h)^2 + h^2 = 1 . +\end{equation} +Any simultaneous solution of (\ref{eq:b1}) and (\ref{eq:b2}) is also a +solution of +\begin{equation}\label{eq:eqn} + 8x^3 - 4x^2 - 3x + 1 = 0, +\end{equation} +the relevant solution being +\begin{equation} \label{eq:sol} + x = \frac16 + \sqrt{\frac{11}{18}} \sin + \left[ \frac{\pi}{6} + - \frac13 \arctan\left(\frac{3\sqrt{237}}{23}\right) \right]. +\end{equation} +Equation (\ref{eq:eqn}) and solution (\ref{eq:sol}) courtesy of +Mathematica. We get $y$ and $h$ from (\ref{eq:uc}) and +(\ref{eq:b1}), respectively. The angle at $(-1,0)$ is $\varphi = 2 +\arctan\bigl(y/(1+x)\bigr)$. + +Approximate values are +\begin{eqnarray*} + x &\simeq& 0.2865914\\ + y &\simeq& 0.9580529\\ + h &\simeq& 0.5491394 \\ + \varphi &\simeq& 1.280129 \ ( \simeq 73.346^o) +\end{eqnarray*} + +\section{Copyrights --- GNU General Public Lisence} +\label{app:ggpl} + +This \MF{} implementation of the ``universal'' font and the \LaTeX{} +support package ``uni'' copyright \copyright{} 1998 Christian Holm. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +\textsc{without any warranty}; without even the implied warranty +of \textsc{merchantability} or \textsc{fitness for a particular +purpose}. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to +\begin{quote} + The Free Software Foundation, Inc.\\ + 675 Mass Ave\\ + Cambridge\\ + MA 02139\\ + USA +\end{quote} + +See the file \texttt{copyright} in the distribution for the complete +GNU General Public License. + +\section{Wishlist} + +Below is a list of things I would like to do with the font and +package. If anyone has any suggestions, ready--made code, or new +ideas, please let me know. + +If you would like to take on one or more of the tasks presented +below, please do so, but send me a note so that I may coordinate +with my own efforts, and perhaps have a constructive dicourse. + +I should however instruct you to read the \emph{complete} +documentation of the package and font, since this may give some +reasons why I have chosen a particular approach. + +\begin{itemize} +\item Make the font an 8--bit encoded (256 characters) font, + conforming somewhat to the \texttt{T1} encoding of the Cork fonts. +\item Making a package (perhaps \textsf{mfdoc}), to make + documentation of \MF{} sources, just like \textsf{doc} is fore + \LaTeX{} sources. This is ofcourse a independent project, and I + will proberly not work on it. +\end{itemize} +\clearpage +\section{Font Charts} +\label{app:charts} + +Below are some charts of the \universal{} font in different series +and shapes (medium upright, slanted, small-caps, and strict, as well +as bold upright, slanted, small caps, and strict), all in size \texttt{8pt}. + +\FontChart{fulmr8.mf}{medium, upright} +\FontChart{fulmo8.mf}{medium, oblique} +\FontChart{fulmc8.mf}{medium, small-caps} +\FontChart{fulmst8.mf}{medium, strict} +\FontChart{fulbr8.mf}{bold, upright} +\FontChart{fulbo8.mf}{bold, oblique} +\FontChart{fulbc8.mf}{bold, small-caps} +\FontChart{fulbst8.mf}{bold, strict} + +\clearpage +\end{document} +% +%<*copyright> + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +% +%\fi +% \def\fileversion{v2.1} +% \def\filedate{2019/08/26} +% \section{Introduction} +% \changes{v1.0}{1997/17/24}{Creation of the \universal{} font} +% +% This package contains the \MF{} source and driver files for the +% ``universal'' font, designed by Herbert Bayer, a teacher at the +% Bauhaus school in Weimar\index{Bayer, Herbert}, plus a \LaTeX{} +% package to utilize this font, along with a number of font definition +% files, as required by the New Font Selection Scheme (\NFSS{}). +% +% \subsubsection*{About the Documantation} +% +% The full documentation of this font is rather large, more then 80 +% pages actually. Most of it is the programs for the characters for +% this font, so if you don't know the \MF{} language, or don't care +% how the charcters are created, you should insert +% \Lcs{OnlyDescription} into the preamble of \texttt{universa.dtx}. +% +% Notice, that \MF{} macros are \emph{not} indexed in this +% documentation. This is because it would take a \emph{major} rewrite +% of the \textsf{doc} package to do so, and I really didn't want to do +% that. +% +% Some of the macros of \textsf{doc} \emph{has} been redefined, and if +% you want to see which, or how I generally did the documentation, +% please refer to appendix~\ref{app:unidoc}. +% +% If you in some way are unsatisfied with some of the characters of +% the font, do please read the documentation of that character. There +% may be some notes on why the character looks the way it does. Some +% of the comments, however are a bit silly and should be skipped at +% high speed (pretend there is a conditional that says \texttt{if not +% silly ... fi}). +% +% \subsubsection*{This Version} +% \changes{v2.0}{98/08/01}{Bug corrections, new font +% shapes, better font programs, new/improved macros for \LaTeX{} +% support, better conformation to \NFSS{}, using \textsf{fontname} +% filenaming scheme, etc.} +% +% This new version of the \universal{} font, provides a number +% of new features and improvements, both to the font itself and to the +% \LaTeX{} support macros. Also, a number of corrections has been made +% to the font programs. +% +% The reason why I jumped one whole version number from 1.0 to 2.0, is +% that I have taken a whole new approach to the font programs and +% shapes of the \universal{} font, plus I decided to put some +% more effort into the \LaTeX{} support. +% +% \subsubsection*{Thanks and Other Stuff} +% +% To those of you who have had the (mixed) pleasure of using version +% 1.0 of this font, one of the most notaticable changes are to the +% symbol \textuni{\bauforms}. In the old documenation, I complained +% that I couldn't find the exact solution to the problem this symbol +% possed. I also encourged people to send me any solution they may +% have had --- and guess what --- somebody did! Therefore I would like +% to thanck Joseph Collins for providing me with the solution. If you +% like Joseph Collins and I like Mathematical puzzles take a look in +% Appendix~\ref{app:solu} to learn more about this problem and it's +% solution. +% +% I also direct your attention to Appendix~\ref{app:ggpl} for the +% copyright notice on the \universal{} package (it's the +% \textsl{Gnu General Public Lisence} to those of you who know it). +% +% If you in any way have gotten tempted to design your own font, or to +% implement some font into \MF{}, I feel obligated to bring you a +% warning, taken from the \MF{}book by Donald E.\ Knuth: +% \begin{quote} +% \uni +% \textsc{Warning:} Type design can be hazardous to your other +% interests. Once you get hooked, you will develop intense feelings +% about letterforms; the medium will intrude the message that you +% read. And you will perpetually be thincking of improvements to the +% fonts that you see everywhere, especially those of your own +% design. +% \end{quote} +% +% \section{The Font and it's History} +% +% \subsubsection*{Bauhaus} +% The Bauhaus school in germany originally located at Dessau, was a +% school for any kind of design, ranging from potery to furniture, +% from painting to --- what was considered the prime form of design +% --- architecture. Many famous designers came from, or taught at +% Bauhaus, for example Mies van der Rhoe\index{Rhoe, Mies van der}, +% Herbert Bayer\index{Bayer, Herbert}, Kandinsky\index{Kandinsky}, +% Walter Gropius\index{Gropius, Walter} and Gerrit +% Rietveld\index{Rietveld, Gerrit}. The style ``die stiil'' +% \index{die stiil} was explored here, and painters like +% Mondrian\index{Mondrian} made large contributions to what today is +% known as +% ``the Bauhaus style''\index{Bauhaus style=\textuni{Bauhaus style}}. +% +% The basic idea of the Bauhaus school, was to design items, which +% along with it's aesthethic value, also had a high degree of +% functionallity. Houses were meant to be suited for all kinds of +% living, while still keeping the beauty that make people glad to see +% thier house. Chairs should be comfortable for thier use, as well be +% able to fit--in in a normal house. All this should be done at a +% price that made it possible for everybody to own +% designer--furniture, houses, etc. +% +% The political idea of Bauhaus, was that of a socialist one. Houses +% are for the people --- they have to live in them, and that living +% should be a good as possible. Therefore the Bauhaus school saw it +% has its task to provide functional, beautiful everyday items that +% anybody could affort. Paintings and tapestery shouldn't hang on +% museums or art galleries, but in peoples homes, where they would +% inrich thier everyday life. +% +% \subsubsection*{Herbert Bayer and the ``universal'' Font} +% +% At Bauhaus typography was also studied, not just how written text +% should be typeset, and how printed characters should look like, but +% also what the essence of writting is, in it's pratical and +% design--wise sense. This led Herbert Bayer\index{Bayer, Herbert} to +% formulate some principles of writting: +% +% \begin{quote} +% {\uni experiment with simplified way of writing: +% \begin{enumerate} +% \item this way of writing is recommended by all typographic +% designers as the future way of writing. +% \item by writing in minuscules our writing looses nothing, +% but is easier to read, considerably more economical. +% \item why must you for one sound have two tokens, e.g.\ +% A and a? why two alphabets for one word, why this double +% set of signs, when the half is enough. +% \end{enumerate} +% \begin{flushright} +% herbert bayer 1925 +% \end{flushright}} +% \end{quote} +% +% On this principles, Herbert Bayer designed a font, which should have +% no majuscles (upper case letters), easy to print, and easy to read +% since it didn't have any unusefull decoration, but communicated the +% bare meaning of characters through the simplest forms needed to +% reconigise a character. This font he called ``universal''. +% +% This font contained abolutly no majuscles, since Bayer believed them +% to be superflous, as it is clear form the quote above. +% +% At the time Herbert Bayer formulated these principles and designed +% the ``universal'' font, most printers used Gothic letters, which is +% allmost overly decorated, so his font ofcourse made +% contraversy. +% +% Later on, in the 1930'ies, the Bauhaus school drew the +% attention of \emph{Gestapo}\footnote{Gehemligche Stats Polizi} of +% Nazi\footnote{Nationalsocializmus} Germany. The school was finally +% closed in 1936 by Gestapo, because they believed they were promoters +% of Jewish and Communist culture and propaganda. +% +% In the aftermatch of the closing of the school, most of it's ideas +% were shundend by other designers, and the Bauhaus way of thinking +% died out. This is properly the reason why Herbert Bayers +% ``universal'' font is so little known today. +% +% However, the ``universal'' font still stands as one of the most +% compelling developments in font designing. It represents an approach +% to designing where the functionallity is as vital as the expression, +% and as such I believ it to be one of the most important fonts in the +% world today. +% +% \section{This \MF{} Implementation} +% +% This implementation of Herbert Bayers ``universal'' font, is not +% supposed to look \emph{exactly} like the original design. Ofcourse I +% have tried to the best of my ability to mimic his design as far as I +% could. However, it is not an easy matter to find a complete, not to +% mention exact, sample or account of Bayers design. +% +% This implementation is bassed on the samples I \emph{could} find, +% and other implementations of the ``universal'' font. Many of these +% other implementations do differ from the original samples, and +% include characters I couldn't find in any of the original. So +% whenever I found disparities, I mainly leened on the original +% samples and my understanding of the original design. +% +% \subsection{The \MF{} version versus the Original} +% +% As mentioned above, Bayer never did design any majuscles for this +% font, but nonetheless, I have included them into this +% implementation. This I did, because I think most people will have a +% hard time writting in minuscles (lowercase letters) alone. Ofcorse, +% if you agree with Bayer, you should simple not use them. +% +% There are also some other differences, mostly due to the fact, that +% I never found a complete sample of the original font. The major +% differences between the originalk font and this implementation is +% summerized below: +% +% \begin{description} +% \item[Majuscles:] Majuscles are present, even though they weren't +% in the original design. +% \item[Digigts:] These are based on other implementations, and my +% general conception of the original design. +% \item[Punctuations:] As above. +% \item[Accents:] As above. +% \item[Symbols:] As above. +% \item[Bauhaus Symbols:] I have added some various symbols I have +% found in connection with Bauhaus to the font. The reason is I +% find them beautiful, and I had some space to fill. +% \item[Numerous Shapes and Weights:] I don't think Bayer ever +% design slanted characters, a bold face version of the font, and +% he could never have design a small caps version of the +% font. However, these are present in this implementation. I +% included these features, because I believ them to be of general +% utility, and it makes the font conform more to the Computer +% Modern Roman font, and \NFSS{}. +% \end{description} +% +% \subsection{Features of the font} +% +% Rather then using \texttt{cmbase.mf}\footnote{Computer Modern Roman +% base file}, and then redefine some macros, I chose to make a new +% base file myself, i.e., +% \texttt{unibase.mf}\index{unibase.mf=\texttt{unibase.mf}}. This file +% contains a number of macros\footnote{A better name for `base' would +% be `library', and then the file would be \texttt{libuni.mf}, but to +% conform to CM, I used `base'.} I have used in the character +% programs. +% +% The macros of \texttt{unibase.mf} actually reflects my conception of +% the font. There are three basic drawing macroes: +% \begin{description} +% \item[\texttt{unicir}] which draws a circle, +% \item[\texttt{uniarc}] which draws a segment (arc) of a circle, and +% \item[\texttt{unilne}] which draws a straight line. +% \end{description} +% I believe, that Bayer intended the font to be made of these two +% basic shapes: the arc, and the line. Also, to keep things simple, +% and therefore easy to print, all shapes should be of the same +% thickness, i.e.,as if drawn with a pen of equal thickness. I have +% made one diviation from this, however. All majuscles are drawn with +% a thicker `pen', which makes the output nicer, I think. +% +% Incidently, this made the programs of the characters much simpler, +% and shorter. +% +% \subsubsection{Series, Shapes, Sizes, and Special Characters} +% +% \Newestchanges{v2.0}{98/08/01}{Added `small caps' shape to the font.} +% \changes{v2.0}{98/08/01}{Added non--standard `strict' shape to the +% font.} +% \changes{v2.0}{98/08/01}{Added `slanted' shape to the font.} +% \changes{v2.0}{98/08/01}{Default series is changed to `medium' +% to the font, `bold face' support included.} +% +% Below is a sample of each series/shape combination avaliable in this +% implementation of the font, along with the \LaTeX{} commands that +% drive them: +% +% \begin{description} +% \item[\rm Medium upright (\Lcs{textuni}):] +% \textuni{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Medium slanted (\Lcs{textunisl}):] +% \textunisl{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Medium small caps (\Lcs{textunisc}):] +% \textunisc{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Medium strict (\Lcs{textunist}):] +% \textunist{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Bold face upright (\Lcs{textunibf}):] +% \textunibf{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Bold face slanted (\Lcs{textunibsl}):] +% \textunibsl{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Bold face small caps (\Lcs{textunibsc}):] +% \textunibsc{The dazed brown fox quickly gave 1234-567890 jumps!} +% \item[\rm Bold face strict (\Lcs{textunibst}):] +% \textunibst{The dazed brown fox quickly gave 1234-567890 jumps!} +% \end{description} +% +% Everyone of these shapes are avaliable in size 8, 9, 10, 12, 17 +% \texttt{pt}, and \MF{} can ofcourse create others. +% +% \Newestchanges{v2.0}{98/08/01}{Some of the \textunibf{bauhaus} symbols +% that where avaliable in v1.0, has been taken out.} +% Also a number of non--standard characters are avaliable in the +% font. Below is a table of these characters along with the \LaTeX{} +% commands that drive them. +% +% Notice that \textunibf{``} and \textunibf{''} is present in the +% table. This is because these characters are not directly defined, +% but is supplied as \emph{ligatures}. This can be done, because they +% are simple doubles of \textunibf{`} and \textunibf{'}. +% +% A quick look on the table will also reveal some characters that +% generally isn't present in the standard \texttt{OT1} +% encoding\footnote{The \texttt{OT1} encoding is the 7 bit encoding of +% the Computer Modern fonts by Donald E.\ Knuth. 7 bit means it +% contain 128 ($=2^7$) characters.}, but generally present in the +% \texttt{T1} encoding\footnote{The \texttt{T1} encoding is an +% encoding especially designed for the (western) European +% languages. It was founded by the \TeX{} User's Group, on a seminar +% in Cork, and is the basis of the \texttt{dc} fonts. \texttt{T1} is +% an 8 bit encoding, which means it has 256 ($=2^8$) characters.}. I +% have done this, both to provide an (almost) complete font for the +% European languages, but also because I anticipate the \universal{} +% font some time in the future will shift, or a least be avaliable, in +% the \texttt{T1} encoding\footnote{\texttt{T1} is generally +% considered \emph{the} encoding of the future, and in the long term, +% it is most likely the encoding of \LaTeX3.}. +% \begin{table}[htbp] +% \centering +% \begin{tabular}{% +% @{\vline\extracolsep{1em}\space}ll% +% @{\extracolsep{1em}}ll% +% @{\space\vline\extracolsep{1em}}}\hline +% \textuni{\bausquare}&\Lcs{bausquare}& +% \textuni{\baucircle}&\Lcs{baucircle}\\ +% \textuni{\bautriangle}&\Lcs{bautriangle}& +% \textuni{\bauhead}&\Lcs{bauhead}\\ +% \textuni{\bauforms}&\Lcs{bauforms}& +% \textuni{\dh}&\Lcs{dh}\\ +% \textuni{\dj}&\Lcs{dj}& +% \textuni{\ng}&\Lcs{ng}\\ +% \textuni{\th}&\Lcs{th}& +% \textuni{\varQ}&\Lcs{varQ}\\ +% \textuni{\DH}&\Lcs{DH}& +% \textuni{\DJ}&\Lcs{DJ}\\ +% \textuni{\NG}&\Lcs{NG}& +% \textuni{\TH}&\Lcs{TH}\\ +% \textuni{\textsection}&\Lcs{textsection} or \Lcs{S}& +% \textuni{\textbraceleft}&\Lcs{textbraceleft} or \Lcs{\char"7B}\\ +% \textuni{\textbraceright}&\Lcs{textbracerigth} or \Lcs{\char"7D}& +% \textuni{\textbar}&\Lcs{textbar}\\ +% \textuni{\guilsinglleft}&\Lcs{guilsinglleft}& +% \textuni{\guilsinglright}&\Lcs{guilsinglright}\\ +% \textuni{\guillemoleft}&\Lcs{guillemoleft}& +% \textuni{\guillemoright}&\Lcs{guillemoright}\\ +% \textuni{\quotesinglbase}&\Lcs{quotesinglbase}& +% \textuni{\quotedblbase}&\Lcs{quotedblbase}\\ +% \textuni{\textquotedblleft}&\Lcs{textquotedblleft}& +% \textuni{\textquotedblright}&\Lcs{textquotedblright}\\ +% \textuni{\textogonek}&\Lcs{textogonek}& +% \textuni{\textunderscore}&\Lcs{textunderscore}\\ +% \hline +% \end{tabular} +% \caption{Non--standard characters in the {universal} font} +% \label{tab:characters} +% \end{table} +% Please note, that in the small caps shaped fonts, \Lcs{dh} does not +% give {\small\textuni{\DH}}, but a \textunibsc{\dh}, that is a small +% caps shaped version of \Lcs{varQ}. Also there is no command +% \Lcs{varq} defined. +% +% In appendix~\ref{app:charts} is some charts showing the font in +% different series and shapes. +% +% \subsubsection{File Names for the \MF{} files} +% +% \paragraph{Base File and Source Files} +% The base file and the files containg the code for the characters of +% the \universal{} font, all starts with \texttt{uni}, to reflect the +% connection of the files. The next five possible letters reflects +% what kind of code is contained within the file, e.g., the base file +% ends in \texttt{base}, the file containing the code for the +% minuscles (lower case letters) end in \texttt{lower}, and so forth. +% +% \paragraph{Font Driver Files} +% The font driver filenames has been chosen to conform to the +% \texttt{fontname} scheme, because this scheme is used by most +% \TeX{}, \LaTeX{}, and \MF{} systems (anyway those that use +% \texttt{kpathsea}, which is the most). +% +% The filename all contain the three characters \texttt{ful}, where +% the \texttt{f} stands for \textit{public} and \texttt{ul} for +% \textit{universal}. +% +% Next comes a letter which is one of \texttt{m} (\textit{medium}) or +% \texttt{b} (\textit{bold}), which represents the series of the +% font. +% +% Then comes one or two letters, which are \texttt{r} +% (\textit{upright} or roman), \texttt{o} (\textit{slanted}, or +% oblique), \texttt{c} (\textit{small caps}), or \texttt{st} +% (\textit{strict}), which represent the shape of the font. +% +% Finally the filename ends with the designsize in points. +% +% Thus the complete syntax for the font driver file names is: +% \begin{table}[htbp] +% \centering +% \begin{tabular}{rcl} +% \meta{filename}&:=& +% \meta{supplier}\meta{face}\meta{series}\meta{shape}\meta{size}\texttt{.mf}\\ +% \meta{supplier}&:=&\texttt{f}\\ +% \meta{face}&:=&\texttt{ul}\\ +% \meta{series}&:=&\texttt{m \char"7C\ b}\\ +% \meta{shape}&:=&\texttt{r \char"7C o \char"7C c \char"7C st}\\ +% \meta{size}&:=&\texttt{\char"7C\ 8 \char"7C\ 9 \char"7C\ 10 +% \char"7C\ 12 \char"7C\ 17} +% \end{tabular} +% \end{table} +% The \texttt{fontname} scheme actually says to put \meta{encoding} +% information after the \meta{shape}, but since this is \texttt{8r} +% for \TeX{} Text, it would make filenames longer then 8 characters in +% the cases of \meta{size} of 10, 12, and 17, so this information is +% left out (which is permisable in \texttt{fontname}, but +% unfortunate). +% +% This way of naming the font driver files will, if you use +% \texttt{kpathsea}, put the \texttt{ful*.*pk} files in\newline +% \indent\meta{pk--base--dir}\texttt{/public/universa/}\newline +% and the \texttt{ful*.tfm} files in\newline +% \indent\meta{tfm--base--dir}\texttt{/public/universa/}\newline +% which I think is the intuitivly correct place to put them. This also +% means, that the \texttt{*.mf} files provided with this package, +% should be placed in\newline +% \indent\meta{mf--source--base--dir}\texttt{/public/universa/}\newline +% again very intuitive. +% +% Below is a table of the usual directory names under +% \textsf{Unix}--like and \textsf{MSDOS}--like (including Windows95) +% systems.\meta{mode} is \textsf{dvips}'s name for your printer. +% \begin{table}[htbp] +% \begin{tabular}{% +% @{\vline\extracolsep{1em}\space}l% +% @{\space\vline\extracolsep{1em}\space}l% +% @{\space\vline\extracolsep{1em}\space}l% +% @{\space\vline\extracolsep{1em}}} +% \hline +% Varibale&\textsf{Unix}--like systems&\textsf{MSDOS}--like systems\\ +% \hline +% \meta{tfm--base--dir}& +% \texttt{/var/spool/texmf/pk/}\meta{mode}\texttt{/}& +% \texttt{C:\Lcs{}FONTS\Lcs{}PK\Lcs{}}\meta{mode}\Lcs{}\\ +% \meta{tfm--base--dir}& +% \texttt{/var/spool/texmf/tfm/}& +% \texttt{C:\Lcs{}FONTS\Lcs{}TFM\Lcs{}}\\ +% \meta{tfm--base--dir}& +% \texttt{/usr/local/lib/texmf/fonts/source/}& +% \texttt{C:\Lcs{}TEX\Lcs{}MFINPUTS\Lcs{}}\\ +% \hline +% \end{tabular} +% \caption{Common directory names.} +% \end{table} +% +% \subsection{The \LaTeX\ and \NFSS\ Support} +% +% To use the \universal{} font with \LaTeXe{}\footnote{I have made +% \emph{no} attempt to provide support for \LaTeX2.09, since this +% format is obsolete, and those who \emph{do} use it, will proberly +% never bother to look at CTAN for new fonts anyway.}, you should load +% the package \textsf{uni} with the command +% \begin{quote} +% \Lcs{usepackage}\oarg{options}\marg{uni} +% \end{quote} +% in your preamble (i.e., after \Lcs{documentclass} and before +% \Lcs{begin\{document\}}). \meta{options} can be any of the options +% described below, but no other. +% +% \subsubsection{Options to \textsf{uni}} +% +% \marginpar{\raggedright\texttt{strict}} +% \index{strict=\texttt{strict}\space(Option)} +% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{strict}.} +% The \texttt{srict} option is intended to fassilitate typesetiing of +% the \universal{} font in a \emph{strict} \textunibf{bauhaus} +% fashion, that is \emph{only} in minuscules. +% +% In this font, only the series may be variated, that is, there is a +% bold series strict shaped font of any size, and a medium series +% strict shaped font of any size, in the \universal{} family. +% +% This option can be used in conjuntion with options \texttt{medium} +% and \texttt{bold}. Please notice, that it doesn't make any sense to +% ask for a small caps or slanted shaped font, while using this option. +% +% Notice that only \Lcs{textuni} and \Lcs{uni} is defined if option +% \texttt{strict} was given to \textsf{uni} package. +% +% \marginpar{\raggedright\texttt{default}} +% \index{default=\texttt{default}\space(Option)} +% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{default}.} +% If you give the \texttt{default} option to the \textsf{uni} package, +% the default font of the document will be \textunirm{universal}. +% +% If you also used the option \texttt{bold} the default font will be +% the \universal{} font in \textbf{bold} series. Otherwise it will be +% in medium series. +% +% With this option, \Lcs{textit}, \Lcs{it}, and \Lcs{itshape} shifts +% to \textunisl{universal slanted} font, i.e., there is no +% \textit{italic} font avaliable. +% +% \DescribeMacro{\textcmr} +% \DescribeMacro{\cmr} +% To make it possible to change back to Donald E.\ Knuth's Computer +% Modern Roman font, even when the \texttt{default} option is given, +% we define macros \Lcs{textcmr} and \Lcs{cmr}, which switches the +% \Lcs{fontfamily} to \texttt{cmr} locally and gobally respecivly. +% +% You should use this option with some care, since the \universal{} +% font isn't very suited for longer texts, but rather for short +% letters, quotes, and other pieces of text where the graphical +% apperance is important. +% +% \marginpar{\raggedright\texttt{medium}} +% \index{medium=\texttt{medium}\space(Option)} +% \Newestchanges{v2.0}{98/08/01}{Added option \texttt{medium}.} +% When this option is given, command \Lcs{textuni} switches to +% \textunirm{medium series universal font}, as do \Lcs{uni}. The other +% font selection commands behave as always (see below). This is the +% default option to \textsf{uni}, i.e., not normally needed. +% +% \marginpar{\raggedright\texttt{bold}} +% \index{bold=\texttt{bold}\space(Option)} +% \Newestchanges{v2.0}{98/08/01}{Added options \texttt{bold}.} +% If this option is given, commands \Lcs{textuni} and \Lcs{uni} +% switches to \textunibf{bold series universal font}. Other font +% selection commands behave as always (see below). Notice that it +% makes no sense to give both option \texttt{medium} and option +% \texttt{bold} to the \textsf{uni} package. +% +% \subsubsection{Font Selection Commands} +% +% \DescribeMacro{\textuni}\DescribeMacro{\uni} +% These two commands only change the current font family to +% \texttt{uni} \emph{and nothing else}. That means, that if you say +% for example +% \begin{verbatim} +% {\sl Hello \textuni{world}} +% \end{verbatim} +% you get \emph{both} `Hello' and `world' in slanted shape, and the +% output would be +% \begin{quote} +% {\sl Hello \textuni{world}} +% \end{quote} +% To put it in another way: Font encoding, shape, size, and +% baselineskip is preserved under \Lcs{textuni} and \Lcs{uni}, while +% font family is not. +% +% \textbf{Execptions:} If you gave the \texttt{bold} option to the +% \textsf{uni} package, then this command will always give you a bold +% series font. If you gave the \texttt{strict} option, then this +% command will always give you a strict shaped font. +% +% These commands can be used in conjuntion with \LaTeX{} commands +% \Lcs{textbf}, \Lcs{textsl}, and even \Lcs{sc}, or \Lcs{rm} to give +% different series and shapes. +% +% \DescribeMacro{\textunirm}\DescribeMacro{\unirm} +% If you in the previous example intended to shift to +% \textunirm{medium upright universal} font you could instead have +% used \Lcs{textunirm}, since this command \emph{does not} preserve +% font shape, i.e., the shape is always changed to upright, regardless +% of the prevouis shape. So if you said +% \begin{verbatim} +% {\sl Hello \textunirm{world}} +% \end{verbatim} +% you would get +% \begin{quote} +% {\sl Hello \textunirm{world}} +% \end{quote} +% +% \DescribeMacro{\textunisl}\DescribeMacro{\unisl} +% \DescribeMacro{\textunisc}\DescribeMacro{\unisc} +% \DescribeMacro{\textunist}\DescribeMacro{\unist} +% \label{expl:cmds} +% Actually \Lcs{textunirm} and \Lcs{unirm} isn't the only commands +% that aggresively changes most of the font +% parameters. \Lcs{textunisl}, \Lcs{textunisc}, and \Lcs{textunist}, +% \emph{always} gives you \textunisl{medium slanted}, +% \textunisc{medium small caps}, and \textunist{medium strict} +% respecitivly no matter what the values of \Lcs{f@shape} was before. +% +% \DescribeMacro{\textunibf}\DescribeMacro{\unibf} +% \DescribeMacro{\textunibsl}\DescribeMacro{\unibsl} +% \DescribeMacro{\textunibsc}\DescribeMacro{\unibsc} +% \DescribeMacro{\textunibst}\DescribeMacro{\unibst} +% In the same category is \Lcs{textunibf}, \Lcs{textunibsl}, +% \Lcs{textunibsc}, and \Lcs{textunist} which always changes the font +% series to \textbf{bold}, along with change in shape (upright, +% slanted, small caps, and strict in that order). +% +% All of the `aggresive' commands, \emph{do not} however change the +% \emph{size} and \emph{baselineskip} of the font. This should be done +% by using \LaTeX{} commands such as \Lcs{small}, \Lcs{Large}, +% \Lcs{fontsize}\marg{size}\marg{lineskip}, +% etc. +% +% Notice that the `aggresive' commands always changes to the +% appropiate font series. That is, even if you gave the \texttt{bold} +% option to \textsf{uni}, \Lcs{textunirm} will still give you +% \textunirm{medium upright universal} font. This particular instance +% illustrates the use of the aggresive commands quite well I think. +% +% To summerize: The `aggresive' commands \emph{doesn't} preserve +% fammily, series and shapes, but \emph{does} preserve encoding, size, +% and baslineskip. +% +% \textbf{Warning:} The font shifting commands \Lcs{textuni...} and +% \Lcs{uni...} in this section is \emph{not} defined if you gave the +% \texttt{strict} option to the \textsf{uni} package. +% +% \DescribeMacro{\unifamily} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unifamily} to +% fasilitate easier and stronger font loading.} +% One can also use the rather primitive command \Lcs{unifamily} in +% conjunction with \Lcs{selectfont} as described in \ftnguide{}, to +% change the font family to \universal{} if absolute control is +% preferd. +% +% \Lcs{unifamily} is used by all the other font switching commands, so +% if you redefine it, or \Lcs{unifamilydefault}, you could get strange +% resault. +% +% \DescribeMacro{\unifamilydefault} +% This command normally expands to \texttt{uni}, which is the `family' +% name of the \universal{} package. If you redefine this command to be +% something else, e.g., \texttt{cmr}, \Lcs{unifamily} will load +% another font. +% +% \DescribeMacro{\uniseries} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{uniseries} to +% fasilitate easier and stronger font loading.} +% If the \texttt{bold} option to \textsf{uni} is used this command +% will select the default series of the \universal{} font, defined in +% \Lcs{uniseriesdefault}, which ofcourse defaults to \texttt{b}, i.e., +% bold series. if you redefine \Lcs{uniseriesdefault} to be +% \texttt{m}, then \Lcs{uniseries} will select medium series +% fonts. +% +% If \texttt{bold} option wasn't given, then this expands to nothing, +% as do \Lcs{uniseriesdefault}. +% +% This command is used by \Lcs{textuni} and \Lcs{uni}. +% +% \DescribeMacro{\unishape} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unishape} to +% fasilitate easier and stronger font loading.} +% If the \texttt{strict} option to \textsf{uni} is used this command +% will select the default shape of the \universal{} font, defined in +% \Lcs{unishapedefault}, which ofcourse defaults to \texttt{st}, i.e., +% strict shape. If you redefine \Lcs{unishapedefault} to be +% \texttt{n}, then \Lcs{uniseries} will select upright shaped fonts. +% +% If \texttt{strict} option wasn't given, then this expands to nothing, +% as do \Lcs{unishapedefault}. +% +% This command is used by \Lcs{textuni} and \Lcs{uni}. +% +% +% \DescribeMacro{\stshape} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{stshape} to make package +% conform to \LaTeXe{} better.} +% This command switches to \emph{strict} shape, i.e., all majuscules +% will be typeset as minuscles. This makes it possible in a simple way +% to typeset text in the way Herbert Bayer thought it should, as +% evident from the citation above. +% +% This command uses the command \Lcs{stdefault}, which defaults to +% \texttt{st}. If you redefine this to something alse, e.g., +% \texttt{sl} you will get a \textsl{slanted} font. +% +% This command is used by \Lcs{textunist}, \Lcs{textunibst}, +% \Lcs{unibst} and \Lcs{unist}, and is defined no matter waht options +% you gave to the \textsf{uni} package. +% +% \textbf{Warning:} Since \emph{strict} is a non--standard shape, this +% command should not be used outside the \universal{} font, since this +% may give you unexpected resaults. +% +% \subsubsection{Special Character Commands} +% +% For the individual commands that makes various special characters, +% please consult table~\ref{tab:characters} above. +% +% \subsubsection{Other Commands} +% +% \DescribeMacro{\k} +% The macro \Lcs{k} used in the \universal{} font gives the accent +% ogenek, that is a reversed cidelia accent. It takes one argument, +% which shuold be a single letter, under which it puts the accent. For +% example, you could say \Lcs{textuni\{}\Lcs{k\{a\}\}} and get +% \textuni{\k{a}}. +% +% \DescribeMacro{\DeclareUniChar} +% \Newestchanges{v2.0}{98/08/01}{Configuration of \textsf{uni} package +% provided via the commands \Lcs{DeclareUniChar} and +% \Lcs{DeclareUniCommand}.} +% Now you can configure the special character commands of the font, +% via the commands \Lcs{DeclareUniChar} and +% \Lcs{DeclareUniCommand}. The commands defined via these commands +% will only work in accordence with it's definition inside the +% \universal{} font, and if defined elsewhere according to it's +% definition there, else it will give an error message. +% +% \Lcs{DeclareUniChar} is used to define a command sequence +% representing a single character in the \universal{} font, much like +% \Lcs{DeclareTextSymbol}, or in \TeX{} \Lcs{chardef}, though the +% control sequence will produce an error message outside the +% \universal{} font, and properle unexpected resaults outside the +% \texttt{OT1} encoding\footnote{This should not be a problem.}. +% +% \Lcs{DeclareUniCommand} is used to define control sequences inside +% the \universal{} font, representing many characters or doing complex +% manuvers on characters and stuff. The optional argument to +% \Lcs{DeclareUniCommand} can be used to say how many arguments the +% control sequence should have, just like \Lcs{newcommand}. However, +% it is not possible to give a default first argument. +% +% The below defintion uses the \textsf{color} package to typeset a +% square, circle, and triangle in different colours\footnote{Since the +% documentation should be avaliable to all, I can not provide you with +% the outcome of this example, since it needs the \textsf{color} +% package wich may not be avaliable on all sites. I suggest you try +% it out, or something similar, if you can.}. +% \begin{verbatim} +% \DeclareUniCommand{\mybauforms}{% +% \lower.5ex\hbox{\color{blue}\bautriangle}% +% \kern-.5em\raise.5ex\hbox{\color{read}\baucircle}% +% \kern-.5em\lower.5ex\hbox{\color{yellow}\bausquare}} +% \end{verbatim} +% Yet another example, using arguments could be +% \begin{verbatim} +% \DeclareUniCommand{\mybaulogo}[1]{\bauhead\ {\Large #1}} +% \end{verbatim} +% so you could say \verb+\mybaulogo{Christian Holm}+ and get: +% \begin{quote} +% {\uni \bauhead {\Large Christian Holm}} +% \end{quote} +% and I bet you can come up with some even more useful and complex +% commands. +% +% The syntax of \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand} is +% \begin{quote} +% \Lcs{DeclareUniChar}\marg{cmd}\marg{slot}\newline +% \Lcs{DeclareUniCommand}\marg{cmd}\oarg{arg}\marg{definition} +% \end{quote} +% where \meta{cmd} is the user command defined, \meta{slot} is the +% number of the character in the font, \meta{arg} is the number of +% arguments and \meta{definition} is what \meta{cmd} does. +% +% \subsubsection{File Names for the \LaTeX{} files} +% +% All the \LaTeX{} files contain the three letters \texttt{uni}, to +% reflect the connectedness of the files. The font definition files +% all start with the letter code appropiate for the encodeing. +% +% To follow the scheme of the \MF{} files, it would be appropiate to +% place all \LaTeX{} files in\newline +% \indent\meta{tex--base--dir}\footnote{On \textsf{Unix}--like systems +% \meta{tex--base--dir} is usually something like +% \texttt{/usr/local/lib/texmf/}, and on \textsf{MSDOS}--like systems +% something like \texttt{C:\Lcs{}TEX}\Lcs{} +% .}\texttt{/tex/latex/universa/} +% +% \subsection{The Major differences between version 1.0 and 2.0} +% +% \paragraph{First of:} \emph{a lot} of bugs and errors has been +% corrected. In version~1.0, I had made the (stupid) mistake of +% calling the macro \textuni{mode\_setup} before I defined the +% unsharped units. Ofcourse a quick look in the \MFbook{} showed be +% just how stupid this is. This made the font very vunerable to mode +% specifications, which ofcourse isn't the idea. +% +% \paragraph{Secondly:} I chose a completly new approach to the +% character programs, which resaultet in \texttt{unibase.mf}. The idea +% is to define a few macros, and then utilize those in the character +% programs, so that these programs can be kept simple, efficient, and +% intuitive. +% +% A quick look at \texttt{unibase.mf} will also reveal that I chose a +% new way of adjusting the characters. This means that the macros +% \texttt{bauhaus...} present in version~1.0 no longer is needed, and +% since they only tended to ubscure things rather then simplify them, +% I went back to the plain \MF{} macro \texttt{beginchar}, which is +% much stronger. +% +% All in all, \texttt{unibase.mf} provides a much stronger and uniform +% frame work for character design, then did the old +% \texttt{universal.mf}. +% +% \paragraph{Thirdly:} The file names have been keept inside +% \textsc{msdos} conventions, that is first name of maximum 8 +% charcaters, and last name of maximum 3 characters. This does mean, +% however, that some file names are not intutive, but I have tried to +% make them as much as I could. +% +% Also, every file associated with this font, execpt the font +% definition files (\texttt{*uni.fd}), and font driver files +% (\texttt{ful*.mf}) begins with the three letters \texttt{uni}, to +% emphasize the connection. +% +% \paragraph{Fouthly:} Some new font shapes are avaliable, as +% explained above. I found out, during the design of the characters, +% that new the base file \texttt{unibase.mf} kept showing new +% potentiality, and the extension of the font to include more shapes +% was very easy inside the frame of this base, so I thought ``What the +% heck!'' +% +% \paragraph{Fifthly:} Some of the \textuni{bauhaus} symbols avaliable +% in version~1.0, has been taken out, and some new, more general +% characters have been added. Most of the absent symbols where not +% really of general use, so I decided to take them out, since I was +% never really satisfied with those anyway. This also made the font +% contain exactly 128 characters, just like a normal Computer Modern +% Roman font. +% +% \paragraph{Sixthly:} I improved the \LaTeX{} and \NFSS{} support +% considerably. The changes are legion, but let me sum up the most +% important here. +% \begin{enumerate} +% \item Stronger font selection commands. +% \item Command names that should be more intuitive. +% \item Preperations for \texttt{T1} encoding. +% \item Conformation to \LaTeXe{} style, and therefore a better +% chance to conform with the future \LaTeX3 format. +% \item More and better options. +% \end{enumerate} +% +% \StopEventually{\AtEndDocument{\PrintIndex\PrintChanges}} +% +%\iffalse +%<*package> +%\fi +% \section{\LaTeX\ Support Files} +% +% \subsection{The style file --- \texttt{uni.sty}} +% \file{uni.sty} +% +% In version~2.0, the commands in this file has been redefined using +% the macros recommended in \ftnguide{} and \clsguide{}. This should +% make the commands and macros more portable, and secure. Further, it +% should make it upward--compatiable with future releases of other +% packages and in the end \LaTeX3. +% +% \subsubsection{Intilalizing} +% +% First we need to identify the package, its version and release date, +% etc. +% +% \begin{macrocode} +\ProvidesPackage{uni}[\unifiledate\space\unifileversion\space universal + package.] +% \end{macrocode} +% +% \begin{macro}{\if@uni} +% \begin{macro}{\@unifalse} +% \begin{macro}{\@unitrue} +% \begin{macro}{\if@strict} +% \begin{macro}{\@strictfalse} +% \begin{macro}{\@stricttrue} +% \begin{macro}{\ifdef@ult} +% \begin{macro}{\def@ultfalse} +% \begin{macro}{\def@ulttrue} +% \begin{macro}{\ifm@dium} +% \begin{macro}{\m@diumfalse} +% \begin{macro}{\m@diumtrue} +% Then we setup some new \Lcs{if} commands, to help in different +% sitations, depending on options passed to the package etc. +% \begin{macrocode} +\newif\if@uni\@unifalse +\newif\ifstri@t\stri@tfalse +\newif\ifdef@ult\def@ultfalse +\newif\ifm@dium\m@diumfalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Options} +% +% We define some options that can be passed to the package. +% Option \texttt{strict} is intended to make it possible to do +% \emph{strict} Herbert Bayer typesetting, that is only in +% minuscles. Option \texttt{default} will make the \emph{default} font +% \universal{} of the entire document, while option +% \texttt{medium} and \texttt{bold} decides wether the default font +% used by \Lcs{textuni} is normal or bold series. Finally option +% \texttt{medium} is declared default. +% \begin{macrocode} +\DeclareOption{strict}{\stri@ttrue} +\DeclareOption{default}{\def@ulttrue} +\DeclareOption{medium}{\m@diumtrue} +\DeclareOption{bold}{\m@diumfalse} +\ExecuteOptions{medium} +\ProcessOptions\relax + +% \end{macrocode} +% +% \subsubsection{Special Characters} +% +% \begin{macro}{\uni@init} +% \begin{macro}{\DeclareUniChar} +% \Newestchanges{v2.1}{2018/08/26}{Prevent expansion of as-of-yet not +% defined arguments. Thanks to Scott Pakin.} +% \changes{v2.0}{98/08/01}{Added for faster and more stable +% loading of special charactes.} +% \begin{macro}{\DeclareUniCommand} +% \changes{v2.0}{98/08/01}{Added for faster and more stable +% decleration of \universal{} commands.} +% \begin{macro}{\Declare@Uni} +% \begin{macro}{\DeclareUni@xarg} +% \begin{macro}{\DeclareUni@narg} +% \begin{macro}{\UniError} +% To facilitate the special character positions of the \universal{} +% font, we define the internal commands \Lcs{uni@init}, and the user +% commands \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand}. +% +% \Lcs{DeclareUniChar} and \Lcs{DeclareUniCommand} is very much like +% the \LaTeX{} commands \Lcs{DeclareTextSymbol} and +% \Lcs{DeclareTextCommand}, execpt we have to take into account, that +% the commands may very well be defined in \texttt{ot1enc.def} or the +% like. Since some of the characters provided with this font, is +% usually part of an 8 bit font, I can't just use the character +% numbers straight of (this is a 7 bit font), and I have some very +% non--standard characters as well. +% +% Though the two commands differ a bit, the main mechanism is the +% same, so I will explain them together, and note the +% differences\footnote{The syntax of the macroes are explanied on +% page~\pageref{expl:cmds}.} . +% \begin{enumerate} +% \item When either of the commands is used, we first call the macro +% \Lcs{Declare@uni}, which sets up 2 or 3 commands. +% \item Inside \Lcs{Declare@Uni}, we define \Lcs{temp@a} to be +% \Lcs{uni@}\meta{cmd-name}, where \meta{cmd-name} is \meta{cmd} +% stripped of the escape character (\Lcs{}). +% \item Then we check wether \Lcs{cmd} is defined. +% \begin{itemize} +% \item If \meta{cmd} \emph{isn't} defined, then we define +% \Lcs{temp@c} to give \Lcs{uni@}\meta{cmd-name} (which isn't +% defined yet) inside the \universal{} font, otherwise an error +% message (\Lcs{UniError}). +% \item If \meta{cmd} \emph{is} defined, we define \Lcs{temp@b} to +% be \Lcs{no@uni@}\meta{cmd-name}, \Lcs{temp@c} to give +% \Lcs{uni@}\meta{cmd-name} inside the \universal{} font, and +% \Lcs{no@uni@}\meta{cmd-name} (which isn't defined yet) +% elsewhere. Then we define \Lcs{no@uni@}\meta{cmd-name} to be +% what \meta{cmd} currently is. +% \end{itemize} +% This finishes \Lcs{Declare@Uni} off. +% \item The next step depends a bit on which of the macros that is +% utiliezed. What is coomon is that \Lcs{uni@}\meta{cmd-name} (hold +% in \Lcs{temp@a}) is defined to be the last argument of the command. +% \begin{itemize} +% \item In \Lcs{DeclareUniChar}, we define \Lcs{uni@}\meta{cmd-name} +% via the \TeX{} command \Lcs{chardef} to be \meta{slot}, which +% should be a number (decimal, octal, or hexal) between 0 and +% 127. Using the \TeX{} primitive will make \LaTeX{} think of +% \meta{cmd} as a single character. +% \item If \Lcs{DeclareUniCommand} was given an optional argument, +% we use the command \Lcs{DeclareUni@xarg} to define +% \Lcs{uni@}\meta{cmd-name} --- which uses \Lcs{newcommand} with +% \emph{one} optinal argument --- to be +% \meta{definition}. Otherwise we use \Lcs{DeclareUni@narg} --- +% which uses \Lcs{newcommand} with \emph{no} optinal arguments --- +% to do the trick. +% Using the \LaTeX{} complex \Lcs{newcommand}, makes \meta{cmd} a +% strong command. +% \end{itemize} +% \item Finally we define \meta{cmd} to be \Lcs{temp@d}, which was the +% conditional command defined in step 2. +% \end{enumerate} +% +% Notice the use of \Lcs{aftergroup}. This means that \meta{cmd-name} +% shouldn't be too long, i.e., $>300$ characters, which isn't a real +% limitation, but now I said it. This macro, together with the group +% in \Lcs{temp@c} is what made it possible to give arguments to +% \meta{cmd} defined by \Lcs{DeclareUniCommand}. +% +% This way of doing things has a number of benefiets. 1) First of I +% makes it very simple to redefine the behaviour of the \universal{} +% speciffic character commands. All you have to do is to use +% \Lcs{DeclareUniChar} or \Lcs{DeclareUniChar} in your preamble (and +% \emph{only} there). 2) Since \TeX{} are faster at evaluating +% \Lcs{if...}'s, switching to \universal{} commands should take a +% minimum amount of time. 3) From a portability point of view, this +% way of shifting meanings of commands such as \Lcs{textquotedblleft}, +% according to context, doesn't screw up older documents where the +% \textsf{uni} package is added to. +% +% There are some disadvantage. 1) Most noticably there is \emph{no} +% conformation to \emph{any} existing encoding, which however is a +% problem of the in the font, not the \textsf{uni} package. 2) +% The heavy use of \Lcs{def}, \Lcs{edef}, and \Lcs{let}, is not +% exactly \LaTeX3 policy, but is needed here. 3) The definition of the +% commands may slow \TeX{} down a bit, but should be bearable. +% \begin{macrocode} +\newcommand{\uni@init}{\@unitrue} +\DeclareRobustCommand{\Declare@Uni}[1]{% + \edef\temp@{\expandafter\@gobble\string#1} + \edef\temp@a{\csname uni@\temp@\endcsname} + \@ifundefined{\temp@}{% + \edef\temp@c{{% + \noexpand\if@uni\noexpand\aftergroup\temp@a\noexpand% + \else\noexpand\UniError{\noexpand#1}\noexpand\fi}}}{% + \edef\temp@b{\csname no@uni@\temp@\endcsname} + \edef\temp@c{{% + \noexpand\if@uni\noexpand\aftergroup\temp@a\noexpand% + \else\noexpand\aftergroup\temp@b\noexpand\fi}} + \expandafter\let\temp@b#1}} +\DeclareRobustCommand{\DeclareUniChar}[2]{% + \Declare@Uni{#1} + \expandafter\chardef\temp@a=#2 + \let#1\temp@c} +\def\DeclareUniCommand#1{% + \@ifnextchar[{\DeclareUni@xarg#1}{\DeclareUni@narg#1}} +\def\DeclareUni@xarg#1[#2]#3{% + \Declare@Uni{#1} + \expandafter\DeclareRobustCommand\temp@a[#2]{#3} + \let#1\temp@c} +\def\DeclareUni@narg#1#2{% + \Declare@Uni{#1} + \expandafter\DeclareRobustCommand\temp@a{#2} + \let#1\temp@c} +\@onlypreamble\DeclareUniChar\relax +\@onlypreamble\DeclareUniCommand\relax +\DeclareRobustCommand{\UniError}[1]{% + \PackageError{uni}{% + Command \string#1 not defined outside universal font.}{% + Correct your source file, so that \string#1 doesn't appear^^J% + ouside of universal font, then run LaTeX again.^^J% + Prepare your self for some gastly output.}} +% \expandafter\show\csname no@uni@\temp@\endcsname +% \expandafter\show\csname uni@\temp@\endcsname +% \expandafter\show\csname \temp@\endcsname + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bausquare} +% \Newestchanges{v2.0}{98/08/01}{\universal{} specific +% characters declared by seperate macro.} +% \begin{macro}{\baucircle} +% \begin{macro}{\bautriangle} +% \begin{macro}{\bauhead} +% \begin{macro}{\bauforms} +% \begin{macro}{\dh} +% \begin{macro}{\ng} +% \begin{macro}{\th} +% \begin{macro}{\varQ} +% \begin{macro}{\NG} +% \begin{macro}{\TH} +% \begin{macro}{\textogonek} +% \begin{macro}{\textbraceleft} +% \begin{macro}{\textbraceright} +% \begin{macro}{\textsection} +% \begin{macro}{\textbar} +% \begin{macro}{\guilsinglleft} +% \begin{macro}{\guilsinglright} +% \begin{macro}{\textquotedblleft} +% \begin{macro}{\textquotedblright} +% \begin{macro}{\quotesinglbase} +% \begin{macro}{\quotedblbase} +% \begin{macro}{\guillemoleft} +% \begin{macro}{\guillemoright} +% \begin{macro}{\k} +% \begin{macro}{\DH} +% \begin{macro}{\DJ} +% \begin{macro}{\dj} +% \begin{macro}{\textunderscore} +% This command takes care of commands for non--standard placement, and +% symbols in the \universal{} font, while using standard \LaTeXe{} +% encodings, such as \texttt{OT1}. +% +% For instance, the symbols \textunibf{\}}, \textunibf{\{} isn't +% present in Computer Modern fonts, but is accesiable through the +% command \Lcs{}\texttt{\{}, and \Lcs{}\texttt{\}} in the \universal{} +% font. On the other hand \char"00{} isn't present in this font, but +% is replaced by \textunibf{\char"00}. +% +% Some of the commands avaliable are well--known to the \texttt{T1} +% encodeing, and are provided with the same commmand names as in that +% encoding. +% +% The decleration of these commands use my (slick) macros +% \Lcs{DcelareUniChar} and \Lcs{DcelareUniCommand} --- very neat I +% think. +% +% \begin{macrocode} +\DeclareUniChar{\bausquare}{"00} +\DeclareUniChar{\baucircle}{"01} +\DeclareUniChar{\bautriangle}{"02} +\DeclareUniChar{\bauhead}{"03} +\DeclareUniChar{\bauforms}{"04} +\DeclareUniChar{\dh}{"05} +\DeclareUniChar{\ng}{"06} +\DeclareUniChar{\th}{"07} +\DeclareUniChar{\varQ}{"08} +\DeclareUniChar{\NG}{"09} +\DeclareUniChar{\TH}{"0A} +\DeclareUniChar{\textogonek}{"0B} +\DeclareUniChar{\textbraceleft}{"0C} +\DeclareUniChar{\textbraceright}{"0D} +\DeclareUniChar{\textsection}{"0E} +\DeclareUniChar{\textbar}{"0F} +\DeclareUniChar{\guilsinglleft}{"22} +\DeclareUniChar{\guilsinglright}{"5C} +\DeclareUniChar{\quotesinglbase}{"2C} +\DeclareUniCommand{\quotedblbase}{\char"2C\kern-.3em\char"2C} +\DeclareUniCommand{\textquotedblleft}{``} +\DeclareUniCommand{\textquotedblright}{''} +\DeclareUniCommand{\guillemoleft}{\char"22\char"22} +\DeclareUniCommand{\guillemoright}{\char"5C\char"5C} +\DeclareUniCommand{\DH}{\raise.5ex\hbox{\char"2D}\kern-.5em D} +\DeclareUniCommand{\DJ}{\raise.5ex\hbox{\char"2D}\kern-.5em D} +\DeclareUniCommand{\dj}{\raise.75ex\hbox{\char"2D}\kern-1em d} +\DeclareUniCommand{\textunderscore}{\lower.5ex\hbox{\char"7B}} +\DeclareUniCommand{\k}[1]{% + \leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% + \else{\ooalign{\unhbox\z@\crcr\hidewidth\char11\hidewidth}}\fi} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Font Selection} +% +% \begin{macro}{\unifamily} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unifamily} to +% fasilitate easier and stronger font loading.} +% The real command. This switches to \universal{} font, and can +% be used by authors in conjunction with \LaTeXe{} primitive +% \Lcs{selectfont}. \Lcs{unifamily} is used below in \Lcs{textuni...}, +% and \Lcs{uni...}. +% +% \begin{macro}{\unifamilydefault} +% \changes{v2.0}{98/08/01}{Defined to make package conform to +% \LaTeXe{} better.} +% Here \Lcs{unifamilydefault} is by default defined to be +% \texttt{uni}, but could ofcourse expand to something +% different. However, the expnasion should be a font family (like +% \texttt{cmr}) or the like. +% +% \begin{macrocode} +\DeclareRobustCommand\unifamily{% + \not@math@alphabet\unifamily\relax% + \fontfamily\unifamilydefault\selectfont} +\newcommand{\unifamilydefault}{uni} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\uniseries} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{uniseries} to +% fasilitate easier and stronger font loading.} +% If the \texttt{bold} option is used with the \textsf{uni} package, +% then this command switches to whatever series is defined via +% \Lcs{uniseriesdefault} (default is \textbf{bold} series), otherwise +% it does nothing. Since this command is used in \Lcs{textuni} and +% \Lcs{uni}, this way will not allow anyother series if \texttt{bold} +% option is given, expect \textbf{bold}. However, if \texttt{bold} +% isn't given, then \emph{any} series is possible. +% +% \begin{macro}{\uniseriesdefault} +% \changes{v2.0}{98/08/01}{Defined to make package conform to +% \LaTeXe{} better.} +% Here \Lcs{uniseriesdefault} is defined to be \texttt{b} +% (\textbf{medium}) if the \texttt{bold} option \emph{was} given to +% \textsf{uni} package. Otherwise it expans to nothing +% (\Lcs{relax}). This macro is used by \Lcs{uniseries}. +% \begin{macrocode} +\ifm@dium + \let\uniseries\relax + \let\uniseriesdefault\relax +\else + \DeclareRobustCommand\uniseries{% + \not@math@alphabet\uniseries\relax% + \fontseries\uniseriesdefault\selectfont} + \newcommand{\uniseriesdefault}{b} +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\unishape} +% \Newestchanges{v2.0}{98/08/01}{Defined \Lcs{unishape} to +% fasilitate easier and stronger font loading.} +% If the \texttt{strict} option is used with the \textsf{uni} package, +% then this command switches to whatever shape is defined via +% \Lcs{unishapedefault} (default is \emph{strict} shape), otherwise +% it does nothing. Since this command is used in \Lcs{textuni} and +% \Lcs{uni}, this way will not allow anyother shape if \texttt{strict} +% option is given, expect \emph{strict}. However, if \texttt{strict} +% isn't given, then \emph{any} series is possible. +% +% \begin{macro}{\unishapedefault} +% \changes{v2.0}{98/08/01}{Defined to make package conform to +% \LaTeXe{} better.} +% Here \Lcs{unishapedefault} is defined to be \texttt{st} +% (\emph{strict}) if the \texttt{strict} option \emph{was} given to +% \textsf{uni} package. Otherwise it expans to nothing +% (\Lcs{relax}). This macro is used by \Lcs{unishape}. +% \begin{macrocode} +\ifstri@t + \DeclareRobustCommand\unishape{% + \not@math@alphabet\unishape\relax% + \fontseries\unishapedefault\selectfont} + \newcommand{\unishapedefault}{st} +\else + \let\unishape\relax + \let\unishapedefault\relax +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\stshape} +% \changes{v2.0}{98/08/01}{Defined \Lcs{stshape} to make package +% conform to \LaTeXe{} better.} +% This command selects the shape holded by \Lcs{stdefault} (defaults +% to \texttt{st} --- strict) in any family or series. This is used by +% commands \Lcs{textunist}, \Lcs{textunibst}, \Lcs{unist}, and +% \Lcs{unibst}. +% +% \begin{macro}{\stdefault} +% \changes{v2.0}{98/08/01}{Defined to make package conform to +% \LaTeXe{} better.} +% The shape selected by \Lcs{stshape}. +% \begin{macrocode} +\DeclareRobustCommand\stshape{% + \not@math@alphabet\stshape\relax% + \fontshape\stdefault\selectfont} +\newcommand{\stdefault}{st} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{Local Font Selection} +% \begin{macro}{\textuni} +% \Newestchanges{v2.0}{98/08/01}{\Lcs{textbayer} changed to +% \Lcs{textuni}, and defined using \LaTeXe{} scheme.} +% \begin{macro}{\textunirm} +% \begin{macro}{\textunibf} +% \begin{macro}{\textunisl} +% \begin{macro}{\textunisc} +% \begin{macro}{\textunibsl} +% \begin{macro}{\textunibsc} +% These are the macros that switches to \universal{} font, +% locally, i.e., for a few words, in various series and shapes. The +% names are pretty selfexplanetory, I think. These macros will +% \emph{always} change the font series and shape accroding to it's +% definiton, nothing more, and nothing less, exepct \Lcs{textuni}, +% which only changes the cuurent family to \texttt{uni}. Notice it +% simply uses the \Lcs{unifamily} command to do the trick. +% +% The second argument to \Lcs{DeclareTextFontCommand} should not +% normally contain commands that typeset, or commands not relevant to +% the selection of fonts, but to make up for the non--default +% characeters and character placements, we \emph{do} include +% \Lcs{uni@init} in the argument. +% +% Notice that only \Lcs{textuni} is defined if option \texttt{strict} +% was given to \textsf{uni} package. +% \begin{macrocode} +\DeclareTextFontCommand{\textuni}{% + \uni@init\unifamily\uniseries\unishape} +\ifstri@t +\else + \DeclareTextFontCommand{\textunirm}{% + \uni@init\unifamily\mdseries\upshape} + \DeclareTextFontCommand{\textunibf}{% + \uni@init\unifamily\bfseries\upshape} + \DeclareTextFontCommand{\textunisl}{% + \uni@init\unifamily\mdseries\slshape} + \DeclareTextFontCommand{\textunisc}{% + \uni@init\unifamily\mdseries\scshape} + \DeclareTextFontCommand{\textunist}{% + \uni@init\unifamily\mdseries\stshape} + \DeclareTextFontCommand{\textunibsl}{% + \uni@init\unifamily\bfseries\slshape} + \DeclareTextFontCommand{\textunibsc}{% + \uni@init\unifamily\bfseries\scshape} + \DeclareTextFontCommand{\textunibst}{% + \uni@init\unifamily\bfseries\stshape} +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{Global Font Selection} +% \begin{macro}{\uni} +% \Newestchanges{v2.0}{98/08/01}{\Lcs{bayer} changed to \Lcs{uni}} +% \begin{macro}{\unibf} +% \begin{macro}{\unibf} +% \begin{macro}{\unisl} +% \begin{macro}{\unisc} +% \begin{macro}{\unibsl} +% \begin{macro}{\unibsc} +% These macros works as \Lcs{textuni...} above, execpt the take effect +% from the point used, to the end of the current group. Again font +% selection is \emph{exactly} as given in the command name, execpt for +% \Lcs{uni} which only changes the family. +% +% Notice that only \Lcs{uni} is defined if option \texttt{strict} +% was given to \textsf{uni} package. +% \begin{macrocode} +\DeclareOldFontCommand{\uni}{% + \uni@init\unifamily\uniseries\unishape}{} +\ifstri@t +\else + \DeclareOldFontCommand{\unirm}{% + \uni@init\unifamily\mdseries\upshape}{} + \DeclareOldFontCommand{\unibf}{% + \uni@init\unifamily\bfseries\upshape}{} + \DeclareOldFontCommand{\unisl}{% + \uni@init\unifamily\mdseries\slshape}{} + \DeclareOldFontCommand{\unisc}{% + \uni@init\unifamily\mdseries\scshape}{} + \DeclareOldFontCommand{\unist}{% + \uni@init\unifamily\mdseries\stshape}{} + \DeclareOldFontCommand{\unibsl}{% + \uni@init\unifamily\bfseries\slshape}{} + \DeclareOldFontCommand{\unibsc}{% + \uni@init\unifamily\bfseries\scshape}{} + \DeclareOldFontCommand{\unibst}{% + \uni@init\unifamily\bfseries\stshape}{} +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \paragraph{\texttt{default} Option Font} +% +% \begin{macro}{\ifdef@ult} +% \begin{macro}{\def@ulttrue} +% \begin{macro}{\def@ultfalse} +% \begin{macro}{\ifm@dium} +% \begin{macro}{\m@diumtrue} +% \begin{macro}{\m@diumfalse} +% Now if you gave the \texttt{default} option to the package, +% \Lcs{ifdef@ult} evaluates to true, and so we setup the default font +% to be \universal{}, in the medium or bold version, depending +% on wether you gave the \texttt{medium} option or not. +% \begin{macrocode} +\ifdef@ult + \renewcommand{\familydefault}{uni} + \ifm@dium\renewcommand{\seriesdefault}{m} + \else\renewcommand{\seriesdefault}{b}\fi + \renewcommand{\itdefault}{sl} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cmrfamily} +% \begin{macro}{\cmrdefault} +% \begin{macro}{\textcmr} +% \begin{macro}{\cmr} +% We define \Lcs{cmrfamily} and \Lcs{cmrdefault} to change back to +% Computer Modern Roman font, if so wanted. The macros \Lcs{textcmr} +% and \Lcs{cmr} are the logical extensions of \Lcs{cmrfamily}. +% \begin{macrocode} + \DeclareRobustCommand\cmrfamily{% + \not@math@alphabet\cmrfamily\relax% + \fontencoding\cmrenc\fontfamily\cmrdefault\selectfont} + \newcommand{\cmrdefault}{cmr} + \newcommand{\cmrenc}{OT1} + \DeclareTextFontCommand{\textcmr}{\cmrfamily} + \DeclareOldFontCommand{\cmr}{\cmrfamily}{} +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +%\iffalse +% +%\fi +% \subsection{The Font Definition Files --- \texttt{*uni.fd}} +% +% These files is needed in the New Font Selection Scheme, used by +% \LaTeXe{}, but really isn't nessecary for pure \TeX{} or \LaTeX2.09 +% users, but since those are treathned races, I did put in the extra +% effort and made the files. +% +% What they really do, is to speciffy what font driver file should be +% loaded when the user swichtes font. Notice, alot of the font shapes +% etc.\ avaliable in the Computer Modern Roman scheme isn't avaliable +% in the \universal{} font, so we substitute with whatever is +% closest, something from the \universal{} or Computer Modern +% Roman scheme. +% +% The reason why the file names may look a bit wierd, is to make the +% font conform to the standard set by \texttt{fontname} used by +% \texttt{kpathsea} in most \TeX{}, \LaTeX{}, and \MF{} systems. +% +% \paragraph*{Math Encoding}\file{oml.fd} +% First comes the the font definition file for \emph{math}, but since +% no math characters is defined in the \universal{} font, we +% substitute with the relevant fonts from Computer Modern Roman. +%\iffalse +%<*oml> +%\fi +% \begin{macrocode} +\ProvidesFile{omluni.fd} + [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions] +\DeclareFontFamily{OML}{uni}{\skewchar\font127 } +\DeclareFontShape{OML}{uni}{m}{n}{<-> ssub * cmm/m/it}{} +\DeclareFontShape{OML}{uni}{m}{it}{<-> ssub * cmm/m/it}{} +\DeclareFontShape{OML}{uni}{m}{sl}{<-> ssub * cmm/m/it}{} +\DeclareFontShape{OML}{uni}{m}{sc}{<-> ssub * cmm/m/it}{} +\DeclareFontShape{OML}{uni}{bx}{n}{<-> ssub * cmm/b/it}{} +\DeclareFontShape{OML}{uni}{bx}{it}{<-> ssub * cmm/b/it}{} +\DeclareFontShape{OML}{uni}{bx}{sl}{<-> ssub * cmm/b/it}{} +\DeclareFontShape{OML}{uni}{bx}{sc}{<-> ssub * cmm/b/it}{} + +% \end{macrocode} +%\iffalse +% +%\fi +% +% \paragraph*{Symbols Encoding}\file{omsuni.fd} +% Next is the definitions for \emph{symbols} fonts, but as above, +% there is no seperate symbol font defined for the \universal{} +% font, so we substitute for default. +%\iffalse +%<*oms> +%\fi +% \begin{macrocode} +\ProvidesFile{omsuni.fd} + [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions] +\DeclareFontFamily{OMS}{uni}{\skewchar\font48 } +\DeclareFontShape{OMS}{uni}{m}{n}{<-> ssub * cmsy/m/n}{} +\DeclareFontShape{OMS}{uni}{m}{it}{<-> ssub * cmsy/m/n}{} +\DeclareFontShape{OMS}{uni}{m}{sl}{<-> ssub * cmsy/m/n}{} +\DeclareFontShape{OMS}{uni}{m}{sc}{<-> ssub * cmsy/m/n}{} +\DeclareFontShape{OMS}{uni}{bx}{n}{<-> ssub * cmsy/b/n}{} +\DeclareFontShape{OMS}{uni}{bx}{it}{<-> ssub * cmsy/b/n}{} +\DeclareFontShape{OMS}{uni}{bx}{sl}{<-> ssub * cmsy/b/n}{} +\DeclareFontShape{OMS}{uni}{bx}{sc}{<-> ssub * cmsy/b/n}{} + +% \end{macrocode} +%\iffalse +% +%\fi +% +% \paragraph*{Normal Encoding}\file{ot1uni.fd} +% Now the definitions for the normal font. This \emph{is} ofcourse +% defined, anything else would be ludicruis. It is very straight +% forward most of the way. However, notice the substitutions at the +% end of the file. +% +%\iffalse +%<*ot1> +%\fi +% \begin{macrocode} +\ProvidesFile{ot1uni.fd}% + [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions] +\DeclareFontFamily{OT1}{uni}{\hyphenchar\font45 } + +% \end{macrocode} +% Next comes the specifications of what to load in \textunirm{normal +% upright shape} +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{m}{n}{ + <5><6><7><8>fulmr8 + <9>fulmr9 + <10><10.95>fulmr10 + <12><14.4>fulmr12 + <17.28><20.74><24.88>fulmr17 + }{} + +% \end{macrocode} +% Next comes the specifications of what to load in \textunisl{normal +% slanted shape} +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{m}{sl}{ + <5><6><7><8>fulmo8 + <9>fulmo9 + <10><10.95>fulmo10 + <12><14.4>fulmo12 + <17.28><20.74><24.88>fulmo17 + }{} + +% \end{macrocode} +% Now for \textunisc{small caps medium} definitions. +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{m}{sc}{ + <5><6><7><8>fulmc8 + <9>fulmc9 + <10><10.95>fulmc10 + <12><14.4>fulmc12 + <17.28><20.74><24.88>fulmc17 + }{} + +% \end{macrocode} +% Now for \textunist{strict medium} definitions. +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{m}{st}{ + <5><6><7><8>fulmst8 + <9>fulmst9 + <10><10.95>fulmst10 + <12><14.4>fulmst12 + <17.28><20.74><24.88>fulmst17 + }{} + +% \end{macrocode} +% Next comes the specifications of what to load in \textunibf{bold +% face upright shape} +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{b}{n}{ + <5><6><7><8>fulbr8 + <9>fulbr9 + <10><10.95>fulbr10 + <12><14.4>fulbr12 + <17.28><20.74><24.88>fulbr17 + }{} + +% \end{macrocode} +% Next comes the specifications of what to load in +% \textunibsl{bold face slanted shape} +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{b}{sl}{ + <5><6><7><8>fulbo8 + <9>fulbo9 + <10><10.95>fulbo10 + <12><14.4>fulbo12 + <17.28><20.74><24.88>fulbo17 + }{} + +% \end{macrocode} +% And \textunibsc{small caps bold face} definitions. +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{b}{sc}{ + <5><6><7><8>fulbc8 + <9>fulbc9 + <10><10.95>fulbc10 + <12><14.4>fulbc12 + <17.28><20.74><24.88>fulbc17 + }{} + +% \end{macrocode} +% And \textunibst{strict bold face} definitions. +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{b}{st}{ + <5><6><7><8>fulbst8 + <9>fulbst9 + <10><10.95>fulbst10 + <12><14.4>fulbst12 + <17.28><20.74><24.88>fulbst17 + }{} + +% \end{macrocode} +% +% Now for the substitutions. This is straight forward, that +% is, upright slanted is substituted by upright; bold face condensed, +% and bold face extra is substituted by boldface; and italic by +% slanted\footnote{As mentioned earlier, one of the characteristics +% of this dont, is that it has no serifs, so it would be strange +% to include italics in this font.}. +% \begin{macrocode} +\DeclareFontShape{OT1}{uni}{m}{it}{<->ssub*uni/m/sl}{} +\DeclareFontShape{OT1}{uni}{m}{ui}{<->ssub*uni/m/n}{} +\DeclareFontShape{OT1}{uni}{b}{it}{<->ssub*uni/b/sl}{} +\DeclareFontShape{OT1}{uni}{bx}{n}{<->ssub*uni/b/n}{} +\DeclareFontShape{OT1}{uni}{bx}{sl}{<->ssub*uni/b/sl}{} +\DeclareFontShape{OT1}{uni}{bx}{sc}{<->ssub*uni/b/sc}{} +\DeclareFontShape{OT1}{uni}{bx}{st}{<->ssub*uni/b/st}{} +\DeclareFontShape{OT1}{uni}{bx}{it}{<->ssub*uni/b/sl}{} +\DeclareFontShape{OT1}{uni}{bc}{ui}{<->ssub*uni/b/n}{} +\DeclareFontShape{OT1}{uni}{sbc}{n}{<->ssub*uni/b/n}{} + +% \end{macrocode} +%\iffalse +% +%\fi +% +% \paragraph*{T1 encoding}\file{t1uni.fd} +% Since the T1 encoding relies on the font scheme of \texttt{exbase} +% (EC fonts), and \texttt{dxbase} (DC fonts), by J\"org Knappen and +% Nobert Schwartz, which is a whole new way of making fonts, that +% requires some special messaures that I couldn't incorporate into the +% \universal{} font without a whole lot of work, I chose not to +% make support for the T1 scheme. Therefore this file issues a warning +% and then exists the whole \LaTeX{} run. This may seem a bit drastic, +% but it ensures that you don't get screwed up resuats. +%\iffalse +%<*t1> +%\fi +% \begin{macrocode} +\ProvidesFile{t1uni.fd} + [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions] +\typeout{WARNING: universal font not avaliable in t1 definition.} +\typeout{WARNING: exiting, correct your source.} +\stop + +% \end{macrocode} +%\iffalse +% +%\fi +% +% \paragraph*{U Encoding}\file{uuni.fd} +% This is similar to the normal encoding above, execpt encoding is U. +%\iffalse +%<*u> +%\fi +% \begin{macrocode} +\ProvidesFile{uuni.fd} + [\unifiledate\space\unifileversion\space Non Standard LaTeX font definitions] +\DeclareFontFamiliy{U}{uni}{\hyphenchar\font45} +\DeclareFontShape{U}{uni}{m}{n}{ + <5><6><7><8>fulmr8 + <9>fulmr9 + <10><10.95>fulmr10 + <12><14.4>fulmr12 + <17.28><20.74><24.88>fulmr17 + }{} +\DeclareFontShape{U}{uni}{m}{sl}{ + <5><6><7><8>fulmo8 + <9>fulmo9 + <10><10.95>fulmo10 + <12><14.4>fulmo12 + <17.28><20.74><24.88>fulmo17 + }{} +\DeclareFontShape{U}{uni}{m}{sc}{ + <5><6><7><8>fulmc8 + <9>fulmc9 + <10><10.95>fulmc10 + <12><14.4>fulmc12 + <17.28><20.74><24.88>fulmc17 + }{} +\DeclareFontShape{U}{uni}{m}{st}{ + <5><6><7><8>fulmst8 + <9>fulmst9 + <10><10.95>fulmst10 + <12><14.4>fulmst12 + <17.28><20.74><24.88>fulmst17 + }{} +\DeclareFontShape{U}{uni}{b}{n}{ + <5><6><7><8>fulbr8 + <9>fulbr9 + <10><10.95>fulbr10 + <12><14.4>fulbf12 + <17.28><20.74><24.88>fulbr17 + }{} +\DeclareFontShape{U}{uni}{b}{sl}{ + <5><6><7><8>fulbo8 + <9>fulbo9 + <10><10.95>fulbo10 + <12><14.4>fulbo12 + <17.28><20.74><24.88>fulbo17 + }{} +\DeclareFontShape{U}{uni}{b}{sc}{ + <5><6><7><8>fulbc8 + <9>fulbc9 + <10><10.95>fulbc10 + <12><14.4>fulbc12 + <17.28><20.74><24.88>fulbc17 + }{} +\DeclareFontShape{U}{uni}{b}{st}{ + <5><6><7><8>fulbst8 + <9>fulbst9 + <10><10.95>fulbst10 + <12><14.4>fulbst12 + <17.28><20.74><24.88>fulbst17 + }{} +\DeclareFontShape{U}{uni}{m}{it}{<->ssub*uni/m/sl}{} +\DeclareFontShape{U}{uni}{m}{ui}{<->ssub*uni/m/n}{} +\DeclareFontShape{U}{uni}{b}{it}{<->ssub*uni/b/sl}{} +\DeclareFontShape{U}{uni}{bx}{n}{<->ssub*uni/b/n}{} +\DeclareFontShape{U}{uni}{bx}{sl}{<->ssub*uni/b/sl}{} +\DeclareFontShape{U}{uni}{bx}{sc}{<->ssub*uni/b/sc}{} +\DeclareFontShape{U}{uni}{bx}{st}{<->ssub*uni/b/st}{} +\DeclareFontShape{U}{uni}{bx}{it}{<->ssub*uni/b/sl}{} +\DeclareFontShape{U}{uni}{bc}{ui}{<->ssub*uni/b/n}{} +\DeclareFontShape{U}{uni}{sbc}{n}{<->ssub*uni/b/n}{} + +% \end{macrocode} +%\iffalse +% +%\fi + +%\iffalse +%<*unibase> +%\fi +% +% \section{The Font Macros and Programs} +% +% \subsection{Base file --- \texttt{unibase.mf}} +% \file{unibase.mf} +% \Newestchanges{v2.0}{98/08/01}{Base file \texttt{unibase.mf} swa the +% light of day, providing many driver, font control, and drawing +% macros.} +% +% This file defines all the macroes used in the source programs +% for the font. I could have chosen to use \texttt{cmbase}, but +% rather then defining a lot of variables that isn't used, I chose +% to make a base file myself. Also, some af the drawing macros +% presented here still needed to be defined. This file could be +% made into a binary file, but I think that would be a bit to +% much. +% +% First we define the variable \texttt{unibase}, to check later if +% this file has been loaded. +% \begin{macrocode} +unibase := 1 ; +string univer ; +univer = "2.0" ; +if proofing > 1 : + message "Base file for font `universal', version " & univer ; +fi +% \end{macrocode} +% Secondly, we define the variables \texttt{medium} and \texttt{bold} +% to control the font serie to be produced. If \texttt{medium} is set +% to \textsl{true} in the driver file, then a medium series +% (\Lcs{mdseries}) font will be produced, while \texttt{bold} ofcourse +% generates a boldface font. The medium serie may very well be +% more suitiable for long texts then the default font. In $10pt$ +% the default thickness of the pen is $\frac{5}{6}pt\approx 0.8pt$ +% wide for the minuscles, and a bit wider for the majuscules. If +% \texttt{medium} is \texttt{true} then it is $\frac{5}{9}pt\approx +% 0.6pt$ wide. +% +% Booleans \texttt{slant} and \texttt{caps} is used to control the +% shape of the font. If both is \textsl{false} a normal (upright) +% shaped font (\Lcs{upshape}) font is generated. If \texttt{slant} or +% \texttt{caps} is true, either a slanted (\Lcs{slshape}) or small +% caps (\Lcs{scshape}) shaped font is generated. The values of these +% booleans should be set in the driver file, \emph{before} any call to +% \texttt{start\_font}. +% \begin{macrocode} +boolean medium , slant , bold , caps , strict ; +medium := false ; slant := false ; bold := false ; +caps := false ; strict := false ; +% \end{macrocode} +% And then the font is identified as \texttt{"universal"}. +% \begin{macrocode} +font_identifier:="universal"; + +% \end{macrocode} +% +% \subsubsection{Font macros} +% +% These macroes have to do with the general initialization and +% production of the font. The macros needed later on is +% \texttt{start\_font}, and \texttt{end\_font}. +% +% The general idea is, that as little as possible should be +% defined in the driver file, so that the font will have a uniform +% look in all series, shapes, and sizes. All that is needed in the +% driver file is to define some of the above booleans to true, call +% the macro \texttt{start\_font} giving it the size (in \texttt{pt\#}) +% of the font as argument, include of source files, and call the macro +% \texttt{end\_font}. +% +% \begin{fontmacro}{start\_font} +% This is the macro for setting up the needed dimensions and +% variables. First we take into acount the \textit{mode} used, by +% calling \texttt{mode\_setup}, then we define the correct, +% \textit{sharped} units, bassed on the argument to the macro, wich +% should be the size of the font in \texttt{pt\#}. +% \begin{macrocode} +def start_font(expr size) = + u# := size/18 ; + mode_setup; + x_h# := 8u# ; x_w# := 8u# ; m_w# := 11u# ; l_h# := 13u# ; + p_d# := 5u# ; l_s# := 2u# ; r_s# := 2u# ; A_w# := 10u# ; + M_w# := 14u# ; c_d# := 3u#/2 ; C_d# := 2u# ; +% \end{macrocode} +% We test to see, if any of the above booleans is set to +% \textsl{true}, and if so, takes appropiate action. If +% \texttt{medium} is set, the pens gets thinner, thereby producing +% a lighter font. If \texttt{bold} the pens gets thicker, and so a +% heavier font is produced. If \texttt{slant} is set, then the +% inclination (\texttt{slantratio}) of the font is assigned. +% +% No other dimensions then the pen thickness should be differ among +% the \emph{medium} and \emph{bold} font. However, two dimension +% \texttt{c\_d} and \texttt{C\_d} is always set to the same value as +% the pens would be in the current size, if the font to be made was +% \emph{bold}. +% +% Also notice, that two different pens thicknesses is defined +% \texttt{p\_t} and \texttt{P\_t}, so that the majuscules may come out +% a bit thicker then the minuscles. Ofcourse this adds to the +% complexity of the drawing macroes defined below, but in a very +% straight forward way, so I dont't think it will be a problem. +% +% Then we set \texttt{currenttransform} to take into account the +% varibale \texttt{slantratio}. +% \begin{macrocode} + if (medium and bold) : + message "Font can't be both medium and bold, making medium font." ; + medium := true ; + fi; + if medium : p_t# := 2u#/3 ; P_t# := u# ; P_T# := u# ; fi ; + if bold : P_T# := 3u#/2 ; p_t# := 3u#/2 ; P_t# := 2u# ; fi ; + a_h# := x_h#+p_t#/2 ; + if (slant and (caps or strict)) : double_shape := 1 ; fi ; + if (caps and (slant or strict)) : double_shape := 1 ; fi ; + if (strict and (caps or slant)) : double_shape := 1 ; fi ; + if known double_shape : + message "Font cannot be two shapes, doing upright shape." ; + slant := false ; caps := false ; strict := false ; + fi ; + if slant : slantratio := 1/6 ; else: slantratio := 0 ; fi ; + currenttransform := identity slanted slantratio ; +% \end{macrocode} +% We need to set some paramteres for the Font Metric File +% (\texttt{*.tfm}), so that \TeX{} knows how to typeset the characters +% of the font. This is pretty straight, as desribed in the \MFbook{}. +% \begin{macrocode} + font_x_height 8u# ; font_quad 12u#+2u# ; + font_normal_space 8u# ; font_normal_stretch 3u# ; + font_normal_shrink 2u# ; font_extra_space 2u# ; + font_coding_scheme:="TeX text" ; font_size 18u# ; +% \end{macrocode} +% Next we assigns some variables we need later on, defines the +% \emph{un\/}sharped (mode dependent) units, declares some variables +% for later use, and call the macro \texttt{do\_pens} to save the pens +% needed by the font. +% \begin{macrocode} + spanish_shriek:=hex"3C" ; spanish_query:=hex"3E"; + define_pixels(u,x_h,x_w,m_w,l_h,p_d,A_w,M_w,c_d,C_d,a_h); + define_blacker_pixels(p_t,P_t,P_T); + picture e_pic, a_pic ; + do_pens ; +% \end{macrocode} +% The definitions of \texttt{extra\_beginchar} and +% \texttt{extra\_endchar} is responsible for the extra stem width +% of the font. Since this font is pretty uniform in width, we +% can easily do this globally. I got the trick from \texttt{cmbase}, +% where you instead use \texttt{adjust\_fit} after \texttt{beginchar}. +% However, for the above reasons, and because it lessens the source +% programs considerably, I chose to do it this way. +% +% The inclusion of the assignement +% \begin{verbatim} +% charcode := charcode + code_offset ; +% \end{verbatim} +% is for the small caps font, so that characters may be placed at +% non--standard positions in the font. When we are not making a small +% caps font, \texttt{code\_offset} should ofcourse be set to 0 (zero). +% \begin{macrocode} + extra_beginchar := extra_beginchar&"fit_font;" ; + extra_endchar := extra_endchar& + "end_fit_font;extra_proof_rules;charcode:=charcode+code_offset;" ; + code_offset := 0 ; +enddef; + +% \end{macrocode} +% \end{fontmacro} +% +% \begin{fontmacro}{do\_pens} +% This macro is used to set up the pens needed in this font. It is +% called every time one of the dimensions \texttt{p\_t\#} or +% \texttt{P\_t\#} is changed, since those are the \texttt{p/P}en +% \texttt{t/T}hicknesses. +% +% Apart from saving a lot of time, as explained in the \MFbook{}, this +% also garanties, that all pens are transformed correctly when the +% font shape is \textsl{slanted}. +% \begin{macrocode} +def do_pens = + clear_pen_memory ; + pickup pencircle scaled P_T slanted slantratio ; + UniPencir := savepen ; + pickup pencircle scaled p_t slanted slantratio ; + unipencir := savepen ; + pickup pencircle scaled P_t slanted slantratio ; + Unipencir := savepen ; + pickup pensquare scaled P_T slanted slantratio ; + UniPensqu := savepen ; + pickup pensquare scaled p_t slanted slantratio ; + unipensqu := savepen ; + pickup pensquare scaled P_t slanted slantratio ; + Unipensqu := savepen ; +enddef ; + +% \end{macrocode} +% \end{fontmacro} +% +% \begin{fontmacro}{fit\_font} +% This is the macro that changes the width of the font. It is +% derived from \texttt{cmbase}s \texttt{normal\_adjust\_fit}, though +% used in a slightly different way here. As explained in the \MFbook, +% this is a very nice macro, since it is essesially an add--on +% feature. We still specify the width of character in +% \texttt{beginchar}, and \texttt{w} is still this dimension. However, +% extra space is added to the character at both the left and right, +% so that characters don't get too close. +% \begin{macrocode} +def fit_font = + l := -hround(l_s#*hppp) ; interim xoffset := -l ; + charwd := charwd+l_s#+r_s# ; r := l+hround(charwd*hppp) ; + w := r-hround(r_s#*hppp) ; + italcorr charht*slantratio ; +enddef; + +% \end{macrocode} +% \end{fontmacro} +% \begin{fontmacro}{end\_fit\_font} +% Again, this is taken from \texttt{cmbase}, so that extra space is +% added on the sides of the character. +% \begin{macrocode} +def end_fit_font = + w := r+l ; +enddef; + +% \end{macrocode} +% \end{fontmacro} +% +% \begin{fontmacro}{extra\_proof\_rules} +% When doing proofing, it is nice to have some extra rules on the +% proofs, so that errors and mistakes are easiler seen. This macro +% does just that. A verticatal rule is produced at the left and +% right edge, and through the middle of the character. Horizontal +% rules are produced at one quarter, half, and three quarters of the +% character height. Also, if the charcter extence below the baseline, +% a rule is produced at one half the depth. +% \begin{macrocode} +def extra_proof_rules = + if proofing > 1 : + for xa = l,r,w/2: proofrule((xa,-d), (xa,h)) ; endfor ; + for ya = 0,h/4,h/2,3h/4,h: proofrule((l,ya), (r,ya)) ; endfor ; + if d > 0 : + proofrule((l,-d/2), (r,-d/2)) ; + proofrule((l,-d), (r,-d)) ; + fi + fi +enddef ; + +% \end{macrocode} +% \end{fontmacro} +% \begin{fontmacro}{end\_font} +% \texttt{end\_font} is used at the end of the driver file, to set +% ligatures, and end of the file. There is nothing fancy here. Do, +% however, notice no `f' ligatures is defined, as in the Computer +% Modern Roman. This is because they are not meant to be there, +% because `ff' shouldn't come out as `\textunibf{f\kern-.25ex f}', +% which looks bad, but rather as `\textunibf{ff}'. +% +% Also notice, that we haven't defined any characters \textunibf{``} +% or \textunibf{''}, since we make these up of two \textunibf{`} or +% \textunibf{'}. This gives us two more slots we can put other +% characters into. +% +% Note, we preface the definition by \texttt{inner bye} so that we can +% use this macro inside other macros (Kudo's to \TeX{}Live +% developers). +% +% \begin{macrocode} +inner bye; +def end_font = + ligtable "u" : "h" kern u# ; + ligtable "f" : "f" kern 0 , "l" kern 0 , "i" kern 0 ; + ligtable "o" : "l" kern u# ; + ligtable "?" : "`" =: spanish_query ; + ligtable "!" : "`" =: spanish_shriek ; + ligtable "`" : "`" kern -l_s#-r_s#+p_t# ; + ligtable "'" : "'" kern -l_s#-r_s#+p_t# , + "?" kern 2u#, "!" kern 2u# ; + ligtable "-" : "-" =: hex"7B" ; + ligtable hex"7B" : "-" =: hex"7C" ; + ligtable hex"22" : hex"22" kern -l_s#-r_s# ; + ligtable hex"5C" : hex"5C" kern -l_s#-r_s# ; + ligtable hex"20" : + "l" kern -3c_d#*cosd(15)-p_t#*sind(15)-l_s#-r_s# , + "L" kern -3c_d#*cosd(15)-p_t#*sind(15)-l_s#-r_s# ; + bye +enddef ; + +% \end{macrocode} +% \end{fontmacro} +% \begin{fontmacro}{do\_caps} +% This next macro is for the \textunisc{small caps} version of the +% font. Most of it is taken from \texttt{csc.mf} of the Computer +% Modern Font, though not as many dimensions have been redefined in +% this macro. The idea is to utilize this macro whenever you want to +% make a small caps version of majuscles. This macro is used in both +% \texttt{unilow.mf} and \texttt{unilig.mf}. +% +% The argument to \texttt{do\_caps} is the number the new characters +% should be offset from it's original position in the font. +% +% The last \texttt{do\_pens} is needed, since the programs uses saved +% pens, and we have just redefined the dimensions for the pens. +% \begin{macrocode} +def do_caps(expr offset) = + sc_shrink := x_h#/l_h# ; + P_t# := sc_shrink*P_t# ; l_h# := sc_shrink*l_h# ; + A_w# := sc_shrink*A_w# ; M_w# := sc_shrink*M_w# ; + C_d# := sc_shrink*C_d# ; + code_offset := offset ; + define_pixels(l_h,A_w,M_w,C_d) ; + define_blacker_pixels(P_t) ; + do_pens ; +enddef ; + +% \end{macrocode} +% \end{fontmacro} +% \begin{fontmacro}{end\_do\_caps} +% When ever we need to get back to the default setting of dimensions, +% after the use of \texttt{do\_caps}, we call on this macro to do the +% job. The idea is to multiply by \texttt{no\_shrink} which is the +% reciprocal of \texttt{sc\_shrink}. +% \begin{macrocode} +def end_do_caps = + no_shrink := 1/sc_shrink ; + P_t# := no_shrink*P_t# ; l_h# := no_shrink*l_h# ; + A_w# := no_shrink*A_w# ; M_w# := no_shrink*M_w# ; + C_d# := no_shrink*C_d# ; + code_offset := 0 ; + define_pixels(l_h,A_w,M_w,C_d) ; + define_blacker_pixels(P_t) ; + do_pens ; +enddef ; + +% \end{macrocode} +% \end{fontmacro} +% +% \subsubsection{Control macroes} +% +% These macroes are designed to ease the control of individual +% characters. +% +% \begin{fontmacro}{no\_adjust} +% If a character is not supposed to have extra space on either side +% you can say \texttt{no\_adjust} just before +% \begin{quote} +% \texttt{extra\_beginchar := extra\_beginchar\&"} +% \meta{your begin char stuff}\texttt{";}\\ +% \texttt{extra\_endchar := extra\_endchar\&"} +% \meta{your stuff endchar stuff}\texttt{";}\\ +% \texttt{beginchar(}\meta{usual arguments}\texttt{);} +% \end{quote} +% where the two string assigments are optional. +% \begin{macrocode} +def no_adjust= + old_begin_adjust := extra_beginchar ; + old_end_adjust := extra_endchar ; + extra_beginchar := " " ; + extra_endchar := + "extra_proof_rules;charcode:=charcode+code_offset" ; +enddef; + +% \end{macrocode} +% \end{fontmacro} +% +% \begin{fontmacro}{restore\_adjust} +% Use this command to restore automaticly adding extra space around +% the characters. Must be used between a \texttt{endchar} and +% \texttt{beginchar}. +% \begin{macrocode} +def restore_adjust= + extra_beginchar := old_begin_adjust ; + extra_endchar := old_end_adjust ; +enddef; +string old_begin_adjust, old_end_adjust ; + +% \end{macrocode} +% \end{fontmacro} +% +% \subsubsection{Drawing macroes} +% +% I have made this macros for drawing, to ease up the writing of +% source programs. They all simulate a pen of breadth \textit{thick} +% always moving perpendecular to the current path. This is needed +% in the \universal{} font, since all pen breadths are supposed +% to be equal anywhere (at least within a paricular `group'), in any +% direction. +% +% All of the macros heavely use \texttt{penpos}, so the use +% is pretty reliant on the appropiate use of this macro. This +% put some restrictions on the arguments, since \texttt{penpos} +% deals with angles of all sorts. +% +% In the macroes, we use vectors with number $m$, as assigened in the +% last argument of the macros. $m$ should be assigend so that the +% vectors $m,m+1,\ldots,m+4$ does not conflict with already assigned +% vectors, or vectors to be assigend in the current picture. +% +% Though it may seem a somewhat \textit{ad hoc} solution, it is the +% best way I could think of. Ofcourse I could check to see what +% vectors are defined, and then use some others, but that would +% complicate the code unessecary, and since the idea is to hide the +% actual vector operations in the macros, I descided to use the +% course. +% +% (No labels are produced on the proofsheets by this macroes, +% since they use very high numbers, which is rather destracting.) +% +% \begin{fontmacro}{unicir} +% Draws a circle of outer radius \texttt{rad}, and centered at +% \texttt{center}, which shoud be a pair. Notice, no effort is +% made to keep the circle within the character, so the use of +% this macro, should be governed with some caution. +% +% The second argument is the \emph{thickness} of the pen drawing the +% segment. +% +% The last argument \texttt{m} is to insure the uniqueness of +% all pairs. That is, if you need more then one circle in a letter, +% then \texttt{m} should take different values for each circle, so that +% $m_{i}-m_{i+1}>4$. Also \texttt{m} should not take any value +% corrosponing to vectors already defined. This is most easily done if +% \texttt{m} is asigned a large value, like say a multipla of 10, or +% even 100. +% \begin{macrocode} +def unicir(expr rad, thick, center, m)= + pickup pensquare scaled thick; + top z[m] = (0,rad) + center ; penpos[m](thick,90) ; + lft z[m+1] = (-rad,0) + center ; penpos[m+1](thick,180) ; + bot z[m+2] = (0,-rad) + center ; penpos[m+2](thick,270) ; + rt z[m+3] = (rad,0) + center ; penpos[m+3](thick,0) ; + penstroke z[m]e{left}..z[m+1]e{down}.. + z[m+2]e{right}..z[m+3]e{up}..cycle ; + penlabels(range m thru m+3); +enddef; + +% \end{macrocode} +% \end{fontmacro} +% +% \begin{fontmacro}{uniarc} +% Produce a segment of a circle, with radius \texttt{rad}, and +% centered at \texttt{center}. +% +% The size of the segment is determind by the arguments +% \texttt{ang\_a} and \texttt{ang\_b}, consider as angles from a +% horizontal linesegment from \texttt{center} traveling right. That +% means you should specify the angles in at counter--clockwise way, +% and between -360 and 360. \texttt{ang\_b} \emph{must} be bigger then +% \texttt{ang\_a}, otherwise the output is totally unpredictiable. +% +% The second argument is the \emph{thickness} of the pen drawing the +% segment, Again the last argument \texttt{m} is to insure the +% uniqueness of the vectors. The comments above on the argument also +% applies here. +% \begin{macrocode} +def uniarc(expr rad, thick, center, ang_a, ang_b, m)= + pickup pensquare scaled thick ; + path arc.l, arc.r, arc.e ; n:=m ; ang_c := abs(ang_b-ang_a) ; +% \end{macrocode} +% First we check to see, if the user somehow requested an arc of more +% then $360^\circ$. If so, we just call \texttt{unicir}, since this is +% properly intended. If not, we go on to define relevant vectors. +% \begin{macrocode} + if ang_c >= 360 : + unicir(rad,center,n) ; + else: +% \end{macrocode} +% We acctualy define the vectors as if we started in the arc on the +% positiv $x$--axis, considering \texttt{center} as origo, an then +% latter on turn the arc the appropiate angle. Notice the heavy use of +% \texttt{penpos} and \texttt{[ ]} to evaluate variable \texttt{m}. +% \begin{macrocode} + top z[n] = (0,rad) + center ; penpos[n](thick,90) ; + arc.r := z[n]r{left} ; + arc.l := z[n]l{left} ; +% \end{macrocode} +% The next \texttt{if...fi} loop ensures we don't define a +% whole lot of useless vectors. The \MF{} primitiv path macro +% \texttt{...} does a very good job at approching a segment of a +% circle even if only two points are defined in an interval of +% $90^\circ$, if we at the same time utilizes the direction mechanisme +% of \MF{}. +% \begin{macrocode} + if ang_c > 90 : + n := n+1 ; lft z[n] = (-rad,0) + center ; penpos[n](thick,180) ; + arc.r := arc.r&z[n-1]r..z[n]r{down} ; + arc.l := arc.l&z[n-1]l..z[n]l{down} ; + if ang_c > 180 : + n := n+1 ; bot z[n] = (0,-rad) + center ; penpos[n](thick,270) ; + arc.r := arc.r&z[n-1]r..z[n]r{right} ; + arc.l := arc.l&z[n-1]l..z[n]l{right} ; + if ang_c > 270 : + n := n+1 ; rt z[n] = (rad,0) + center ; penpos[n](thick,0) ; + arc.r := arc.r&z[n-1]r..z[n]r{up} ; + arc.l := arc.l&z[n-1]l..z[n]l{up} ; + fi ; + fi ; + fi ; +% \end{macrocode} +% After the \texttt{if} loop, we define the final point, make the +% complete path, and finishes off by drawing the arc, turned the +% appropiate angle. +% \begin{macrocode} + n:=n+1 ; z[n] = z[m] rotatedabout(center,ang_c) ; + penpos[n](thick,90+ang_c) ; + arc.r := arc.r&z[n-1]r..z[n]r{dir(180+ang_c)} ; + arc.l := arc.l&z[n-1]l..z[n]l{dir(180+ang_c)} ; + arc.e := arc.l--reverse arc.r--cycle; + fill (arc.e rotatedabout(center,-90+ang_a)); + fi; + penlabels(range m thru n); +enddef; + +% \end{macrocode} +% Notice the use of two paths, and reversal of one. This is +% essentially what the \texttt{plain.mf} macro \texttt{penstroke} +% does. However, that macro couldn't be used here, since we are +% building a path on the fly, so every step is needed to be fully +% known, and \texttt{penstroke} makes new variables to do the job. +% +% Also, we use the integer \texttt{n} for surfixes, since this +% limits the creation of vectors, and eases the path building. +% \end{fontmacro} +% +% \begin{fontmacro}{uniend} +% This macro is somewhat similar to \texttt{uniarc} above, but has a +% different use. Where \texttt{uniarc} is intended for arcs with a +% radius bigger then the pen thickness, this macro is intended for +% arcs with a radius of exactly same size as the pen thickness, hence +% this macro produces a \emph{filled} segment of a circle with a +% radius of the current pen thickness. +% +% This macro, like \texttt{uniarc}, takes 5 arguments: the radius of +% the arc; the center of the arc, which should be of type +% \texttt{pair}; the starting and ending angle; plus the first number +% of the vectors needed to draw this figure. The considerations above +% in \texttt{uniarc} conserning the angles also apply here. +% +% Notice once again the use of \texttt{if..fi} loops to define the +% relevant vectors and paths. +% \begin{macrocode} +def uniend(expr rad, center, ang_a, ang_b, m)= + path arc ; n:=m ; ang_c := abs(ang_b-ang_a) ; + if ang_c >= 360 : + Rad := 2*rad ; + pickup pencircle scaled Rad ; z[n]=center ; drawdot z[n] ; + else: + z[n] = (0,rad) + center ; arc := center{up}--z[n]{left} ; + if ang_c > 90 : + n := n+1 ; z[n] = (-rad,0) + center ; + arc := arc&z[n-1]..z[n]{down} ; + if ang_c > 180 : + n := n+1 ; z[n] = (0,-rad) + center ; + arc := arc&z[n-1]..z[n]{right} ; + if ang_c > 270 : + n := n+1 ; z[n] = (rad,0) + center ; + arc := arc&z[n-1]..z[n]{up} ; + fi ; + fi ; + fi ; + n := n+1 ; z[n] = z[m] rotatedabout(center,ang_c) ; + arc := arc&z[n-1]..z[n]{dir(180+ang_c)}--cycle ; + fill (arc rotatedabout(center,-90+ang_a)); + fi; + penlabels(range m thru n); +enddef; + +% \end{macrocode} +% Notice, once more we are building a path on the fly, so some caution +% was used here. Again the \texttt{plain.mf} macro \texttt{penstroke} +% doesn't do the job here. This is because only a part of a stroke is +% actually wanted. You might think then, that the \texttt{plain.mf} +% macro \texttt{cutoff} then would do the job, but in my experience +% that macro has some serious flaws\footnote{A quick use of the Unix +% command \texttt{grep} on most of the Computer Modern Fonts reveals +% that \texttt{cutoff} is \emph{never} used, which I take to +% indicate its weakness.}. +% \end{fontmacro} +% +% \begin{fontmacro}{unilne} +% This macro is intended for drawing non--vertical or horizontal +% lines, since this is easily done with \texttt{draw}. It takes +% six arguments, the thickness of the pen drawing the line, the +% starting point of the line (\texttt{start}), the ending point of +% line (\texttt{stop}), which should be higher and more to the right +% then the starting point, and the cutoff--style +% (\texttt{endcutstart, endcutstop}). + +% If \texttt{endcut}$x$ is positiv, then, the line is cut off +% horizontally at the relevant point $x$. +% +% If \texttt{endcut}$x$ is negativ, then, the line is cut off +% vertically at $x$. +% +% If it is zero, then the line is cut off perpendicular to the slant +% of the line at $x$. +% +% Also, if \texttt{endcut}$x$ is zero, the starting point is the +% point corrosponding to the lowest height and leftmost width, and the +% ending point corrosponds to the heighest height and rightmost width +% of the line. Again \texttt{m} insures unique vectors. +% \begin{macrocode} +def unilne(expr thick, start, stop, endcutstart, endcutstop, m)= + pickup pensquare scaled thick; + if endcutstart = endcutstop : + if endcutstart = 0 : + lft bot z[m] = start ; rt top z[m+1] = stop ; + ang_c := angle(z[m+1]-z[m]) ; + penpos[m](thick,-90+ang_c) ; + penpos[m+1](thick,-90+ang_c) ; + elseif endcutstart > 0 : + lft z[m] = start ; rt z[m+1] = stop ; + ang_c := angle(z[m+1]-z[m]) ; + penpos[m](thick/sind(ang_c),0) ; + penpos[m+1](thick/sind(ang_c),0) ; + elseif endcutstart < 0: + bot z[m] = start ; top z[m+1] = stop ; + ang_c := angle(z[m+1]-z[m]) ; + penpos[m](thick/cosd(ang_c),90) ; + penpos[m+1](thick/cosd(ang_c),90) ; + fi; + penstroke z[m]e--z[m+1]e ; + else : + message "Different endcuts on unilne not implemented yet."; + fi; + n := m + 1 ; + penlabels(range m thru n); +enddef; + +% \end{macrocode} +% \end{fontmacro} +% +%\iffalse +% +%\fi +% +%\iffalse +%<*low> +%\fi +% \subsection{The Minuscles (lowercase letters) --- \texttt{unilow.mf}} +% \file{unilow.mf} +% +% \Newestchanges{v2.0}{98/08/01}{All of \texttt{unilow.mf} is defined +% within a conditional, to ease the generation of the small caps +% shaped fonts.} +% This whole file is loaded only conditionally to make the generation +% of small caps font easier. +% \begin{macrocode} +if not caps : + +% \end{macrocode} +% \begin{fontcode}{a} +% The letter \textunibf{a} is interresting in the sense, that the bottom +% part of the curve, is \emph{not} a segement of an arc. The exact +% curvature of this part, is controversial; some font designers have +% chosen to make it a segement of an arc, making all of the curve, a +% circle; while others have chosen to make it a straight line. I +% decided to take the middleroad, since it appeals more to me +% aestheticly, even though it deviates from the principle of building +% all characters from the two simple forms: the cirle and the line. +% +% The \textuni{a} is also saved in the picture variable +% \texttt{a\_pic}, for use in \texttt{unilig.mf}. +% \begin{macrocode} + beginchar("a",x_w#,x_h#,0); "The letter a"; + uniarc(w/2,p_t,(w/2,h/2),0,290,10); + pickup unipensqu ; + z1 = ((cosd(290)*(w-p_t)+w)/2,(sind(290)*(w-p_t)+w)/2); + z2 = (w-p_t/2,2h/5) ; penpos1(p_t,-70); penpos2(p_t,-45); + fill z1l{dir(20)}..z2l{dir(45)}-- + z2r{dir(225)}..z1r{dir(200)}--cycle; + top rt z3 = (w,.5h) ; bot rt z4 = (w,0) ; draw z3{down}--z4 ; + penlabels(1,2,3,4); + a_pic := currentpicture ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{b} +% There is not much to say about this letter, only that it is a +% \textunibf{d} reflected through the vertical center axis. +% \begin{macrocode} + beginchar("b",x_w#,l_h#,0); "The letter b"; + unicir(w/2,p_t,(w/2,w/2),10); + pickup unipensqu ; + lft bot z1 = (0,w/2) ; lft top z2 = (0,h) ; draw z1{up}--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{c} +% This is a rather short program, but is interresting, since some care +% has to be taken, when assigning the width. Since a \textunibf{c} is not +% a full cirle, but only a segment opening towards the right, it would +% look wrong, if the letter was as wide, as it is tall. +% \begin{macrocode} + beginchar("c",x_w#*(1+cosd(30))/2,x_h#,0); "The letter c"; + uniarc(h/2,p_t,(h/2,h/2),30,330,10); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{d} +% A flipped \textunibf{b} --- that's it! +% \begin{macrocode} + beginchar("d",x_w#,l_h#,0); "The letter d"; + unicir(w/2,p_t,(w/2,w/2),10); + pickup unipensqu ; + rt bot z1 = (w,w/2) ; rt top z2 = (w,h) ; draw z1{up}--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{e} +% Notice the middle bar. The arc can not go all the way down to the +% bar, because then the \textunibf{e} would end in a arc, on the right +% side. We want a flat end, so an extra dot has to be made. +% +% The \textuni{e} is also saved in the picture variable +% \texttt{e\_pic}, for use in \texttt{unilig.mf}. +% \begin{macrocode} + beginchar("e",x_w#,x_h#,0); "The letter e"; + uniarc(w/2,p_t,(w/2,h/2),0,330,10); + temp := p_t/2 ; + pickup pensquare xscaled p_t yscaled temp slanted slantratio ; + top rt z1 = (w,h/2) ; drawdot z1 ; + pickup unipensqu ; + z2 = (p_t,h/2) ; z3 = (w-p_t,h/2) ; draw z2--z3 ; + penlabels(1,2,3); + e_pic := currentpicture ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{f} +% The horizontal placement of the bar is somewhat controversial. I +% think it looks best if it is placed, so that the top of the bar, is +% at the same height, as the top of an \textunibf{x}, that is $1ex$. +% \begin{macrocode} + beginchar("f",4p_t#,l_h#,0); "The letter f"; + uniarc(3/4w,p_t,(3/4w,h-3/4w),90,180,10); + pickup unipensqu ; + top rt z1 = (w,h) ; drawdot z1 ; + lft top z2 = (0,h-3/4w) ; bot lft z3 = (0,0) ; draw z2--z3 ; + top lft z4 = (0,x_h) ; top rt z5 = (w,x_h) ; draw z4--z5 ; + penlabels(1,2,3,4,5); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{g} +% The \textunibf{g} is a very good measure of how low ascenders should +% go. Some might want to add a square on top of the ascender, so that +% the letter ended in flat to the right, but I found it displeacing, +% and therefore left it out. +% \begin{macrocode} + beginchar("g",x_w#,x_h#,p_d#); "The letter g" ; + uniarc(w/2,p_t,(w/2,h/2),30,360,10) ; + pickup unipensqu ; + top rt z1 = (w,h/2) ; bot rt z2 = (w,-d) ; draw z1--z2; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{h} +% It can be argued, that this letter is too wide. However, I decieded +% to weight the concept of homongeious circles higher in this case. +% \begin{macrocode} + beginchar("h",x_w#,l_h#,0); "The letter h" ; + uniarc(w/2,p_t,(w/2,w/2),0,180,10) ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top rt z3 = (w,x_h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{i} +% Quite a simple letter, though it can be argued wether the dot should +% be square, or as here circular. +% \begin{macrocode} + beginchar("i",p_t#,l_h#,0) ; "The letter i" ; + pickup unipensqu ; + top lft z1 = (0,x_h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + pickup unipencir ; + top lft z3 = (0,h) ; drawdot z3 ; + penlabels(1,2,3) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{j} +% No left stem is added at the bottom, since it isn't needed! +% \begin{macrocode} + beginchar("j",p_t#,l_h#,p_d#); "The letter j" ; + pickup unipensqu ; + top lft z1 = (0,x_h) ; bot lft z2 = (0,-d) ; draw z1--z2 ; + pickup unipencir ; + top lft z3 = (0,h) ; drawdot z3 ; + penlabels(1,2,3) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{k} +% Again, this letter is narrower then most of the letters. This is +% because, the to arcs isn't full halfarcs, but rather quarterarcs. +% \begin{macrocode} + beginchar("k",(x_h#+3p_t#)/2,x_h#,0) ; "The letter k" ; + uniarc((h+p_t)/2,p_t,(p_t,h),270,360,10) ; + uniarc((h+p_t)/2,p_t,(p_t,0),0,90,20) ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{l} +% What is a line, but a line! Well right now it is an `l'. You may +% wonder why no stems are added, to destingish an `l' from a vertical +% bar, as in math mode. Well, how often will you put a math vertical +% bar next to an text `l'. +% \begin{macrocode} + beginchar("l",p_t#,l_h#,0) ; "The letter l" ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{m} +% This proved more tricky then I thought. Originally, I wanted the arc +% of the \textunibf{n} to be as high as those of the \textunibf{m}. This +% meant, that either the \textunibf{n} should be very narrow, or the +% \textunibf{m} very wide; either way it wouldn't look good. So after a +% few experiments, I decided for the current form. +% \begin{macrocode} + beginchar("m",m_w#,x_h#,0) ; "The letter m" ; + temp := .25*(w+p_t); + uniarc(temp,p_t,(temp,h-temp),0,180,10) ; + uniarc(temp,p_t,(w-temp,h-temp),0,180,20) ; + pickup unipensqu ; + top lft z1 = (0,h-temp) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top z3 = (w/2,h-temp) ; bot z4 = (w/2,0) ; draw z3--z4 ; + top rt z5 = (w,h-temp) ; bot rt z6 = (w,0) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{n} +% Tricky because of the \textunibf{m} (see above). +% \begin{macrocode} + beginchar("n",x_w#,x_h#,0); "The letter n" ; + uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; + pickup unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{o} +% Well, this is just a circle, nothing fancy. Why not make it oval, +% you say. I say, listen --- Herbert Bayer just turned in his grave! +% \begin{macrocode} + beginchar("o",x_w#,x_h#,0) ; "The letter o"; + unicir(w/2,p_t,(w/2,h/2),10); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{p} +% Try to flip the \textunibf{b} horizontally, and tell me what you get? +% \begin{macrocode} + beginchar("p",x_w#,x_h#,p_d#) ; "The letter p" ; + unicir(w/2,p_t,(w/2,w/2),10); + pickup unipensqu ; + lft top z1 = (0,h/2) ; lft bot z2 = (0,-d) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{q} +% Why not try to destingish the \textunibf{q} more from the \textunibf{g}? +% Well if you look at the two letters, I think, you will get the +% answer. Also, my intuition of a \textunibf{q} is that of a reflected +% \textunibf{p}, but that is just \emph{my} intuition! +% \begin{macrocode} + beginchar("q",x_w#,x_h#,p_d#) ; "The letter q" ; + unicir(w/2,p_t,(w/2,w/2),10); + pickup unipensqu ; + rt top z1 = (w,h/2) ; rt bot z2 = (w,-d) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{r} +% Well that is really simplle, but illustrates a fine point --- why +% use more strokes, when fewer is needed? +% \begin{macrocode} + beginchar("r",3p_t#,x_h#,0) ; "The letter r" ; + uniarc(w,p_t,(w,h-w),90,180,10) ; + pickup unipensqu ; + top lft z1 = (0,h-w) ; bot lft z2 = (0,0) ; draw z1--z2; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{s} +% \Newestchanges{v2.0}{98/08/01}{Considerable simplifications.} +% This is a `slow' letter, i.e.\ it takes \MF{} quite some time to +% compute. The reason is simple --- a \emph{lot} of curves is drawn. +% \begin{macrocode} + beginchar("s",x_w#,x_h#,0) ; "The letter s" ; + temp := (h+p_t)/4 ; + uniarc(temp,p_t,(temp,temp),180,270,10) ; + uniarc(temp,p_t,(w-temp,temp),270,450,20) ; + uniarc(temp,p_t,(temp,h-temp),90,270,30) ; + uniarc(temp,p_t,(w-temp,h-temp),0,90,40) ; + pickup unipensqu ; + bot lft z1 = (temp,0) ; bot rt z2 = (w-temp,0) ; draw z1--z2 ; + lft z3 = (temp,h/2) ; rt z4 = (w-temp,h/2) ; draw z3--z4 ; + top lft z5 = (temp,h) ; top rt z6 = (w-temp,h) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{t} +% As I argued before, the placement of the bar in the \textunibf{f} and +% \textunibf{t} is controversial. +% \begin{macrocode} + beginchar("t",p_t#+2c_d#,l_h#,0); "The letter t" ; + pickup unipensqu ; + top z1 = (w/2,h) ; bot z2 = (w/2,0) ; draw z1--z2 ; + top lft z3 = (0,x_h) ; top rt z4 = (w,x_h) ; draw z3--z4 ; + penlabels(1,2,3,4); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{u} +% Flip a letter here, and flip a letter there --- all in a days work +% of a font designer! +% \begin{macrocode} + beginchar("u",x_w#,x_h#,0); "The letter u" ; + uniarc(w/2,p_t,(w/2,w/2),180,360,10) ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; + top rt z3 = (w,h) ; bot rt z4 = (w,w/2) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{v} +% The lines and the arc doesn't intersect in a flowing way, but the +% error is so small it will not be seen in normal use. However, if +% the font is maginified to, say $70pt$, it might be a problem. I +% hope to get into this, some time in the future. For now, make do. +% \begin{macrocode} + beginchar("v",x_w#,x_h#,0); "The letter v" ; + unilne(p_t,(0,h),(w/2,p_t),1,1,10); + unilne(p_t,(w/2,p_t),(w,h),1,1,20); + uniarc(p_t,p_t,(w/2,p_t),180,360,30); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{w} +% Flippedy--flop. +% \begin{macrocode} + beginchar("w",m_w#,x_h#,0) ; "The letter w" ; + temp := .25*(w+p_t); + uniarc(temp,p_t,(temp,temp),180,360,10) ; + uniarc(temp,p_t,(w-temp,temp),180,360,20) ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,temp) ; draw z1--z2 ; + top z3 = (w/2,h) ; bot z4 = (w/2,temp) ; draw z3--z4 ; + top rt z5 = (w,h) ; bot rt z6 = (w,temp) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{x} +% This is a bit tricky --- the two arces are each half the width wide, +% but since they share middle part, they leave the width of the +% strokes uncoverd. To remedy this problem, four dots are drawn. It +% would be silly, if the \textunibf{x} wasn't as wide as it is tall, +% namely \texttt{x\_w}. +% \begin{macrocode} + beginchar("x",x_w#,x_h#,0) ; "The letter x" ; + uniarc(h/2,p_t,(p_t/2,h/2),270,90,10); + uniarc(h/2,p_t,(w-p_t/2,h/2),90,270,20); + temp := (w-h+p_t)/2 ; + pickup pensquare xscaled temp yscaled p_t slanted slantratio ; + lft top z1 = (0,h) ; drawdot z1 ; + lft bot z2 = (0,0) ; drawdot z2 ; + rt top z3 = (w,h) ; drawdot z3 ; + rt bot z4 = (w,0) ; drawdot z4 ; + penlabels(1,2,3,4); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{y} +% Flip an reflect, or just turn, it's all the same, it will still be a +% transformation of an \textunibf{h} +% \begin{macrocode} + beginchar("y",x_w#,x_h#,p_d#); "The letter y" ; + uniarc(w/2,p_t,(w/2,w/2),180,360,10) ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,w/2); draw z1--z2 ; + top rt z3 = (w,h) ; bot rt z4 = (w,-d) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{z} +% This is a bit tricky letter, since what I wanted was for middle line +% to have an inclination such that its edges would be tangents to the +% circle segments at the endpoints of the horizontal lines. I tried to +% solve this problem analytically, but gave up. I also tried to use +% some of \texttt{plain.mf}'s macros, but none of them gave me the +% resulat I wanted. So I finally made the approximation seen below. +% If you can come up with a good solution to this problem, please let +% me know. +% \begin{macrocode} + beginchar("z",x_w#,x_h#,0) ; "The letter z" ; + pickup unipensqu ; + top lft z1 = (0,h) ; top rt z2 = (w-p_t,h) ; draw z1--z2 ; + bot lft z3 = (p_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ; + phi := angle((w,h-p_t)-(0,p_t)) ; % Uuuuupps !?!!!!!! + z5 = (p_t,p_t) ; z6 = z5 + p_t*(-sind(phi),cosd(phi)) ; + z7 = (w-p_t,h-p_t) ; z8 = z7 + p_t*(sind(phi),-cosd(phi)) ; + uniend(p_t,z5,90+phi,270,10); + uniend(p_t,z7,-90+phi,90,20); + fill z5--z6--z7--z8--cycle ; + penlabels(range 1 thru 8); + endchar; + +% \end{macrocode} +% \end{fontcode} +% As explain in the begining of the section, this file is one big +% \texttt{if...else...fi} loop to mak the generation of the small caps +% font easier. +% +% The idea is, that if \texttt{caps} is +% \texttt{true}, then the main part of this file shouldn't be used, +% but rather \texttt{uniupp.mf} should be loaded again, but with +% different diffintions of dimensions for uppercase letters, so that +% they come out as small as lowercase letters, hence --- small +% caps. +% +% This is done by the macro \texttt{do\_caps}, which we utilies +% inside a group, so that the changes made by \texttt{do\_caps} will be +% undone after the group, and hence not affect the rest of the font. +% +% \begin{macrocode} +else : + do_caps(ASCII"a" - ASCII"A") ; + input uniupp ; + end_do_caps ; +fi ; + +% \end{macrocode} +%\iffalse +% +%\fi +%\iffalse +%<*upp> +%\fi +% \subsection{The Majuscles (uppercase letters) --- \texttt{uniupp.mf}} +% \file{uniupp.mf} +% +% As noted earlier, Herbert Bayer never did design any majuscles, +% since he considered them useless. However, majuscles are avaliable +% in the current implentation and are to be used at your lesuire. Of +% course, if you agree with the Bauhaus school, and think uppercase +% letters are useless, you shouldn't use them. Then, perhaps, you +% should also refrain from using non--standard letters shuch as German +% double s, Scandinavian ligatures, Spanish schriek, and perhaps even +% accents of any kind. This may seem a little drastic, but the +% train--of--tought should be clear: Why use letters and symbols that +% are in the best case obsolete, and in the worst useless or without +% significans? +% +% \Newestchanges{v2.0}{98/08/01}{All of \texttt{unilow.mf} is defined +% within a conditional, to ease the generation of the strict shaped +% fonts.} +% +% To facilitate a use of the \universal{} font conforming to Bayers' +% original idea, that is without majusceles this file is loaded only +% under the condition that \texttt{strict} is \emph{false}. +% \begin{macrocode} +if not strict : + +% \end{macrocode} +% \begin{fontcode}{A} +% It can be argued where the bar should be placed. I choose place it +% the middle, since most of the majuscles tend to have a symmetry axis +% long this line, so I thought it apropiate to follow this line of +% thought. Ofcourse, I'm the only one to blane for this, since Herbert +% Bayer \emph{never} designed any majuscles! (So flame me for +% guessing). +% \begin{macrocode} + beginchar("A",A_w#,l_h#,0); "The letter A"; + uniarc(w/2,P_t,(w/2,h-w/2),0,180,10); + pickup Unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; + lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{B} +% This letter is somewhat tricky, since it is not clear wether the +% arces should be placed directly on the left down stoke, or there +% should be some distance filled with horizontal bars. I chose the +% second solution, even though it isn't the most simple, and hence in +% better agrement with the concept of this font design. However, the +% first solution does make the letter very narrow compared with some +% of the other letters. +% \begin{macrocode} + beginchar("B",A_w#,l_h#,0) ; "The letter B" ; + rad := 1/4(h+P_t) ; + uniarc(rad,P_t,(w-rad,h-rad),-90,90,10) ; + uniarc(rad,P_t,(w-rad,rad),-90,90,20) ; + uniend(P_t,(P_t,h-P_t),90,180,30) ; + uniend(P_t,(P_t,P_t),180,270,40) ; + pickup Unipensqu ; + top lft z1 = (0,h-P_t) ; bot lft z2 = (0,P_t) ; draw z1--z2 ; + top lft z3 = (P_t,h) ; top rt z4 = (w-rad,h) ; draw z3--z4 ; + lft z5 = (P_t,h/2) ; rt z6 = (w-rad,1/2h) ; draw z5--z6 ; + bot lft z7 = (P_t,0) ; bot rt z8 = (w-rad,0) ; draw z7--z8 ; + penlabels(range 1 thru 8); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{C} +% This is really simple, since it is just an enlargement of the +% corresponding minuscule, so the is really nothing interresting +% here. +% \begin{macrocode} + beginchar("C",l_h#*(1+cosd(30))/2,l_h#,0); "The letter C"; + uniarc(h/2,P_t,(h/2,h/2),30,330,10); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{D} +% As with the B, there are two ways to do this letter: One way would +% be to make the arc a true half segment of a circle, the other would +% be to compose it of two quarter segments, joined by a vertical +% line. The second solution also entails, that two horizontal lines +% should connect the two quarter circles with the left vertical +% line. Again I chose the simple solution, which --- ofcourse --- +% amounts to the first mentioned above. +% \begin{macrocode} + beginchar("D",A_w#,l_h#,0); "The letter D"; + uniarc(1/2h,P_t,(w-1/2h,1/2h),-90,90,10); + uniend(P_t,(P_t,h-P_t),90,180,20); + uniend(P_t,(P_t,P_t),180,270,30); + pickup Unipensqu ; + top lft z1 = (0,h-P_t) ; bot lft z2 = (0,P_t) ; draw z1--z2 ; + top lft z3 = (P_t,h) ; top rt z4 = (w-1/2h,h) ; draw z3--z4 ; + bot lft z5 = (P_t,0) ; bot rt z6 = (w-1/2h,0) ; draw z5--z6 ; + penlabels(1,2) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{E} +% It can be argued, that the middle bar should be shorter then the top +% and bottom bar, but since this only complicates things, I chose not +% to do so. However, I am not going to be stuborn on this, and it may +% well prove to be better aestethics, if the middle bar is shortend. +% \begin{macrocode} + beginchar("E",A_w#,l_h#,0); "The letter E" ; + uniend(P_t,(P_t,h-P_t),90,180,10); + uniend(P_t,(P_t,P_t),180,270,20); + pickup Unipensqu ; + lft top z1 = (P_t,h) ; rt top z2 = (w,h) ; draw z1--z2 ; + lft z3 = (P_t,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ; + lft bot z5 = (P_t,0) ; rt bot z6 = (w,0) ; draw z5--z6 ; + lft top z7 = (0,h-P_t) ; lft bot z8 = (0,P_t) ; draw z7--z8 ; + penlabels(range 1 thru 8) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{F} +% Ofcourse, very similar to the \textunibf{E}. The consideration +% concerning the middle bar of the \textunibf{E} will ofcourse reflect +% on this letter. +% \begin{macrocode} + beginchar("F",A_w#,l_h#,0); "The letter F" ; + uniend(P_t,(P_t,h-P_t),90,180,10); + pickup Unipensqu ; + lft top z1 = (P_t,h) ; rt top z2 = (w,h) ; draw z1--z2 ; + lft z3 = (P_t,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ; + lft top z5 = (0,h-P_t) ; lft bot z6 = (0,0) ; draw z5--z6 ; + penlabels(range 1 thru 8); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{G} +% This is very similar to the minuscle \textunibf{g}, the only difference +% is the size, and that the down stroke doens't extend below the +% baseline. +% \begin{macrocode} + beginchar("G",l_h#,l_h#,0); "The letter G" ; + uniarc(w/2,P_t,(w/2,h/2),30,360,10) ; + pickup Unipensqu ; + top rt z1 = (w,h/2) ; bot rt z2 = (w,0) ; + draw z1--z2; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{H} +% An awfull simple letter. There can be no doubt on how this should +% look. +% \begin{macrocode} + beginchar("H",A_w#,l_h#,0); "The letter H" ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top rt z3 = (w,h) ; bot rt z4 = (w,0) ; draw z3--z4 ; + lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{I} +% It doesn't get any simpler! +% \begin{macrocode} + beginchar("I",P_t#,l_h#,0); "The letter I" ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{J} +% \begin{macrocode} + beginchar("J",P_t#+2C_d#,l_h#,0); "The letter J"; + uniend(P_t,(w-P_t,P_t),270,360,10); + pickup Unipensqu ; + lft bot z1 = (0,0) ; rt bot z2 = (w-P_t,0) ; draw z1--z2 ; + rt bot z3 = (w,P_t) ; rt top z4 = (w,h) ; draw z3--z4 ; + penlabels(1,2,3,4); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{K} +% Similar to \textunibf{k}. +% \begin{macrocode} + beginchar("K",(l_h#+3P_t#)/2,l_h#,0) ; "The letter K" ; + uniarc((h+P_t)/2,P_t,(P_t,h),270,360,10) ; + uniarc((h+P_t)/2,P_t,(P_t,0),0,90,20) ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{L} +% This is just a reflected \textunibf{J}. +% \begin{macrocode} + beginchar("L",P_t#+2C_d#,l_h#,0) ; "The letter L" ; + uniend(P_t,(P_t,P_t),180,270,10) ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,P_t) ; draw z1--z2 ; + bot lft z3 = (P_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{M} +% The same kind of considerations as in \textunibf{m} went into this +% letter. +% \begin{macrocode} + beginchar("M",M_w#,l_h#,0) ; "The letter M" ; + temp := .25*(w+P_t); + uniarc(temp,P_t,(temp,h-temp),0,180,10) ; + uniarc(temp,P_t,(w-temp,h-temp),0,180,20) ; + pickup Unipensqu ; + top lft z1 = (0,h-temp) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top z3 = (w/2,h-temp) ; bot z4 = (w/2,0) ; draw z3--z4 ; + top rt z5 = (w,h-temp) ; bot rt z6 = (w,0) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{N} +% Tricky because of the \textunibf{M} (see above). +% \begin{macrocode} + beginchar("N",A_w#,l_h#,0); "The letter N" ; + uniarc(w/2,P_t,(w/2,h-w/2),0,180,10) ; + pickup Unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0); draw z1--z2 ; + top rt z3 = (w,h-w/2) ; bot rt z4 = (w,0) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{O} +% No, this is not going to be an oval, but a \emph{circle\/}! +% \begin{macrocode} + beginchar("O",l_h#,l_h#,0) ; "The letter O"; + unicir(w/2,P_t,(w/2,h/2),10); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{P} +% No surprises. +% \begin{macrocode} + beginchar("P",A_w#,l_h#,0) ; "The letter P"; + unicir(w/2,P_t,(w/2,h-w/2),10) + pickup Unipensqu ; + lft top z1 = (0,h-w/2) ; lft bot z2 = (0,0) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{Q} +% There are to variants of this letter, one is an reflected +% \textunibf{P}, and the other is a vaiant of an \textunibf{O}. The +% default one, is the \textunibf{Q} variant. If you want to use the +% other variant, you can acceses it directly with \Lcs{varQ}, or you +% can pass the argument \texttt{varQ} to the \textsc{uni} package. +% (Option \texttt{varQ} not implemented yet!) +% \begin{macrocode} + beginchar("Q",l_h#,l_h#,p_d#) ; "The letter Q"; + unicir(w/2,P_t,(w/2,w/2),10); + pickup Unipensqu ; + top z1 = (w/2,3P_t) ; bot z2 = (w/2,-d) ; draw z1--z2 ; + penlabels(1,2); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{R} +% I'm not enterily happy with this letter, but quite frankly, I don't +% know how else to make it. Please give me your suggestion. +% \begin{macrocode} + beginchar("R",A_w#,l_h#,0) ; "The letter R"; + unicir(w/2,P_t,(w/2,h-w/2),10) ; + rad := h-w+P_t ; + uniarc(rad,P_t,(w-rad,0),0,90,20) ; + pickup Unipensqu ; + lft top z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; + temp := w/2-rad ; + if temp>0 : + pickup pensquare xscaled temp yscaled P_t ; + lft top z3 = (1/2w,rad) ; drawdot z3 ; + fi; + penlabels(1,2,3) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{S} +% Just like the minuscle \textunibf{s}, this is a `slow' letter, i.e., +% it takes \MF{} quite some time to compute. +% \begin{macrocode} + beginchar("S",A_w#,l_h#,0) ; "The letter S" ; + temp := (h+P_t)/4 ; + uniarc(temp,P_t,(temp,temp),180,270,10) ; + uniarc(temp,P_t,(w-temp,temp),270,450,20) ; + uniarc(temp,P_t,(temp,h-temp),90,270,30) ; + uniarc(temp,P_t,(w-temp,h-temp),0,90,40) ; + pickup Unipensqu ; + bot lft z1 = (temp,0) ; bot rt z2 = (w-temp,0) ; draw z1--z2 ; + lft z3 = (temp,h/2) ; rt z4 = (w-temp,h/2) ; draw z3--z4 ; + top lft z5 = (temp,h) ; top rt z6 = (w-temp,h) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{T} +% Again --- simple! +% \begin{macrocode} + beginchar("T",A_w#,l_h#,0); "The letter T" ; + pickup Unipensqu ; + top z1 = (w/2,h) ; bot z2 = (w/2,0) ; draw z1--z2 ; + top lft z3 = (0,h) ; top rt z4 = (w,h) ; draw z3--z4 ; + penlabels(1,2,3,4); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{U} +% \emph{Font--jepody:} The character of the \universal{} font, that, +% when reflected gives \textunibf{U}. +% \begin{macrocode} + beginchar("U",A_w#,l_h#,0); "The letter U" ; + uniarc(w/2,P_t,(w/2,w/2),180,360,10) ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; + top rt z3 = (w,h) ; bot rt z4 = (w,w/2) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{V} +% See also the minuscle \textunibf{v}. +% \begin{macrocode} + beginchar("V",A_w#,l_h#,0); "The letter V" ; + unilne(P_t,(0,h),(w/2,P_t),1,1,10); + unilne(P_t,(w/2,P_t),(w,h),1,1,20); + uniarc(P_t,P_t,(w/2,P_t),180,360,30); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{W} +% Flippedy--flop. +% \begin{macrocode} + beginchar("W",M_w#,l_h#,0) ; "The letter W" ; + temp := .25*(w+P_t); + uniarc(temp,P_t,(temp,temp),180,360,10) ; + uniarc(temp,P_t,(w-temp,temp),180,360,20) ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,temp) ; draw z1--z2 ; + top z3 = (w/2,h) ; bot z4 = (w/2,temp) ; draw z3--z4 ; + top rt z5 = (w,h) ; bot rt z6 = (w,temp) ; draw z5--z6 ; + penlabels(1,2,3,4,5,6); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{X} +% This is a bit tricky --- see the minuscle \textunibf{x}. +% \begin{macrocode} + beginchar("X",l_h#,l_h#,0) ; "The letter X" ; + uniarc(h/2,P_t,(P_t/2,h/2),270,90,10); + uniarc(h/2,P_t,(w-P_t/2,h/2),90,270,20); + temp := (h-w+P_t)/2 ; + pickup pensquare xscaled temp yscaled P_t slanted slantratio ; + lft top z1 = (0,h) ; draw z1 ; + lft bot z2 = (0,0) ; draw z2 ; + rt top z3 = (w,h) ; draw z3 ; + rt bot z4 = (w,0) ; draw z4 ; + penlabels(1,2,3,4); + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{Y} +% \Newestchanges{v2.0}{98/08/01}{Character \textunibf{Y} changed.} +% This actually a bit different from \textunibf{y}, but it looks right. +% \begin{macrocode} + beginchar("Y",A_w#,l_h#,0); "The letter Y" ; + uniarc(w/2,P_t,(w/2,h-P_t),180,360,10) ; + pickup Unipensqu ; + top lft z1 = (0,h) ; drawdot z1 ; + top rt z2 = (w,h) ; drawdot z2 ; + top z3 = (w/2,h-w/2) ; bot z4 = (w/2,0) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{Z} +% Again a tricky letter. For more onm this please refer to the +% minuscle \textunibf{z}. +% +% Notice that the angle \texttt{phi} in this majuscle is not the +% same as in the minuscles \textunibf{z}, since this letter doesn't fit +% in a square, but is retangular. +% \begin{macrocode} + beginchar("Z",A_w#,l_h#,0) ; "The letter Z" ; + pickup Unipensqu ; + top lft z1 = (0,h) ; top rt z2 = (w-P_t,h) ; draw z1--z2 ; + bot lft z3 = (P_t,0) ; bot rt z4 = (w,0) ; draw z3--z4 ; + phi := angle((w,h-P_t)-(0,P_t)) ; + z5 = (P_t,P_t) ; z6 = z5 + P_t*(-sind(phi),cosd(phi)) ; + z7 = (w-P_t,h-P_t) ; z8 = z7 + P_t*(sind(phi),-cosd(phi)) ; + uniend(P_t,z5,90+phi,270,10); + uniend(P_t,z7,-90+phi,90,20); + fill z5--z6--z7--z8--cycle ; + penlabels(range 1 thru 8); + endchar; + +% \end{macrocode} +% \end{fontcode} +% As explain in the begining of the section, this file is one big +% \texttt{if...else...fi} loop to mak the generation of the strict +% font easier. +% +% The idea is, that if \texttt{strict} is \texttt{true}, then the main +% part of this file shouldn't be used, but rather \texttt{unilow.mf} +% should be loaded again, but with this time the characters should be +% placed where the majuscules should be. +% +% This is done by defining \texttt{code\_offset} to be the (negative) +% difference the ASCII code for \texttt{A} and \texttt{a}. After we +% have input \texttt{unilow.mf} once more, we reset +% \texttt{code\_offset}. +% \begin{macrocode} +else : + code_offset := ASCII"A" - ASCII"a" ; + input unilow ; + code_offset := 0 ; +fi ; + +% \end{macrocode} +%\iffalse +% +%\fi +%\iffalse +%<*dig> +%\fi +% \subsection{The Numbers --- (\texttt{unidig.mf})} +% \file{unidig.mf} +% +% I couldn't find any design of numbers, I could directly ascribe to +% Herbert Bayer. I, however, found some other examples, and from +% these, and my general conception of the font, I designed the +% numerals, as they are seen below. +% +% \begin{fontcode}{0} +% Perhaps this should have been a circle, but to destingice the zero +% from the majuscle {\uni O}, I chose to strecth it. +% \begin{macrocode} +beginchar("0",A_w#,l_h#,0) ; "The number 0" ; + uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; + uniarc(w/2,p_t,(w/2,w/2),180,360,20) ; + pickup unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; + top rt z3 = (w,h-w/2) ; bot rt z4 = (w,w/2) ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{1} +% Here we use the dimension \texttt{c\_d}, since the stem should be +% thee same lenght in the medium font as in the bold face one. +% \begin{macrocode} +beginchar("1",2c_d#,l_h#,0) ; "The number 1" ; + uniend(p_t,(w-p_t,h-p_t),0,90,10) ; + pickup unipensqu ; + lft top z1 = (0,h) ; rt top z2 = (w-p_t,h) ; draw z1--z2 ; + rt top z3 = (w,h-p_t) ; rt bot z4 = (w,0) ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{2} +% Again, this is a bit tricky, for the same reason as the minuscle +% {\uni z}. +% \begin{macrocode} +beginchar("2",A_w#,l_h#,0) ; "The number 2" ; + uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; + phi := angle((w,h-w/2)-(0,p_t)) ; + z1 = (w-p_t,h-w/2) ; z2 = z1 + p_t*(sind(phi),-cosd(phi)) ; + z3 = (p_t,p_t) ; z4 = z3 + p_t*(-sind(phi),cosd(phi)) ; + fill z1--z2--z3--z4--cycle ; + uniend(p_t,z1,270+phi,360,20) ; + uniend(p_t,z3,90+phi,270,30) ; + pickup unipensqu ; + bot lft z5 = (p_t,0) ; bot rt z6 = (w,0) ; draw z5--z6 ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{3} +% By first defining to paths similar to the two circle segments, it is +% possible to calculate the intersectionpoint, and thereby the angle +% \texttt{phi}, where the to segments meet, relative to one of the +% centers. This angle is then used to define the \emph{real} path, and +% the rightmost point of the middle bar. +% \begin{macrocode} +beginchar("3",A_w#,l_h#,0) ; "The number 3" ; + path arc_a, arc_b ; + arc_a = (w,h-w/2)..(w/2,h-w) ; arc_b = (w,w/2)..(w/2,w) ; + z3 = arc_a intersectionpoint arc_b ; phi := angle(z3-(w/2,w/2)) ; + uniarc(w/2,p_t,(w/2,h-w/2),-phi,180,10) ; + uniarc(w/2,p_t,(w/2,w/2),-180,phi,20) ; + pickup unipensqu ; + rt z1 = (w/2*(1+cosd(phi)),h/2) ; lft z2 = (w/2,h/2) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{4} +% One could argue, that the top left stroke should be vertical, but I +% chose to go for a $45^\circ$ slanted line, for aestethic reasons. +% \begin{macrocode} +beginchar("4",A_w#,l_h#,0) ; "The number 4" ; + z1 = (w-p_t,h-p_t) ; z2 = z1 + p_t*(-1/sqrt(2),1/sqrt(2)) ; + z3 = (p_t,h-w+p_t) ; z4 = z3 + p_t*(-1/sqrt(2),1/sqrt(2)) ; + fill z1--z2--z4--z3--cycle ; + uniend(p_t,z1,0,135,10) ; + uniend(p_t,z3,135,270,20) ; + pickup unipensqu ; + top rt z5 = (w,h-p_t) ; bot rt z6 = (w,0) ; draw z5--z6 ; + bot lft z7 = (p_t,h-w) ; bot rt z8 = (w,h-w) ; draw z7--z8 ; + penlabels(range 1 thru 8) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{5} +% This gave me some trouble. I originally wanted the arc to have a +% diameter the width of the character, but that meant, that the to +% horizontal lines of the font, came so close to each other, that it +% didn't look good. So I played a little with \texttt{rad}, and +% decided that the current value gave the nicest resault. +% \begin{macrocode} +beginchar("5",A_w#,l_h#,0) ; "The number 5" ; + rad := 9w/20 ; + uniarc(rad,p_t,(w-rad,rad),-150,90,10) ; + uniend(p_t,(p_t,h-p_t),90,180,20) ; + uniend(p_t,(p_t,2rad),180,270,30) ; + pickup unipensqu ; + top lft z1 = (p_t,2rad) ; top rt z2 = (w-rad,2rad) ; draw z1--z2 ; + bot lft z3 = (0,2rad) ; top lft z4 = (0,h-p_t) ; draw z3--z4 ; + top lft z5 = (p_t,h) ; top rt z6 = (w,h) ; draw z5--z6 ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{6} +% This was almost to easy --- a circle, an arc, and a line connecting +% them. +% \begin{macrocode} +beginchar("6",A_w#,l_h#,0) ; "The number 6" ; + unicir(w/2,p_t,(w/2,w/2),10) ; + uniarc(w/2,p_t,(w/2,h-w/2),60,180,20) ; + pickup unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,w/2) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{7} +% Apperently, this character could have the same problems as the +% \textuni{2}, but it didn't --- can you see why not? +% \begin{macrocode} +beginchar("7",A_w#,l_h#,0) ; "The number 7" ; + z1 = (w-p_t,h-p_t) ; phi := angle(z1) ; + uniend(p_t,z1,-90+phi,90,10) ; + z2 = z1 + p_t*(cosd(90-phi),-sind(90-phi)) ; + z3 = (p_t/cosd(90-phi),0) ; z4 = (0,0) ; + fill z1--z2--z3--z4--cycle ; + pickup unipensqu ; + top lft z5 = (0,h) ; top rt z6 = (w-p_t,h) ; draw z5--z6 ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{8} +% Ha ha, to circles, one on top of the other. Some may prefer if the +% bottom most circle had a slightly larger radius then the top most, +% but I believe that to be in conflict with the general idea of +% simplicity. +% \begin{macrocode} +beginchar("8",1/2*(l_h#+p_t#),l_h#,0) ; "The number 8" ; + unicir(w/2,p_t,(w/2,w/2),10) ; + unicir(w/2,p_t,(w/2,h-w/2),20) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{9} +% See above under \textuni{6}. +% \begin{macrocode} +beginchar("9",A_w#,l_h#,0) ; "The number 9" ; + unicir(w/2,p_t,(w/2,h-w/2),10) ; + uniarc(w/2,p_t,(w/2,w/2),-150,0,20) ; + pickup unipensqu ; + top rt z1 = (w,h-w/2) ; bot rt z2 = (w,w/2) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +%\iffalse +% +%\fi +%\iffalse +%<*spe> +%\fi +% \subsection{Specials --- \texttt{unispe.mf}} +% \file{unispe.mf} +% +% For these characters, I couldn't find any original design, +% so once again, I did some inter-- and extrapolation, plus I had some +% print--outs of other implenations of Herbert Bayers universal +% font. So once again, I am to blame for any aestethic judgements. +% +% \begin{fontcode}{\char"10} +% At first I thought I didn't had to do this character, but then I +% realized that you \emph{do} needed, since some words are spelled +% with some sort of accent over the ``i'', other then a single dot, +% e.g., \textunibf{na\"ive}. +% \begin{macrocode} +beginchar(hex"10",p_t#,x_h#,0) ; "The dotless letter i" ; + pickup unipensqu ; + bot lft z1 = (0,0) ; top lft z2 = (0,h) ; draw z1--z2; + penlabels(1,2); +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"11} +% Non single dot j's are not as frequent as those of i's, so for the +% sake of completness, if nothing else, this letter is included. +% \begin{macrocode} +beginchar(hex"11",p_t#,x_h#,p_d#) ; "The dotless letter j" ; + pickup unipensqu ; + bot lft z1 = (0,-d) ; top lft z2 = (0,h) ; draw z1--z2 ; + penlabels(1,2); +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"24} +% I couldn't make up my mind wether this should just be a \textunibf{s}, +% with a vertical bar through, or if I should make it differntly. In +% the end, I chose to make it different, since I think it looks best +% in the context of the font. +% \begin{macrocode} +beginchar("$",(l_h#-c_d#+p_t#)/2,l_h#,c_d#) ; "The dollar sign ($)" ; + uniarc(w/2,p_t,(w/2,w/2),180,450,10) ; + uniarc(w/2,p_t,(w/2,h-c_d-w/2),0,270,20) ; + pickup unipensqu ; + top z1 = (w/2,h) ; bot z2 = (w/2,-d) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"26} +% You could argue back and forth on the shape of the ampersand, but I +% decided to go for a simple design. +% \begin{macrocode} +beginchar("&",(l_h#+p_t#)/2+c_d#,l_h#,c_d#) ; "The ampersand (&)" ; + rad := (w-c_d)/2 ; + unicir(rad,p_t,(rad,h-rad),10) ; + uniarc(rad,p_t,(rad,rad),0,270,20) ; + pickup unipensqu ; + lft bot z1 = (rad,0) ; rt bot z2 = (w,0) ; draw z1--z2 ; + rt top z3 = (w-c_d,rad) ; rt bot z4 = (w-c_d,-d) ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{?} +% I did have some considerations concerning this. Since I had kind of +% decided to make avery junction ``smooth'', this also had to +% be. However, that meant, that my original plan, to make this letter +% as wide as an \textunibf{A}, didn't work, so I had to make it less +% wide, which in the end does look better. +% \begin{macrocode} +beginchar("?",l_h#-5c_d#/2,l_h#,0) ; "The question mark (?)" ; + temp := angle((P_T,-w/2)) - 0.01 ; + uniarc(w/2,P_T,(w/2,h-w/2),temp,180,10) ; + uniend(P_T,((w+P_T)/2,h-w),90,180,20) ; + uniend(P_T,((w+P_T)/2,h-w+P_T),270,360+temp,30) ; + pickup UniPensqu ; + top z1 = (w/2,h-w) ; bot z2 = (w/2,2P_T) ; draw z1--z2 ; + pickup UniPencir ; + bot z3 = (w/2,0) ; drawdot z3 ; + penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"3E} +% These Spanish special letters, are just rotations, so nothing +% special is going on here. +% \begin{macrocode} +beginchar(spanish_query,l_h#-5c_d#/2,x_h#,p_d#) ; "The Spanish query" ; + temp := angle((-P_T,w/2))-0.01 ; + uniarc(w/2,P_T,(w/2,-d+w/2),temp,360,10) ; + uniend(P_T,((w-P_T)/2,-d+w),270,360,20) ; + uniend(P_T,((w-P_T)/2,-d+w-P_T),90,temp,30) ; + pickup UniPensqu ; + bot z1 = (w/2,-d+w) ; top z2 = (w/2,h-2P_T) ; draw z1--z2 ; + pickup UniPencir ; + top z3 = (w/2,h) ; drawdot z3 ; + penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"3C} +% See above. +% \begin{macrocode} +beginchar(spanish_shriek,P_T#,x_h#,p_d#) ; "The Spanish shriek" ; + pickup UniPencir ; top z1 = (w/2,h) ; drawdot z1 ; + pickup UniPensqu ; top z2 = (w/2,h-2P_T) ; bot z3 = (w/2,-d) ; + draw z2--z3 ; penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +%\iffalse +% +%\fi +%\iffalse +%<*pun> +%\fi +% \subsection{Punctuations --- \texttt{unipun.mf}} +% \file{unipun.mf} +% +% This is the programs for general punctuation marks, ranging from +% period to ast. +% +% \begin{fontcode}{\char"21} +% Quite a simple character. Notice the use of \texttt{unipencir}. +% \begin{macrocode} +beginchar("!",P_T#,l_h#,0) ; "The exclamation mark (!)" ; + pickup UniPensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,2P_T) ; draw z1--z2 ; + pickup UniPencir ; + bot lft z3 = (0,0) ; drawdot z3 ; + penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{(} +% Here, and in the next character ()) we don't use pens, since we can +% get a much better resault using the \MF{} path macro \texttt{...} . +% \begin{macrocode} +beginchar("(",x_w#/2,l_h#,p_d#) ; "The left paranthesis (()" ; + z1 = (w,h) ; z2 = (p_t,(h-d)/2) ; z3 = (w,-d) ; + z4 = (w-p_t,-d) ; z5 = (0,(h-d)/2) ; z6 = (w-p_t,h) ; + fill z1..z2..z3--z4..z5..z6--cycle ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{)} +% \begin{macrocode} +beginchar(")",x_w#/2,l_h#,p_d#) ; "The right paranthesis ())" ; + z1 = (p_t,h) ; z2 = (w,(h-d)/2) ; z3 = (p_t,-d) ; + z4 = (0,-d) ; z5 = (w-p_t,(h-d)/2) ; z6 = (0,h) ; + fill z1..z2..z3--z4..z5..z6--cycle ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% +% \begin{fontcode}{\#} +% I never really got satisfied with this letter, but this is the best +% I could do --- who ever uses a \# anyway! +% \begin{macrocode} +beginchar("#",x_w#,x_h#,0) ; "The hash mark (#)" ; + unilne(p_t,(0,0),(w/2,h),1,1,10) ; + unilne(p_t,(w/2,0),(w,h),1,1,20) ; + pickup unipensqu ; + top lft z1 = (0,(h-c_d)/2) ; top rt z2 = (w,(h-c_d)/2) ; + bot lft z3 = (0,(h+c_d)/2) ; bot rt z4 = (w,(h+c_d)/2) ; + draw z1--z2 ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\%} +% Among other characters, this one made me define a dimension called +% \texttt{c\_d}, which is to be used for all kinds of curves. The idea +% is that, some sizes curves should depend on the weight of the font, +% and others not. Those that \emph{shouldn't} will use \texttt{c\_d}. +% \begin{macrocode} +beginchar("%",x_w#,l_h#,0) ; "The percent sign (%)" ; + temp := 3c_d/2 ; + unicir(temp,p_t,(temp,h-temp),10) ; + unicir(temp,p_t,(w-temp,temp),20) ; + unilne(p_t,(0,0),(w,h),1,1,30) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{'} +% Agian we have a translated comma --- the apostrophe. +% \begin{macrocode} +beginchar("'",2P_T#,l_h#,0) ; "The apostrophe (')" ; + uniend(w/2,(w/2,h-w/2),0,180,10) ; + z1 = (0,h-w/2) ; z2 = (w,h-w/2) ; z3 = (0,h-3w/2) ; + fill z1--z2--z3--cycle ; penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{*} +% This isn't really complicated execpt for the value of \texttt{temp}, +% which insures that the top of ast will be in the character. +% \begin{macrocode} +beginchar("*",x_w#,l_h#,0) ; "The ast (*)" ; + path rect ; + temp := h-(w*sind(60)-p_t*cosd(60))/2 ; + pickup unipensqu ; + lft z1 = (0,temp) ; rt z2 = (w,temp) ; draw z1--z2 ; + rect = (bot lft z1)--(top lft z1)--(top rt z2)--(bot rt z2)--cycle ; + fill rect rotatedabout((w/2,temp),60) ; + fill rect rotatedabout((w/2,temp),120) ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{+} +% Plus and minus, now that's easy. +% \begin{macrocode} +beginchar("+",x_w#,x_h#,0) ; "The plus sign (+)" ; + pickup unipensqu ; + lft z1 = (0,w/2) ; rt z2 = (w,w/2) ; draw z1--z2 ; + bot z3 = (w/2,0) ; top z4 = (w/2,w) ; draw z3--z4 ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{,} +% Incedently, the apostrophs (both single and reversed), are +% just translations and reflections of the comma. +% +% \textsl{Mathemathical problem:} Work out which algebraic group the +% characters `\textunibf{,}', `\textunibf{'}', and `\textunibf{`}', +% belongs to? +% \begin{macrocode} +beginchar(",",2P_T#,2P_T#,2P_T#) ; "The punctuation ," ; + uniend(w/2,(w/2,0),0,180,10) ; + z1 = (0,0) ; z2 = (w,0) ; z3 = (0,-d) ; + fill z1--z2--z3--cycle ; penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{-} +% Minus? --- isn't it the opposite of plus? +% \begin{macrocode} +beginchar("-",4x_w#/5,x_h#,0) ; "The hyphen (-)" ; + pickup unipensqu ; + lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ; + penlabels(1,2); +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{.} +% Wow, a dot! +% \begin{macrocode} +beginchar(".",2P_T#,2P_T#,0) ; "The punctuation ." ; + uniend(w/2,(w/2,h/2),0,360,10) ; +% pickup UniPencir ; lft bot z1 = (0,0) ; drawdot z1 ; penlabels(1); +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{/} +% This is a nice utilization of \texttt{unilne}. +% \begin{macrocode} +beginchar("/",x_w#,l_h#,0) ; "The slash (/)" ; + unilne(p_t,(0,0),(w,h),1,1,10) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{:} +% Wauw, \emph{two} dots --- cool! +% \begin{macrocode} +beginchar(":",2P_T#,x_h#,0) ; "The punctuation :" ; + uniend(w/2,(w/2,h-w/2),0,360,10) ; + uniend(w/2,(w/2,w/2),0,360,20) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{;} +% Again, this is straight forward. +% \begin{macrocode} +beginchar(";",2P_T#,x_h#,2P_T#) ; "The punctuation ;" ; + uniend(w/2,(w/2,h-w/2),0,360,10) ; + uniend(w/2,(w/2,0),0,180,20) ; + z2 = (0,0) ; z3 = (w,0) ; z4 = (0,-d) ; fill z2--z3--z4--cycle ; + penlabels(1,2,3,4) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"3D} +% These characters are rediculously simple. +% \begin{macrocode} +beginchar("=",x_w#,x_h#,0) ; "The equal sign (=)" ; + pickup unipensqu ; + top lft z1 = (0,(h-p_t)/2) ; top rt z2 = (w,(h-p_t)/2) ; + bot lft z3 = (0,(h+p_t)/2) ; bot rt z4 = (w,(h+p_t)/2) ; + draw z1--z2 ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{@} +% Now this was a bit of a challenge. It is clear, that the left stroke +% should be a straight line tarveling all the way to the baseline, but +% how big should the small circle be. I decided to go for the largest +% one, that didn't touch or intersected the outer arc more then one +% place, i.e., at the far left. +% \begin{macrocode} +beginchar("@",l_h#,l_h#,0) ; "The at sign (@)" ; + uniarc(w/2,p_t,(w/2,h/2),0,240,10) ; + unicir(w/3,p_t,(2w/3,w/3),20) ; + pickup unipensqu ; + top rt z1 = (w,w/2) ; bot rt z2 = (w,0) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{[} +% Notice the soft corners. This is ofcourse accomplieshed with +% \texttt{uniend}, which turned out to be a very nice macro. +% \begin{macrocode} +beginchar("[",3p_t#,l_h#,p_d#) ; "The left bracket ([)" ; + uniend(p_t,(p_t,h-p_t),90,180,10) ; + uniend(p_t,(p_t,-d+p_t),180,270,20) ; + pickup unipensqu ; + top lft z1 = (p_t,h) ; top rt z2 = (w,h) ; draw z1--z2 ; + top lft z3 = (0,h-p_t) ; bot lft z4 = (0,-d+p_t) ; draw z3--z4 ; + bot lft z5 = (p_t,-d) ; bot rt z6 = (w,-d) ; draw z5--z6 ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{]} +% Speaking of reflections. +% \begin{macrocode} +beginchar("]",3p_t#,l_h#,p_d#) ; "The right braket (])" ; + uniend(p_t,(w-p_t,h-p_t),0,90,10) ; + uniend(p_t,(w-p_t,-d+p_t),270,360,20) ; + pickup unipensqu ; + top lft z1 = (0,h) ; top rt z2 = (w-p_t,h) ; draw z1--z2 ; + top rt z3 = (w,h-p_t) ; bot rt z4 = (w,-d+p_t) ; draw z3--z4 ; + bot lft z5 = (0,-d) ; bot rt z6 = (w-p_t,-d) ; draw z5--z6 ; + penlabels(range 1 thru 6) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{`} +% Who is this `comma' character --- he keeps poping up the strangest +% places. +% \begin{macrocode} +beginchar("`",2P_T#,l_h#,0) ; "The reversed apostroph (`)" ; + uniend(w/2,(w/2,h-w),180,360,10) ; + z1 = (0,h) ; z2 = (0,h-w) ; z3 = (w,h-w) ; fill z1--z2--z3--cycle ; + penlabels(1,2,3) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{--} +% Ah, a horizontal line --- how fascinating! +% \begin{macrocode} +beginchar(hex"7B",m_w#,x_h#,0) ; "The en-dash (--)" ; + pickup unipensqu ; + lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{---} +% And another horizontal line --- and it's even longer then the +% previous one. +% \begin{macrocode} +beginchar(hex"7C",M_w#,x_h#,0) ; "The em-dash (---)" ; + pickup unipensqu ; + lft z1 = (0,h/2) ; rt z2 = (w,h/2) ; draw z1--z2 ; + penlabels(1,2) ; +endchar; + +% \end{macrocode} +% \end{fontcode} +%\iffalse +% +%\fi +%\iffalse +%<*acc> +%\fi +% \subsection{Accents --- \texttt{uniacc.mf}} +% \file{uniacc.mf} +% \begin{fontcode}{\char"12} +% Even though you use a reversed apostrophe in \LaTeX{} to get this +% accent, the accent shouldn't look like a apostophe, that would be +% far to clumsy. So instead we \emph{rotate} a comma and translate it +% --- algebraic groups again! +% \begin{macrocode} +beginchar(hex"12",x_w#,l_h#,0) ; "The accent `" ; + uniend(P_T/2,(w/2,a_h+P_T/2),90,270,10) ; + z1 = (w/2,a_h+P_T) ; z2 = (w/2,a_h) ; z3 = (w/2+P_T,a_h) ; + fill z1--z2--z3--cycle ; penlabels(1,2,3) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"13} +% See above. +% \begin{macrocode} +beginchar(hex"13",x_w#,l_h#,0) ; "The accent '" ; + uniend(P_T/2,(w/2,a_h+P_T/2),-90,90,10) ; + z1 = (w/2,a_h+P_T) ; z2 = (w/2,a_h) ; z3 = (w/2-P_T,a_h) ; + fill z1--z2--z3--cycle ; penlabels(1,2,3) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"14} +% \begin{macrocode} +beginchar(hex"14",x_w#,l_h#,0) ; "The accent hachek" ; + z1 = (w/2,a_h+p_t) ; uniend(p_t,z1,225,315,10) ; + z2 = z1 + p_t*(-1,-1)/sqrt(2) ; z3 = z1 + p_t*(-1,1) ; + z4 = z3 + (-p_t*sqrt(2),0) ; path rombe ; + rombe := z1--z2--z4--z3--cycle ; fill rombe ; + fill rombe reflectedabout ((w/2,0),(w/2,h)) ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"15} +% \begin{macrocode} +beginchar(hex"15",x_w#,l_h#,0) ; "The accent breve" ; + rad := 3p_t/2 ; uniarc(rad,p_t,(w/2,a_h+rad),180,360,10) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"16} +% \begin{macrocode} +beginchar(hex"16",x_w#,a_h#+p_t#,0) ; "The accent macron (bar)" ; + pickup unipensqu ; + bot lft z1 = (w/2-2p_t,a_h) ; bot rt z2 = (w/2+2p_t,a_h) ; + draw z1--z2 ; penlabels(1,2) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"17} +% \begin{macrocode} +beginchar(hex"17",A_w#+4/3*(l_h#-x_h#)*slantratio,l_h#,0) ; + "The accent circle" ; + rad := P_T ; unicir(rad,p_t,(w/2,h-rad),10) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"18} +% \begin{macrocode} +beginchar(hex"18",x_w#,x_h#,2c_d#) ; "The accent cidelia" ; + uniarc(d/2,2P_T/3,(w/2+d/4,-d/2),90,270,10) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"20} +% \begin{macrocode} +phi := 15 ; tmp# := 3c_d# ; define_pixels(tmp) ; +beginchar(hex"20",tmp#*cosd(phi)+p_t#*sind(phi),l_h#,0) ; + "The accent bar over l" ; + z1 = (0,(h+p_t*cosd(phi)-tmp*sind(phi))/2) ; + z2 = (p_t*sind(phi),(h-p_t*cosd(phi)-tmp*sind(phi))/2) ; + z3 = (w,(h-p_t*cosd(phi)+tmp*sind(phi))/2) ; + z4 = (w-p_t*sind(phi),(h+p_t*cosd(phi)+tmp*sind(phi))/2) ; + fill z1--z2--z3--z4--cycle ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"5E} +% \begin{macrocode} +beginchar(hex"5E",x_w#,l_h#,0) ; "The accent hat" ; + z1 = (w/2,a_h+p_t) ; uniend(p_t,z1,45,136,10) ; + z2 = z1 + p_t*(-1,1)/sqrt(2) ; z3 = z1 + p_t*(-1,-1) ; + z4 = z3 + (-p_t*sqrt(2),0) ; path rombe ; + rombe := z1--z2--z4--z3--cycle ; fill rombe ; + fill rombe reflectedabout ((w/2,0),(w/2,h)) ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"5F} +% \begin{macrocode} +beginchar(hex"5F",x_w#,l_h#,0) ; "The accent dot" ; + pickup UniPencir ; bot z1 = (w/2,a_h) ; drawdot z1 ; penlabels(1) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"7D} +% \begin{macrocode} +beginchar(hex"7D",x_w#,l_h#,0) ; "The accent ''" ; + rad := P_T/2 ; + uniend(rad,(w/2-rad,a_h+rad),-90,90,10) ; + uniend(rad,(w/2+P_T,a_h+rad),-90,90,20) ; + z1 = (w/2-rad-P_T,a_h) ; z2 = (w/2-rad,a_h) ; + z3 = (w/2-rad,a_h+P_T) ; fill z1--z2--z3--cycle ; + z4 = (w/2,a_h) ; z5 = (w/2+P_T,a_h) ; + z6 = (w/2+P_T,a_h+P_T) ; fill z4--z5--z6--cycle ; + penlabels(range 1 thru 6) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"7E} +% \begin{macrocode} +beginchar(hex"7E",x_w#,l_h#,0) ; "The accent ~" ; + rad := (w*sqrt(2)+p_t)/4 ; temp := (2w-p_t*sqrt(2))/8 ; + uniarc(rad,p_t,(w/2+temp,a_h+rad),225,315,10) ; + uniarc(rad,p_t,(w/2-temp,a_h+rad-2temp),45,135,20) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"7F} +% \begin{macrocode} +beginchar(hex"7F",x_w#,l_h#,0) ; "The accent umlout (double dot)" ; + pickup UniPencir ; + bot z1 = (w/2-P_T,a_h) ; bot z2 = (w/2+P_T,a_h) ; + drawdot z1 ; drawdot z2 ; penlabels(1,2) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +%\iffalse +% +%\fi +%\iffalse +%<*lig> +%\fi +% \subsection{Ligatures --- \texttt{unilig.mf}} +% \file{unilig.mf} +% +% \begin{fontcode}{SS} +% If we are making a small caps shaped font, then we need to make an +% upper case version of the german double s (\ss), so we start of +% testing if the \texttt{caps} flag is set. +% \begin{macrocode} +if caps: + beginchar(hex"19",5/2x_w#,x_h#,0) ; "Ligature SS" ; + temp := (h+p_t)/4 ; + uniarc(temp,p_t,(temp,temp),180,270,10) ; + uniarc(temp,p_t,(2w/5-temp,temp),270,450,20) ; + uniarc(temp,p_t,(temp,h-temp),90,270,30) ; + uniarc(temp,p_t,(2w/5-temp,h-temp),0,90,40) ; + pickup unipensqu ; + bot lft z1 = (temp,0) ; bot rt z2 = (2w/5-temp,0) ; + lft z3 = (temp,h/2) ; rt z4 = (2w/5-temp,h/2) ; + top lft z5 = (temp,h) ; top rt z6 = (2w/5-temp,h) ; + draw z1--z2 ; draw z3--z4 ; draw z5--z6 ; + penlabels(1,2,3,4,5,6) ; + currentpicture := currentpicture + (currentpicture shifted + (3/5w,0)) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"19} +% If we are not making a small caps font, then the usual german double +% s is made. +% \begin{macrocode} +else: + beginchar(hex"19",(l_h#+3p_t#)/2,l_h#,p_t#) ; "Ligature ss" ; + rad := (w-p_t)/2 ; + uniarc(rad,p_t,(p_t+rad,h-rad),-90,180,10) ; + uniarc(rad,p_t,(p_t+rad,rad),-90,90,20) ; + pickup unipensqu ; + top lft z1 = (p_t,h-rad) ; bot lft z2 = (p_t,-d) ; draw z1--z2 ; + lft z3 = (0,h/2) ; rt z4 = (w-rad,h/2) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar ; +fi ; + +% \end{macrocode} +% \end{fontcode} +% The next three characters should not be made in a small caps font, +% so these are all put in side the conditinal +% \begin{verbatim} +% if not caps : +% \end{verbatim} +% However, we need to put small caps versions of these letters in the +% position of these charcaters, so we use a little trick later on to +% do this. +% +% And if we are making a \emph{strict} shaped font, then we need to +% put these characters into two slots each, with three slots between +% the to replicas of the character. In that case, we first evaluate +% the code once, then if \texttt{strict} is false, we go on in the +% code, otherwise, we evaluate the code once more, \emph{but} the +% characters is put into new slots 3 slots later then before, since +% \texttt{code\_offset} now is 3. Finally in the end we reset +% \texttt{code\_offset}. +% +% This trick is used also in \texttt{uniext.mf} and +% \texttt{unilow.mf}. +% +% \begin{fontcode}{\char"1A} +% This is just a combination of an \textunibf{a} and \textunibf{e}, +% which we earlier on saved in the picture variables \texttt{a\_pic} +% and \texttt{e\_pic}. +% \begin{macrocode} +if not caps : + for temp = 1,2 : + if temp = 2 : code_offset := 3 ; fi ; + beginchar(hex"1A",2x_w#-p_t#,x_h#,0) ; "Ligature ae" ; + currentpicture := a_pic + ( e_pic shifted ((w-p_t)/2,0)) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"1B} +% This is just a compinition of an \textunibf{o} and +% \textunibf{e}. The \textunibf{e} we saved earlier on in the picture +% variable \texttt{e\_pic}. The \textunibf{o} part is drawn anew. +% \begin{macrocode} + beginchar(hex"1B",2x_w#-p_t#,x_h#,0) ; "Ligature oe" ; + unicir(h/2,p_t,(h/2,h/2),10) ; + currentpicture := currentpicture + (e_pic shifted ((w-p_t)/2,0)) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"1C} +% This is really a simple letter. It utilizes the to macros +% \texttt{unicir} and \texttt{unilne} in a very nice way, I think. +% \begin{macrocode} + beginchar(hex"1C",x_w#,x_h#,0) ; "Ligature o/" ; + unicir(w/2,p_t,(w/2,h/2),10) ; + unilne(p_t,(0,0),(w,h),1,1,20) ; + endchar ; + exitif (not strict) ; + if temp = 2 : code_offset := 0 ; fi ; + endfor ; +fi ; + +% \end{macrocode} +% \end{fontcode} +% Since we don't want any majusculues in the \emph{strict} shaped +% font, the next three characteres is only generated if +% \texttt{strict} is \texttt{false}. +% +% Since we have to make two version of the majuscules below in a small +% caps font, we set up an \texttt{fot} loop. The trick is this: The +% loop while always execute once, so the characters will always be +% made in the original size. Now, if we are making a small caps font, +% then the loop will execute once more, and we call the macro +% \texttt{do\_font} (\texttt{temp = 2}), so that the new characters +% will have the right dimensions. +% \begin{macrocode} +if not strict : + for temp = 1,2 : + if temp = 2 : do_caps(-3) ; fi ; + +% \end{macrocode} +% \begin{fontcode}{\char"1D} +% It wouln't make any sense to just do a combinition of \textunibf{A} +% and \textunibf{E}, as were done in minuscules above, so we draw the +% whole letter anew. +% \begin{macrocode} + beginchar(hex"1D",M_w#,l_h#,0) ; "Ligature AE" ; + uniarc(w/2,P_t,(w/2,h-w/2),90,180,21) ; + uniend(P_t,((w+P_t)/2,P_t),180,270,30) ; + pickup Unipensqu ; + top lft z1 = (w/2,h) ; top rt z2 = (w,h) ; + top lft z3 = (0,h-w/2) ; bot lft z4 = (0,0) ; + lft z5 = (0,h/2) ; rt z6 = (w,h/2) ; + bot lft z7 = ((w+P_t)/2,0) ; bot rt z8 = (w,0) ; + top z9 = (w/2,h) ; bot z10 = (w/2,P_t) ; + draw z1--z2 ; draw z3--z4 ; draw z5--z6 ; + draw z7--z8 ; draw z9--z10 ; + penlabels(range 1 thru 10) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"1E} +% Again, a simple combination of \textunibf{O} and \textunibf{E}, +% wouldn't work. +% \begin{macrocode} + beginchar(hex"1E",M_w#,l_h#,0) ; "Ligature OE" ; + uniarc(h/2,P_t,(h/2,h/2),90,270,10) ; + pickup Unipensqu ; + top lft z1 = (h/2,h) ; top rt z2 = (w,h) ; draw z1--z2 ; + lft z3 = (h/2,h/2) ; rt z4 = (w,h/2) ; draw z3--z4 ; + bot lft z5 = (h/2,0) ; bot rt z6 = (w,0) ; draw z5--z6 ; + top z7 = (h/2,h) ; bot z8 = (h/2,0) ; draw z7--z8 ; + penlabels(range 1 thru 8) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"1F} +% What a said above the minuscule \textunibf{\o} also goes for this +% letter, since this is nothing but an enlargement of that character. +% \begin{macrocode} + beginchar(hex"1F",l_h#,l_h#,0) ; "Liguture O/" ; + unicir(w/2,P_t,(w/2,h/2),10) ; + unilne(P_t,(0,0),(w,h),1,1,20) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% This is where it gets tricky. First we check to see if we are +% maiking an small caps font, and if not so, we should exit the loop +% right away, so that we don't screw up the minuscules we already have +% made above. If, however, we are making a small caps font, we should, +% after the second run, restore the dimensions to it's original state. +% \begin{macrocode} + exitif (not caps) ; + if temp = 2 : end_do_caps ; fi ; + endfor ; +fi ; + +% \end{macrocode} +%\iffalse +% +%\fi +%\iffalse +%<*ext> +%\fi +% \subsection{Extras --- \texttt{uniext.mf}} +% \file{uniext.mf} +% +% Please notice I included \textunibf{\char"0B}, \textunibf{\char"0C}, +% \textunibf{\char"0D}, and \textunibf{\char"0E}, which isn't +% standard Computer Modern Roman policy. See more below. +% +% \Newestchanges{v2.0}{98/08/01}{Some of the \textunibf{bauhaus} symbols +% that where avaliable in v1.0, has been taken out.} +% The first part of this file is some symbols relevant to the +% \textunibf{bauhaus} school. Please notice that some of the symbols +% present in version~1.0 has been taken out\footnote{If you have used +% version~1.0 of this font, and liked those characters and found them +% useful, you should e--mail me \texttt{} and let me +% know. If I get enough letters on this I will incorporate them again +% in future releases.}, since the were seldomly used, and it made the +% font contain exactly 128 characters. +% +% These characters should \emph{not} be slanted in a slanted shaped +% font, hence we redefine \texttt{currenttrans} to \texttt{identity}, +% just before the next character, and resets it after the last +% character. Also notice that \textuni{\bauhead} and +% \textuni{\bauforms} may take some time to generate. +% \begin{macrocode} +currenttransform := identity ; + +% \end{macrocode} +% +% \begin{fontcode}{\char"00} +% The next three characters are really not the complicated or useful +% by themselves, but if you combine them, maybe even with the +% \textsf{color} package of \LaTeX{}, you can really add some +% \textunibf{bauhaus} flavour to your document. +% +% The square, ofcourse is obvious. +% \begin{macrocode} +beginchar(hex"00",l_h#,l_h#,0) ; "The filled square symbol" ; + z1 = (0,0) ; z2 = (w,0) ; z3 = (w,h) ; z4 = (0,h) ; + fill z1--z2--z3--z4--cycle ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"01} +% Also four vectors are defined, put translated a bit, and another +% path macro --- it is amazing how much you can do with so little. +% \begin{macrocode} +beginchar(hex"01",l_h#,l_h#,0) ; "The filled circle symbol" ; + z1 = (w,h/2) ; z2 = (w/2,h) ; z3 = (0,h/2) ; z4 = (w/2,0) ; + fill z1..z2..z3..z4..cycle ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"02} +% Maybe every side of this trangle should be of the same length, mut +% then I had to make the triangle either lower, or wider then the +% square and circle. I couldn't decide, so I went for equal character +% dimensions --- so I believe in equality, sue me! +% \begin{macrocode} +beginchar(hex"02",l_h#,l_h#,0) ; "The filled triangle symbol" ; + z1 = (0,0) ; z2 = (w,0) ; z3 = (w/2,h) ; + fill z1--z2--z3--cycle ; + penlabels(1,2,3) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"03} +% This is a typical \textuni{bauhaus} symbol. I think it is very +% beautiful. +% +% First we draw the surrounding circle. +% \begin{macrocode} +beginchar(hex"03",2l_h#,2l_h#,0) ; "The bauhaus-head symbol" ; + unicir(w/2,2c_d/9,(w/2,w/2),40) ; +% \end{macrocode} +% Then we define some horizontal variables $a_{1\ldots6}$ and some +% vertical variables $b_{1\ldots8}$. +% \begin{macrocode} + a1 := .702h ; a2 := .561h ; a3 := .491h ; a4 := .351h ; + a5 := .272h ; a6 := .140h ; + b1 := .202w ; b2 := .307w ; b3 := .412w ; b4 := .447w ; + b5 := .465w ; b6 := .518w ; b7 := .588w ; b8 := .623w ; +% \end{macrocode} +% Then we define the vectors needed for the eye, and draw the eye. +% \begin{macrocode} + temp := c_d/6 ; pickup pensquare scaled temp ; + top lft z1 = (b1,a1) ; top rt z2 = (b2,a1) ; draw z1--z2 ; + bot rt z3 = (b4,a3) ; top rt z4 = (b4,a2) ; draw z3--z4 ; + z5 = (b2,a1) ; z6 = (b4,a1) ; z7 = (b4,a2) ; z8 = (b2,a2) ; + fill z5--z6--z7--z8--cycle ; +% \end{macrocode} +% Then we define the vectors needed for the nostril, and draw it. We +% still use the pen used for the edges of the eye. +% \begin{macrocode} + lft bot z9 = (b4,a4) ; lft bot z10 = (b7,a4) ; draw z9--z10 ; +% \end{macrocode} +% Next up is the chin. Again the same pen. +% \begin{macrocode} + lft bot z11 = (b2,a6) ; rt bot z12 = (b6,a6) ; draw z11--z12 ; +% \end{macrocode} +% Now it's time for the lips. They need to be thicker then the chin +% and edges of the eye, so we pickup a new pen. +% \begin{macrocode} + temp := 3c_d/5 ; pickup pensquare scaled temp ; + lft top z13 = (b5,a5) ; rt top z14 = (b6,a5) ; draw z13--z14 ; +% \end{macrocode} +% It's time for the lower part of the face. Here we don't need to find +% strange paths or the like, so we do it all with a \texttt{fill} +% command. +% \begin{macrocode} + z15 = (b6,a4) ; z16 = (b7,a4) ; z17 = (b7,a6) ; z18 = (b6,a6) ; + fill z15--z16--z17--z18--cycle ; +% \end{macrocode} +% Since it is not know where the forehead will end at the top, or +% where the nect will end in the bottom, we define some temporay +% paths, and make up the real ones from those. +% +% First we need to declare the paths. +% \begin{macrocode} + path noselft, nosert, necklft, neckrt ; + path headcircle , parttop, partbot; +% \end{macrocode} +% Then we build five temporary paths, one for each side of the +% forehead and neck, and one for the surronding circle. +% \begin{macrocode} + z19 = (b7,a4) ; z20 = (b7,h) ; noselft = z19--z20 ; + z21 = (b8,h) ; z22 = (b8,a4) ; nosert = z21--z22 ; + z23 = (b3,a6) ; z24 = (b3,0) ; necklft = z23--z24 ; + z25 = (b6,0) ; z26 = (b6,a6) ; neckrt = z25--z26 ; + z27 = (w/2,h) ; z28 = (w,h/2) ; z29 = (w/2,0) ; z30 = (0,h/2) ; + headcircle := z27..z28..z29..z30..cycle ; +% \end{macrocode} +% Now we can determine the intersection points between our temporary +% paths and the circle, and define the vectors we need. +% +% We also find the parts of the path \texttt{headcircle} that are +% relevant for our to areas we need to fill. At last we can fill the +% areas. +% \begin{macrocode} + z31 = noselft intersectiontimes headcircle ; + z32 = nosert intersectiontimes headcircle ; + parttop = subpath(y31,y32) of headcircle ; + z33 = neckrt intersectiontimes headcircle ; + z34 = necklft intersectiontimes headcircle ; + partbot = subpath(y34,y33) of headcircle ; + fill z19--parttop--z22--cycle ; + fill z23--partbot--z26--cycle ; + penlabels(range 1 thru 34) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"04} +% \Newestchanges{v2.0}{98/08/01}{Joseph Collins came up with the +% analytic solution --- thanks JC.} +% This is an interresting character. In version~1.0, I posed it as an +% mathemathical puzzle, and engourage people to work on it, and if +% they came up with a solution, pass it on to me. Well, Joseph Collins +% \index{Collins, Joseph} did just that, and for this I owe him many +% thanks. For more details on the problem and its solution, take a +% look in appendix~\ref{app:solu}. +% +% First we define some pen sizes we want to use, the variable +% \texttt{phi} and draw the circle around the character. +% \begin{macrocode} +beginchar(hex"04",2l_h#,2l_h#,0) ; "The bauhaus-forms symbol" ; + phi := 36.673 ; + thn_pen := 2c_d/9 ; med_pen := 3c_d/9 ; thk_pen := 4c_d/9 ; + unicir(w/2,thn_pen,(w/2,w/2),20) ; +% \end{macrocode} +% Then we define the three vertices of the triangle --- points $A,B,C$ +% in the notation of appendix~\ref{app:solu} --- and draw the curved +% ends there. +% \begin{macrocode} + z1 = (thn_pen+med_pen,h/2) ; + z2 = (.6433w-med_pen,.9790h-med_pen) ; + z3 = (.6433w-med_pen,.0210h+med_pen) ; + uniend(med_pen,z1,phi+90,270-phi,30) ; + uniend(med_pen,z2,0,phi+90,40) ; + uniend(med_pen,z3,270-phi,360,50) ; +% \end{macrocode} +% After this, we calculate the rest of the points needed for the top +% most edge of the triangle, line $|AC|$. Then we reflect it +% horizontaly to get the bottom most line $|AB|$. +% +% Then we draw the vertical line $|BC|$ via a pen. +% \begin{macrocode} + z4 = z1 + med_pen*(-sind(phi),cosd(phi)) ; + z5 = z2 + med_pen*(-sind(phi),cosd(phi)) ; + path sl_line ; sl_line = z1--z4--z5--z2--cycle ; fill sl_line ; + fill sl_line reflectedabout((0,h/2),(w,h/2)) ; + pickup pensquare scaled med_pen ; + lft bot z6 = z2 ; lft top z7 = z3 ; draw z6--z7 ; +% \end{macrocode} +% Now it's time for the four vertices $P,Q,R,S$ of the square. Again +% we draw the cured ends at those four vertices. This time we use a +% thicker pen. +% \begin{macrocode} + z8 = (.3687w+thk_pen,.2254h+thk_pen) ; + z9 = (.9179w-thk_pen,.2254h+thk_pen) ; + z10 = (.9179w-thk_pen,.7746h-thk_pen) ; + z11 = (.3687w+thk_pen,.7746h-thk_pen) ; + uniend(thk_pen,z8,180,270,60) ; + uniend(thk_pen,z9,270,360,70) ; + uniend(thk_pen,z10,0,90,80) ; + uniend(thk_pen,z11,90,180,90) ; +% \end{macrocode} +% Finally we define the remaning needed vectors, and draw the edges +% $|PQ|,|QR|,|RS|$ and $|SP|$ of the square. +% \begin{macrocode} + pickup pensquare scaled thk_pen ; + lft top z12 = z8 ; rt top z13 = z9 ; draw z12--z13 ; + lft bot z14 = z9 ; lft top z15 = z10 ; draw z14--z15 ; + bot rt z16 = z10 ; bot lft z17 = z11 ; draw z16--z17 ; + top rt z18 = z11 ; bot rt z19 = z8 ; draw z18--z19 ; + penlabels(range 1 thru 19) ; +endchar ; + +% \end{macrocode} +% After these five characters we reset \texttt{currenttransform} to +% include the slant specified by \texttt{slantratio}, so that the rest +% of the font will come out as it slanted if such a font is begin made. +% \begin{macrocode} +currenttransform := identity slanted slantratio ; + +% \end{macrocode} +% \end{fontcode} +% +% Next we provide 6 charecters not directly avaliable in the +% \texttt{OT1} encoding, but avaliable in the \texttt{T1} encoding of +% the Cork fonts. These are \textunibf{\NG}, \textunibf{\TH}, +% \textunibf{\dh}, \textunibf{\ng}, and \textunibf{\th}, plus the +% accent `ogoneck' (on an \textunibf{a} it looks like +% \textunibf{\k{a}}). +% +% We do need to check again, wether we are making a small caps shaped +% font, and if so, we should not generate the minuscles +% \textunibf{\dh}, \textunibf{\ng}, and \textunibf{\th}. +% +% However, if we are making a \emph{strict} shaped font, then we need +% to make the characters twice, and we employe the trick used in +% \texttt{unilig.mf} again. +% +% \begin{fontcode}{\char"05} +% I am not completly happy with this character, but it was the best I +% could think of. Please let me know if you have any kinds of +% suggestions. +% \begin{macrocode} +if not caps : + for temp = 1,2 : + if temp = 2 : code_offset := 3 ; fi ; + beginchar(hex"05",x_w#,l_h#,0) ; "The letter eth" ; + unicir(w/2,p_t,(w/2,w/2),10) ; + uniarc(w/2,p_t,(w/2,h-w/2),0,120,20) ; + pickup unipensqu ; + top rt z1 = (w,h-w/2) ; bot rt z2 = (w,w/2) ; draw z1--z2 ; + z3 = (w/2,h-w/2+p_t/sqrt(2)) ; z4 = (w/2+p_t/sqrt(2),h-w/2) ; + z5 = (w,h-p_t/sqrt(2)) ; z6 = (w-p_t/sqrt(2),h) ; + fill z3--z4--z5--z6--cycle ; + penlabels(range 1 thru 6) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"06} +% This is very much like \textunibf{n}, but has a longer rightmost +% down stroke. +% \begin{macrocode} + beginchar(hex"06",x_w#,x_h#,p_d#) ; "The letter eng" ; + uniarc(w/2,p_t,(w/2,h-w/2),0,180,10) ; + pickup unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top rt z3 = (w,h-w/2) ; bot rt z4 = (w,-d) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"07} +% \begin{macrocode} + beginchar(hex"07",x_w#,l_h#,p_d#) ; "The letter thorn" ; + rad := (h+d)/4 ; + uniarc(rad,p_t,(w-rad,rad),-90,90,10) ; + pickup unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,-d) ; draw z1--z2 ; + top lft z3 = (p_t,2rad) ; top rt z4 = (w-rad,2rad) ; + bot lft z5 = (p_t,0) ; bot rt z6 = (w-rad,0) ; + draw z3--z4 ; draw z5--z6 ; + penlabels(range 1 thru 6) ; + endchar ; + exitif (not strict) ; + if temp = 2 : code_offset := 0 ; fi ; + endfor ; +fi ; + +% \end{macrocode} +% \end{fontcode} +% +% Like in \texttt{unilig.mf} we now employe a trick to generate to +% versions of the uppercase letters \textunibf{\NG} and +% \textunibf{\TH}, that is \textunibsc{\ng} and \textunibsc{\th}. +% +% Since there us only two majuscules here, we might as well take +% advantige of the extra slot, and make a small caps version of +% \textunibf{\varQ}, so this is defined before \textunibf{\NG}, to +% take the place of \textunibf{dh}. +% \begin{macrocode} +if not strict : + for temp = 1,2 : + if temp = 2 : do_caps(-3) ; fi ; + +% \end{macrocode} +% \begin{fontcode}{\char"08} +% This is the variant of \textunibf{Q} based an \textunibf{P}. This +% one is \emph{non}--default, you can acces this letter with +% \Lcs{varQ}\footnote{I am somewhat troubled with the majuscle `Q', +% because I don't know if the default one should be `\textunibf{Q}' or +% `\textunibf{\varQ}'. I will keep both characters in the font, but if +% enough wnats to chage the default, I will consider this +% ofcourse. Tell me \emph{your} opinon!}. +% \begin{macrocode} + beginchar(hex"08",A_w#,l_h#,0) ; "The variant letter Q"; + unicir(w/2,P_t,(w/2,h-w/2),10) + pickup Unipensqu ; + rt top z1 = (w,h-w/2) ; rt bot z2 = (w,0) ; draw z1--z2 ; + penlabels(1,2); + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"09} +% This is similar to \textunibf{N}, execpt the rightmost vertical +% stroke ends in an arc. +% \begin{macrocode} + beginchar(hex"09",A_w#,l_h#,0) ; "The letter Eng" ; + rad := 3C_d ; + uniarc(w/2,P_t,(w/2,h-w/2),0,180,10) ; + uniarc(rad,P_t,(w-rad,rad),-90,0,20) ; + pickup Unipensqu ; + top lft z1 = (0,h-w/2) ; bot lft z2 = (0,0); draw z1--z2 ; + top rt z3 = (w,h-w/2) ; bot rt z4 = (w,rad) ; draw z3--z4 ; + penlabels(1,2,3,4) ; + endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"0A} +% \begin{macrocode} + beginchar(hex"0A",A_w#,l_h#,0) ; "The letter Thorn" ; + rad := h/4 ; + uniarc(rad,P_t,(w-rad,h/2),-90,90,10) ; + pickup Unipensqu ; + top lft z1 = (0,h) ; bot lft z2 = (0,0) ; draw z1--z2 ; + top lft z3 = (P_t,h/2+rad) ; top rt z4 = (w-rad,h/2+rad) ; + bot lft z5 = (P_t,h/2-rad) ; bot rt z6 = (w-rad,h/2-rad) ; + draw z3--z4 ; draw z5--z6 ; + penlabels(range 1 thru 6) ; + endchar ; + exitif (not caps) ; + if temp = 2 : end_do_caps ; fi ; + endfor ; +fi ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"0B} +% This is actually a reversed cidelia accent. +% \begin{macrocode} +beginchar(hex"0B",x_w#,x_h#,2c_d#) ; "The accent ogoneck" ; + uniarc(d/2,2P_T/3,(w/2-d/4,-d/2),-90,90,10) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"0C} +% I chose to include the braces in the font, since you might needed +% them, and the Computer Modern Roman braces, doesn't really go with +% the rest of the font, so if you had to use those, it wouldn't look +% very good. They are, however not in the standard position, since +% that is already taken up. +% \begin{macrocode} +beginchar(hex"0C",3c_d#,l_h#,p_d#) ; "The left brace ({)" ; + uniarc(2c_d,p_t,(3c_d,h-2c_d),90,180,10) ; + uniarc(2c_d,p_t,(3c_d,-d+2c_d),180,270,20) ; + pickup unipensqu ; + top lft z1 = (c_d,h-2c_d) ; bot lft z2 = (c_d,-d+2c_d) ; draw z1--z2 ; + lft z3 = (0,(h-d)/2) ; rt z4 = (c_d,(h-d)/2) ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"0D} +% Discussion above. +% \begin{macrocode} +beginchar(hex"0D",3c_d#,l_h#,p_d#) ; "The right brace (})" ; + uniarc(2c_d,p_t,(0,h-2c_d),0,90,10) ; + uniarc(2c_d,p_t,(0,-d+2c_d),270,360,20) ; + pickup unipensqu ; + top rt z1 = (w-c_d,h-2c_d) ; bot rt z2 = (w-c_d,-d+2c_d) ; + draw z1--z2 ; + rt z3 = (w,(h-d)/2) ; lft z4 = (w-c_d,(h-d)/2) ; draw z3--z4 ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"0E} +% The paragraph sign is usually in the \texttt{cmsy} family, avaliable +% in \texttt{OT1} encoding only, but for the same reasons as the +% braces above, I decided to include this charater in the font. +% \begin{macrocode} +beginchar(hex"0E",(l_h#+p_d#+2p_t#)/3,l_h#,p_d#) ; + "The Paragraph sign" ; + uniarc(w/2,p_t,(w/2,h-w/2),30,270,10) ; + uniarc(w/2,p_t,(w/2,w/2-d),-150,90,20) ; + unicir(w/2,p_t,(w/2,(h-d)/2),30) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"0F} +% I guess there are no real surprises here --- it's just a bar! +% \begin{macrocode} +beginchar(hex"0F",p_t#,l_h#,p_d#) ; "The symbol bar (|)" ; + pickup unipensqu ; + lft top z1 = (0,h) ; lft bot z2 = (0,-d) ; draw z1--z2 ; + penlabels(1,2); +endchar ; + +% \end{macrocode} +% \end{fontcode} +% +% The next two characters is included, since I think it would be a +% good idea to use \universal{} characters for German +% quotation, instead of some Computer Modern Roman character, which +% would be totally out of place. +% +% If you use the \textsf{uni} package you can say +% \begin{verbatim} +% {\uni +% \guillemoleft Hello World\guillemoright\newline +% \guilsinglleft Hello World\guilsinglright} +% \end{verbatim} +% and get +% \begin{quote} +% {\uni +% \guillemoleft Hello World\guillemoright\newline +% \guilsinglleft Hello World\guilsinglright} +% \end{quote} +% +% \begin{fontcode}{\char"22} +% This is quote a simple character. Do notice the nice use of +% \texttt{uniend}, to produce the soft turn. +% \begin{macrocode} +beginchar(hex"22",2x_w#/3,x_h#,0) ; "The single left guillomot" ; + z1 = (p_t,h/2) ; z2 = (w,h) ; phi := angle(z2-z1) ; + uniend(p_t,(z1),90+phi,270-phi,10) ; + z3 = (w-p_t/sind(phi),h) ; z4 = z1 + p_t*(-sind(phi),cosd(phi)) ; + path rombe ; rombe := z1--z2--z3--z4--cycle ; fill rombe ; + fill rombe reflectedabout ((0,h/2),(w,h/2)) ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +% \begin{fontcode}{\char"5C} +% \begin{macrocode} +beginchar(hex"5C",2x_w#/3,x_h#,0) ; "The single right guillomot"; + z1 = (w-p_t,h/2) ; z2 = (0,h) ; phi := 180-angle(z2-z1) ; + uniend(p_t,(z1),phi-90,90-phi,10) ; + z3 = (p_t/sind(phi),h) ; z4 = z1 + p_t*(sind(phi),cosd(phi)) ; + path rombe ; rombe := z1--z2--z3--z4--cycle ; fill rombe ; + fill rombe reflectedabout ((0,h/2),(w,h/2)) ; + penlabels(1,2,3,4) ; +endchar ; + +% \end{macrocode} +% \end{fontcode} +%\iffalse +% +%\fi +%\iffalse +%<*font> +%\fi +% \section{Font driver files}\file{ful*.mf} +% +% This section describes the driver files +% \texttt{uni}\meta{series}\meta{shape}\meta{size}\texttt{.mf}, where +% \meta{series} is one of \texttt{r} (medium), or \texttt{bf} +% (boldface), \meta{shape} one of upright (no letter), \texttt{sl} +% (slanted), or \texttt{sc} (small caps), and \meta{size} is the +% designsize in points, one of 8, 9, 10, 12, or 17. +% +% To make the source file shorter, I employed a little trick, +% exploiting some of the features of the \textsf{docstrip} +% program. That, on the other hand means that the line numbers you see +% here, doesn't conform to the actual ones in the driver files. +% +% First we make sure the base file \texttt{unibase.mf} is loaded, but +% not more then once in a run. This is needed since this file contains +% all the macros and definitions for the font. +% +% \begin{macrocode} +if unknown unibase : input unibase; fi; + +% \end{macrocode} +% Next we define some \textsl{boolean} variables, determining the +% shape of the font we are to create. This are straight forward, and +% should be self explanetory. Any number of variables may be set to +% \texttt{true}, execpt that it makes no sense to define both +% \texttt{bold} and \texttt{medium} to \texttt{true}, so this will be +% considered an error, and a medium font will be made. (See alse the +% explanation of the \texttt{start\_font} macro in the +% \texttt{unibase.mf} section.) +% +% \begin{verbatim} +%<+medium>medium := true ; +%<+bold>bold := true ; +%<+slanted>slant := true ; +%<+caps>caps := true ; +%<+strict>strict := true ; +%<+eight>start_font(8pt#) ; +%<+nine>start_font(9pt#) ; +%<+ten>start_font(10pt#) ; +%<+twelve>start_font(12pt#) ; +%<+seventeen>start_font(17pt#) ; +%\end{verbatim} +% +% The next part of the files just inputs the nessecary source files, +% and there is nothing special here. Finally we end the font with the +% macro \texttt{end\_font}. +% \begin{macrocode} +input uniupp ; input unilow ; input unidig ; input unispe ; +input unilig ; input unipun ; input uniacc ; input uniext ; + +end_font; + +% \end{macrocode} +%\iffalse +% +%\fi +%\iffalse +%<*docpackage> +%\fi +% \section{Commands for the Documentation --- \texttt{unidoc.sty}} +% \file{unidoc.sty}\label{app:unidoc} +% +% \textsc{Warning:} Most of the macros defined in this file uses +% \TeX{} primitivs like \Lcs{def} and \Lcs{let}, contorary to the +% recommendations in \clsguide{}. This means you shouldn't try to use +% this package in conjunction with normal \LaTeXe{} documents, since +% it will not nessecarily by portable, and may generate unwanted +% resaults. This package is \emph{only} intended for the documentation +% of the \universal{} package, \emph{and nothing else!} +% +% \subsection{Initializing} +% +% First we need to identify the package, its version and release +% date, etc. +% \begin{macrocode} +\ProvidesPackage{unidoc} + [\unifiledate\space\unifileversion\space universal documenation package.] +% \end{macrocode} +% +% \begin{macro}{\ifeepic} +% \begin{macro}{\eepictrue} +% \begin{macro}{\eepicfalse} +% +% In case we can load the package \textsf{eepic}, we will set +% \cs{eepictrue}, and make a plot of the shapes problem. +% +% \begin{macrocode} +\newif\ifeepic\eepicfalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Then we load some pacakges needed. \textsf{doc} is ofcourse needed +% to do all the actual typesetting of macros etc., while \textsf{uni} +% is needed for the fonts\footnote{This means ofcourse, that you +% needed to have all the \MF{} sources ready, or in other words, you +% should have run \texttt{universa.ins} through \LaTeX{}.}, and +% finally \textsf{mflogo} is needed for the \MF{} logo. +% +% \begin{macrocode} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{uni}} +\ProcessOptions\relax +\RequirePackage{doc} +\RequirePackage{mflogo} +\RequirePackage[colorlinks,% + linkcolor=red,% + anchorcolor=black,% + citecolor=green,% + filecolor=black,% + menucolor=black,% + urlcolor=blue,% + hyperindex,% + linktocpage,% + pdfduplex=duplexFlipLongEdge,% + a4paper,% + bookmarks=true]{hyperref} +\RequirePackage{uni} +\IfFileExists{eepic.sty}{% + \RequirePackage{eepic}\eepictrue}{% + \PackageWarning{unidoc}{`eepic.sty' not found, so there will be no + pictures - you are warned.}\eepicfalse} + +% \end{macrocode} +% +% \subsection{Macros for the Index} +% +% \begin{macro}{\file} +% First we save the argument --- the current output filename --- in a +% command, set the codeline counter to zero (since every starts at +% line 1, obviously). Then we check to see if we are outputting files +% at all. If we are, we write an index entry. +% \begin{macrocode} +\def\file#1{ + \def\c@r{#1} + \c@CodelineNo0 + \if@filesw + \immediate\write\@indexfile + {\string\indexentry{#1=\string\texttt{#1}% + \string\space(File)}% + {\thepage}}\fi} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\main} +% This command is used be \texttt{doc.sty}, to choose the font for the +% codelines numbers in the index. It is set to \texttt{typewriter}. +% \begin{macrocode} +\def\main#1{\texttt{{\small\c@r}:\ #1}} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\src} +% To make the index reflect, that more then one file is present, and +% therefore more then one entry could have the same codeline number, +% we put the file name before the codeline number in the index. The +% name is gotten from the \Lcs{file} command. This ofcourse takes up +% quite some space in the index, so later on we speciffy the index +% to only have 2 columns. +% \begin{macrocode} +\def\src#1#2{\texttt{{\small#1}:\ #2}} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\fontcodeindex} +% The next two commands are responsible for writting the index entries +% of the above environments. They are similar to the \texttt{doc} +% package command \Lcs{codeline@wrindex} but uses the filenames +% defined by \Lcs{file} (via the \Lcs{src} command), and the +% \Lcs{fontcodeindex} uses a font appropiat for the font descriped +% (i.e., \Lcs{FontCodeFont}) +% \begin{macrocode} +\def\fontcodeindex#1{% + \@bsphack\begingroup\let\_=\protect\_% + \special@index{% + \expandafter\string#1\actualchar% + {\string\FontCodeFont\space#1}% + \encapchar src{\c@r}}\endgroup\@esphack} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\fontmacroindex} +% \begin{macrocode} +\def\fontmacroindex#1{% + \@bsphack\begingroup\let\_=\protect\_% + \special@index{% + \expandafter\string#1\actualchar% + {\string\MacroFont\space#1}% + \encapchar src{\c@r}}\endgroup\@esphack} + +% \end{macrocode} +% \end{macro} +% +% \subsection{Descriptive Environments} +% +% The next counters are to do some more advanced stuff on the on line +% numbers in the index. Instead of just writting the beginning line of +% the fontcode, we writte the complete interval of the fontcode. See +% also the command \Lcs{f@ntcodeindex} and \Lcs{f@ntmacroindex}. +% \begin{macrocode} +\newcount\startfontcodeline +\newcount\startfontmacroline + +% \end{macrocode} +% \begin{macro}{\fontcode} +% \begin{macro}{\endfontcode} +% \begin{macro}{\FontCodeFont} +% \begin{macro}{\PrintFontName} +% Next comes two environments for descriping the font programs, and +% font macros. They are similar to the environment \texttt{macro} in +% the \texttt{doc} package. However, some alterations is made, so that +% the right font is used in the index. (See also the +% \Lcs{fontcodeindex} macro below.) Also, notice the defintion of +% \Lcs{saved@macroname} and \Lcs{PrintFontName}. This is done so that +% control sequnces in the argument to \texttt{fontcode} environment, +% which should expand to a single letter, comes out expanded, rather +% then the actual control sequences, which isn't wanted here. +% \begin{macrocode} +\def\fontcode#1{ + \def\saved@fontname{#1} + \let\temp@MF\MacroFont\let\MacroFont\FontCodeFont + \let\temp@PMN\PrintMacroName\let\PrintMacroName\PrintFontName + \let\temp@SMI\SpecialMainIndex + \let\SpecialMainIndex\fontcodeindex + \macro{#1}} +\def\endfontcode{ + \endmacro + \let\MacroFont\temp@MF + \let\SpecialMainIndex\temp@SMI + \let\PrintMacroName\temp@PMN} +\let\FontCodeFont\unibf +\def\PrintFontName#1{\strut\MacroFont\saved@fontname\ } + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fontmacro} +% \begin{macro}{\endfontmacro} +% This is similar to \texttt{fontcode} environment, but is used to +% descripe the macros of \texttt{unibase}. The reason why we employ to +% environments, and not just one, is that the margin notes should come +% out in \texttt{typewriter} font in this environment, while it +% should be in \universal{} font above. +% \begin{macrocode} +\def\fontmacro#1{ + \let\temp@under\_ + \let\_\MacroUnderscore + \let\temp@SMI\SpecialMainIndex + \let\SpecialMainIndex\fontmacroindex + \macro{#1}} +\def\endfontmacro{% + \endmacro\let\SpecialMainIndex\temp@SMI\let\_\temp@under} +\def\MacroUnderscore{{\char"5F}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\illubegin} +% \begin{macro}{\illuother} +% \begin{macro}{\endillu} +% \begin{macrocode} +\let\beginillu\ifeepic +\let\illuother\else +\let\endillu\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Useful Commands} +% +% \begin{macro}{\Newestchanges} +% This macro is intended to be used like the \Lcs{changes} macro of +% the \textsf{doc} package. However, it should only be used on the last +% most change. But rather then just making an entry in the the +% glossary, it will also print a line saying when this macro was last +% changed. This is something like what is done in +% \texttt{ltxguide.cls}, but a bit different, since in that class not +% enough is being done glossary--wise, and too much is done +% margin--wise. When making an update to a macro, the new +% \Lcs{changes} should be made with \Lcs{Newestchanges}, and the old +% \Lcs{Newestchanges} should be renamed to \Lcs{changes}. Notice that +% \texttt{doc.sty} says \Lcs{def}\Lcs{saved@macroname}\texttt{\{\}}, +% so we can't say +% \begin{verbatim} +% \ifx\saved@macroname\relax +% \end{verbatim} +% since \Lcs{relax} \emph{isn't} the same as an empty definition, but +% \Lcs{@empty} is. In the case that \Lcs{saved@macroname} is defined +% to something, then we put a bullet ($\bullet$) in the margin, and +% attach a footnote to it, where the footnote text contains the proper +% information. Ofcourse this could led to a lot of footnotes, but the +% alternative is to redefine the \texttt{macro} environment, and I +% really didn't have the stomach for that, Sorry. Notice the use of +% \Lcs{@gobble}, that removes the leading `v' in the version number. +% \begin{macrocode} +\def\Newestchanges#1#2#3{ + \ifx\saved@macroname\@empty% + \marginpar{\small\raggedright{\sl Change on} #2, {\sl Version} + \expandafter\@gobble#1} + \else% + \llap{$\bullet$\footnote{{\sl Change of } + {\MacroFont\expandafter\string\saved@macroname} + {\sl on} #2, {\sl Version }\expandafter\@gobble#1}} + \fi + \changes{#1}{#2}{#3}} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Lcs} +% Finally we define a short hand for \Lcs{...}, to make the +% documentaion easier. +% \begin{macrocode} +\def\Lcs#1{\texttt{\char"5C{}#1}} + +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The Font Charts} +% +% \begin{macro}{\FontChart} +% This macro is for typesetting a table of the font. It is taken from +% \texttt{testfont.tex}. +% +% First we define some counters to use in the table. \Lcs{n} is the +% counts the number of letters and symbols typeset so far, while +% \Lcs{m} is counting the number of typeset characters in current +% line. \Lcs{p} is a penalty counter. The dimension \Lcs{dim} is used +% for setting the characters appropiate. +% +% We also define a new \Lcs{if}, used to see if we should go on. +% +% \Lcs{oct} and \Lcs{hex} are used for typesetting numbers in +% octadecimal and hexadecimal notation respectivily. +% \begin{macrocode} +\newcount\n\newcount\m\newcount\p\newdimen\dim +\newif\ifskipping +\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} +\def\hex#1{\hbox{\rm\H{}\tt#1}} + +% \end{macrocode} +% \begin{macro}{\setdigs} +% This is used to set the counters \Lcs{n} and \Lcs{m} every time a +% new (double) line is started. +% \begin{macrocode} +\def\setdigs#1"#2{\gdef\h{#2} + \m=\n \divide\m by 64 \xdef\0{\the\m}% + \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\testrow} +% This is used to see how we should typeset the current row. +% \begin{macrocode} +\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}% + \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F% + \global\p=\lastpenalty}} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\oddline} +% This is used to typeset topmost line of a double line. It basically +% just putting a line and some saces into the chart. +% \begin{macrocode} +\def\oddline{ + \cr\noalign{\nointerlineskip}\multispan{19}\hrulefill& + \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr + \noalign{\nointerlineskip}} + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\evenline} +% This is used to typeset bottommost line of a double line. It +% basically does the same as \Lcs{oddline}, but also checks to see if +% we need to end the chart or go on. +% \begin{macrocode} +\def\evenline{ + \loop\skippingfalse + \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m + \expandafter\setdigs\meaning\next \testrow + \ifnum\p=1 \skippingtrue \fi\fi + \ifskipping \global\advance\n 16\repeat + \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi + \next} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\morechart} +% This macro is called every time we need to typeset a new double line +% of the chart. +% \begin{macrocode} +\def\morechart{ + \cr\noalign{\hrule\penalty5000} + \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m} + \chartline \evenline} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\chartline} +% \begin{macro}{\chartstrut} +% \Lcs{chartline} is called every time we need to typeset a line of +% the chart. Notice it uses the macro \Lcs{:} to do the +% job. \Lcs{chartstrut} is used to get approiate spacing. +% \begin{macrocode} +\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&} +\def\chartstrut{\lower4.5pt\vbox to14pt{}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\:} +% \begin{macro}{\reposition} +% \begin{macro}{\centerlargechars} +% These macros are used for typesetting the actual characters in the +% chart. \Lcs{:} gives the appropiate space for a character and +% encriments the \Lcs{n} counter, while \Lcs{reposition} places the +% character nicely in the the chart. \Lcs{centerlargechars} does the +% same for {\large large} characters. +% \begin{macrocode} +\def\:{\setbox0=\hbox{\char\n}% + \ifdim\ht0>7.5pt\reposition + \else\ifdim\dp0>2.5pt\reposition\fi\fi + \box0\global\advance\n 1 } +\def\reposition{ + \setbox0=\vbox{\kern2pt\box0}\dim=\dp0 + \advance\dim 2pt \dp0=\dim} +\def\centerlargechars{ + \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\chart} +% \begin{macro}{\endchart} +% These two macros is what starts and ends the chart. \Lcs{chart} sets +% up the appropiate stuff, and writes the top most line in the +% chart. \Lcs{endchart} is called by \Lcs{evenline} if no more +% characters should be typeset, and then it finished everything off, +% plus writes the last line of the chart. +% \begin{macrocode} +\def\chart{$$\global\n=0 + \halign to\hsize\bgroup + \chartstrut##\tabskip0pt plus10pt&&\hfil##\hfil&\vrule##\cr + \lower6.5pt\null&&& + \oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} +\def\endchart{ + \cr\noalign{\hrule} + \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& + &\hex C&&\hex D&&\hex E&&\hex F&\cr + \egroup$$\par} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Finally we get to the \emph{real} macro. This macro takes one +% argument, the name of the \meta{font driver file}. We put the chart +% inside a \texttt{figure} environment, so that we may refer to it +% latter. This is done using the label \texttt{chart:}\meta{font driver +% file}. The chart is encapsulated in a group, so that the definition +% of \Lcs{chart@font} doesn't get in the way elsewhere in the document. +% \begin{macrocode} +\def\FontChart#1#2{ +%% \marginpar{\small\raggedright Letters and symbols in \texttt{#1} +%% font.} + \begin{figure}[htbp] + \begingroup + \font\chart@font=#1 + \chart@font + \chart + \endgroup + \caption{Letters and symbols in \texttt{#1} --- #2} + \label{fig:font:#1} +\end{figure}} + +% \end{macrocode} +% \end{macro} +% +% \subsection{Parameters and Miscillaneous Commands} +% +% This is used --- as explaind in \texttt{doc.dvi} --- to give a +% different prologue to the index, more suitable to our needs. +% \begin{macrocode} +\IndexPrologue{% + \section{Index}\markboth{Index}{Index} + The Numbers written in \textit{italic} refer to the pages, where + a macros usage is descriped, while those in \texttt{typewrite} refer + to line numbers in the files, mentioned before, where the definition + is, while \textsl{slanted} shows the places it is used. Normal letters + refer to pages, wether it be descriptions or usage.} +\GlossaryPrologue{% + \section{Change History}\markboth{Change History}{Change History} + Below is listed the changes made to the \universal{} font and the + \LaTeX{} support package \textsf{uni}, from version~1.0 to 2.0.} + +% \end{macrocode} +% Also we set the number of columns in the index to 2, since some +% space is needed for the entries +% \begin{macrocode} +\setcounter{IndexColumns}{2} + +% \end{macrocode} +% We don't want the index flutted with silly command sequences, so we +% leave some of them out. +% \begin{macrocode} +\DoNotIndex{\@bsphack,\@empty,\@esphack,\@gobble,\@ifnextchar,% + \@ifundefined,\@indexfile,\@onlypreamble,\iffalse,\_,\,\accent,% + \aftergroup,\actualchar,\advance,\begin,\begingroup,\bgroup,% + \box,\bullet,\changes,\char,\chardef,\CheckModules,\CodeLineIndex,% + \cr,\crcr,\csname,\DeclareFontFamily,\DeclareFontShape,\DeclareMacro,% + \dim,\divide,\dp,\DeclareOption,\def,\DoNotIndex,\edef,\egroup,\else,% + \end,\endcsname,\EnableCrossrefs,\encapchar,\endgroup,\endmacro,% + \expandafter,\fbox,\fi,\font,\footnote,\fontemcoding,\fontfamuliy,% + \fontseries,\fontshape,\gdef,\global,\H,\h,\halign,\hbox,\hfil,% + \hidewidth,\hrule,\hrulefill,\hsize,\ht,\hyphenchar,\if@filesw,% + \ifdim,\IfFileExists,\ifnum,\ifskipping,\ifx,\immediate,\indexentry,% + \it,\itdefault,\kern,\lastpenalty,\LaTeX,\LaTeXe,\leavevmode,\let,% + \llap,\loop,\lower,\m,\macro,\MacroFont,\marginpar,\marginparwidth,% + \markboth,\mdseries,\meaning,\multiply,\multispan,\n,\newcommand,% + \newcount,\newdimen,\newif,\newline,\next,\noalign,\noexpand,% + \nointerlineskip,\not@math@alphabet,\null,\ooalign,\p,\par,\penalty,% + \ProcessOptions,\protect,\ProvidesFile,\ProvidesPackage,% + \RecordChanges,\raggedright,\raise,\relax,\renewcommand,\repeat,% + \RequirePackage,\rm,\saved@macroname,\scshape,\section,\selectfont,% + \setcounter,\setbox,\show,\skippingfalse,\skippingture,\sl,\slshape,% + \small,\smash,\space,\special@index,\SpecialMainIndex,\stop,\string,% + \strut,\tabskip,\TeX,\TeXbook,\textit,\textsf,\textsl,\texttt,\the,% + \thepage,\tt,\typeout,\unhbox,\universal,\upshape,\usefont,\vbox,% + \vcenter,\vrule,\write,\xdef,\z@,\PackageError,\PackageWarning, + \PassOptionsToPackage,\GlossaryPrologue,\',\0,\1,\bfseries, + \centerlargechars,\DeclareRobustCommand,\DeclareTextFontCommand, + \ExecuteOptions,\familydefault,\fontencoding,\fontfamily,\hex,\oct, + \IndexPrologue,\oddline} + +% \end{macrocode} +% And then we define the behaviour of the \textsf{doc} package, by +% setting a number of flags (as explained in the documentation of the +% \textsf{doc} package). We also set the margin paragraph widths to be +% a bit smaller then usual. +% \begin{macrocode} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\CheckModules +\marginparwidth=54pt +% \end{macrocode} +% +% \begin{macro}{\NFSS} +% \begin{macro}{\ftnguide} +% \begin{macro}{\clsguide} +% \begin{macro}{\MFbook} +% \begin{macro}{\universal} +% +% Some utility macros used in the documentation. +% +% \begin{macrocode} +\newcommand{\NFSS}{\textsf{NFSS}} +\newcommand{\ftnguide}{\textit{\LaTeXe{} Font Selection}} +\newcommand{\clsguide}{ \textit{\LaTeXe{} for Class and Packages + Writers}} \newcommand{\TeXbook}{\TeX\textsf{book}} +\newcommand{\MFbook}{\MF\textsf{book}} +\newcommand{\universal}{\textunibf{universal}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% %\iffalse +% +%\fi +% \Finale +% +% \iffalse +% Local Variables: +% mode: docTeX +% End: +% \fi diff --git a/Master/texmf-dist/source/fonts/universa/universa.ins b/Master/texmf-dist/source/fonts/universa/universa.ins new file mode 100644 index 00000000000..415fce1026f --- /dev/null +++ b/Master/texmf-dist/source/fonts/universa/universa.ins @@ -0,0 +1,182 @@ +%% -*- mode: tex -*- +%% +%% This is file `universa.ins', the installation file for the +%% `universal' package. +%% +%% Copyright (C) 1998 Christian Holm. +%% +%% The universal package is free software; you can redistribute it +%% and/or modify it under the terms of the GNU General Public License +%% as published by the Free Software Foundation; either version 2 of +%% the License, or (at your option) any later version. +%% +%% The universal package is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +%% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% GNU General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with this package; if not, write to the Free Software +%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%% + +\input docstrip.tex +\keepsilent +\declarepreamble\long + +Copyright (C) 1998 Christian Holm. + +This file is NOT the source for universal, because almost all +comments have been stripped from it. It is NOT the preferred +form of universal for making modifications to it. + +Therefore you can NOT redistribute and/or modify THIS file. +You can however redistribute the complete source (universa.dtx +and universa.ins) and/or modify it under the terms of the GNU +General Public License as published by the Free Software +Foundation; either version 2, or (at your option) any later +version. + +The universal font and package is distributed in the hope that +it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public +License along with this package; if not, write to the + Free Software Foundation, Inc., + 675 Mass Ave, Cambridge, + MA 02139, USA. + +See the file universa.dtx for further comments and documentation. + +\endpreamble + +\declarepreamble\short + +Copyright (C) 1998 Christian Holm. + +The universal font and package is distributed in the hope that +it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +See the file universa.dtx for further comments and documentation. + + +\endpreamble + +\usepreamble\long +\usedir{tex/latex/universa} +\Msg{***********************************************************} +\Msg{* Generating LaTeX files} +\Msg{***********************************************************} +\generate{\file{uni.sty}{\from{universa.dtx}{package}} + \file{omluni.fd}{\from{universa.dtx}{oml}} + \file{omsuni.fd}{\from{universa.dtx}{oms}} + \file{ot1uni.fd}{\from{universa.dtx}{ot1}} + \file{t1uni.fd}{\from{universa.dtx}{t1}} + \file{uuni.fd}{\from{universa.dtx}{u}}} +\usedir{doc/latex/universa} +\Msg{***********************************************************} +\Msg{* Generating Documentation files} +\Msg{***********************************************************} +\generate{\file{unidoc.sty}{\from{universa.dtx}{docpackage}} + \file{copying}{\from{universa.dtx}{copyright}}} +\usedir{fonts/source/public/universa} +\Msg{***********************************************************} +\Msg{* Generating METAFONT base file} +\Msg{***********************************************************} +\generate{\file{unibase.mf}{\from{universa.dtx}{unibase}}} +\usepreamble\short +\Msg{***********************************************************} +\Msg{* Generating upright medium driver files} +\Msg{***********************************************************} +\generate{\file{fulmr8.mf}{\from{universa.dtx}{font,medium,eight}} + \file{fulmr9.mf}{\from{universa.dtx}{font,medium,nine}} + \file{fulmr10.mf}{\from{universa.dtx}{font,medium,ten}} + \file{fulmr12.mf}{\from{universa.dtx}{font,medium,twelve}} + \file{fulmr17.mf}{\from{universa.dtx}{font,medium,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating upright bold face driver files} +\Msg{***********************************************************} +\generate{\file{fulbr8.mf}{\from{universa.dtx}{font,bold,eight}} + \file{fulbr9.mf}{\from{universa.dtx}{font,bold,nine}} + \file{fulbr10.mf}{\from{universa.dtx}{font,bold,ten}} + \file{fulbr12.mf}{\from{universa.dtx}{font,bold,twelve}} + \file{fulbr17.mf}{\from{universa.dtx}{font,bold,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating slanted medium driver files} +\Msg{***********************************************************} +\generate{\file{fulmo8.mf}{\from{universa.dtx}{font,medium,slanted,eight}} + \file{fulmo9.mf}{\from{universa.dtx}{font,medium,slanted,nine}} + \file{fulmo10.mf}{\from{universa.dtx}{font,medium,slanted,ten}} + \file{fulmo12.mf}{\from{universa.dtx}{font,medium,slanted,twelve}} + \file{fulmo17.mf}{\from{universa.dtx}{font,medium,slanted,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating small caps medium driver files} +\Msg{***********************************************************} +\generate{\file{fulmc8.mf}{\from{universa.dtx}{font,medium,caps,eight}} + \file{fulmc9.mf}{\from{universa.dtx}{font,medium,caps,nine}} + \file{fulmc10.mf}{\from{universa.dtx}{font,medium,caps,ten}} + \file{fulmc12.mf}{\from{universa.dtx}{font,medium,caps,twelve}} + \file{fulmc17.mf}{\from{universa.dtx}{font,medium,caps,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating strict medium driver files} +\Msg{***********************************************************} +\generate{\file{fulmst8.mf}{\from{universa.dtx}{font,medium,strict,eight}} + \file{fulmst9.mf}{\from{universa.dtx}{font,medium,strict,nine}} + \file{fulmst10.mf}{\from{universa.dtx}{font,medium,strict,ten}} + \file{fulmst12.mf}{\from{universa.dtx}{font,medium,strict,twelve}} + \file{fulmst17.mf}{\from{universa.dtx}{font,medium,strict,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating slanted bold face driver files} +\Msg{***********************************************************} +\generate{\file{fulbo8.mf}{\from{universa.dtx}{font,bold,slanted,eight}} + \file{fulbo9.mf}{\from{universa.dtx}{font,bold,slanted,nine}} + \file{fulbo10.mf}{\from{universa.dtx}{font,bold,slanted,ten}} + \file{fulbo12.mf}{\from{universa.dtx}{font,bold,slanted,twelve}} + \file{fulbo17.mf}{\from{universa.dtx}{font,bold,slanted,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating small caps bold face driver files} +\Msg{***********************************************************} +\generate{\file{fulbc8.mf}{\from{universa.dtx}{font,bold,caps,eight}} + \file{fulbc9.mf}{\from{universa.dtx}{font,bold,caps,nine}} + \file{fulbc10.mf}{\from{universa.dtx}{font,bold,caps,ten}} + \file{fulbc12.mf}{\from{universa.dtx}{font,bold,caps,twelve}} + \file{fulbc17.mf}{\from{universa.dtx}{font,bold,caps,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating strict bold face driver files} +\Msg{***********************************************************} +\generate{\file{fulbst8.mf}{\from{universa.dtx}{font,bold,strict,eight}} + \file{fulbst9.mf}{\from{universa.dtx}{font,bold,strict,nine}} + \file{fulbst10.mf}{\from{universa.dtx}{font,bold,strict,ten}} + \file{fulbst12.mf}{\from{universa.dtx}{font,bold,strict,twelve}} + \file{fulbst17.mf}{\from{universa.dtx}{font,bold,strict,seventeen}}} +\Msg{***********************************************************} +\Msg{* Generating font program files} +\Msg{***********************************************************} +\generate{\file{uniupp.mf}{\from{universa.dtx}{upp}} + \file{unilow.mf}{\from{universa.dtx}{low}} + \file{unidig.mf}{\from{universa.dtx}{dig}} + \file{unispe.mf}{\from{universa.dtx}{spe}} + \file{unilig.mf}{\from{universa.dtx}{lig}} + \file{unipun.mf}{\from{universa.dtx}{pun}} + \file{uniacc.mf}{\from{universa.dtx}{acc}} + \file{uniext.mf}{\from{universa.dtx}{ext}}} + +\Msg{***********************************************************} +\Msg{* To finish the installation you have to move the files} +\Msg{* `uni.sty' `*.fd' into a directory searched by TeX, and} +\Msg{* the files `*.mf' to a directory searched by Metafont.} +\Msg{*} +\Msg{* To produce the documentation do:} +\Msg{*\space\space latex universa.dtx} +\Msg{*\space\space latex universa.dtx} +\Msg{*\space\space makeindex -s gind -o universa.ind universa.idx} +\Msg{*\space\space makeindex -s gglo -o universa.gls universa.glo} +\Msg{*\space\space latex universa.dtx} +\Msg{*\space\space latex universa.dtx} +\Msg{* or whatever appropiate for your system.} +\Msg{***********************************************************} +\endbatchfile -- cgit v1.2.3