\def\fileversion{1.1} \def\filedate{1996/06/30} %\iffalse meta-comment %\psfont: A \LaTeXe\ package for using PostScript fonts % %Copyright \copyright\ 1996 Sebastian Marius Kirsch\texttt{% % $\langle$sebastian\_kirsch@kl.maus.de$\rangle$} % %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. %\fi % %\changes{0.9}{1996/05/18}{First version using \texttt{doc} and % \texttt{docstrip}} %\changes{1.0}{1996/05/31}{First public release} %\changes{1.0a}{1996/06/27}{Renamed to psfont. Updating documentation.} %\changes{1.0b}{1996/06/28}{Optional argument for \cmd{\Available}\ldots} %\changes{1.0c}{1996/06/29}{Inserted some code from psnfss. Some very %enlightning thoughts about the future of this package.} %\changes{1.0d}{1996/06/29}{New command \texttt{AvailableFont}. Why split this %up between \psNFSS\ and \textsf{mf}\NFSS?} %\changes{1.0e}{1996/06/30}{New syntax for \texttt{Default}\ldots\texttt{Font}} %\changes{1.1}{1996/06/30}{Second public release} % % \CheckSum{364} %% \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 \~} %% % %\title{\psfont: A general way to use\\ % PostScript fonts\thanks{This file has version number \fileversion, last % revised \filedate.}} % %\author{Sebastian Marius Kirsch\\ % \texttt{sebastian\_kirsch@kl.maus.de}} % %\date{\filedate} % %\maketitle % %\begin{abstract} % This package provides a general way to use PostScript fonts % without handling with thousands of style files, one for each font you want % to use. It works with a style file, \texttt{psfont.sty}, which contains all % the macros, and a configuration file, \texttt{psfont.cfg}, which tells the % style file about the available fonts. %\end{abstract} % %\section{Introduction} % %This package lets you use one single package to load every PostScript font you %would want. You don't have to load one file for each font anymore, and the %package even warns you if you try to load two contradicting fonts at once, %e.~g. two roman fonts. If you use the option \texttt{onlyps}, it substitutes %the default PS fonts for the families you have not specified. % %The package is intended as a replacement for the \textsf{psfonts} package of %\psNFSS, by Sebastian Rahtz %(\texttt{s.rahtz@elsevier.co.uk}). \textsf{psfonts} is not very consequent, %because some of its style files redefine all three defaults, while %others only change one. % %\section{The \texttt{docstrip} modules} % %This file contains five modules to direct \texttt{docstrip} in generating the %external files: % %\begin{tabular}[t]{ll} %driver & A short driver for producing the documentation\\ %package & The package itself\\ %config & The local configuration file\\ %Upsy & A font definition file for Adobe Symbol, from \psNFSS\\ %Upzd & A font definition file for Adobe Zapf Dingbats, from \psNFSS\\ %\end{tabular} % %\StopEventually % %\section{Producing the documentation} % %This short driver can be extracted by \texttt{docstrip} to produce the %documentation. % % \begin{macrocode} %<*driver> \documentclass{ltxdoc} \newcommand{\NFSS}{\textsf{NFSS}} \newcommand{\psNFSS}{\textsf{psNFSS}} \newcommand{\psfont}{\texttt{psfont}} \begin{document} \DocInput{psfont.dtx} \end{document} % % \end{macrocode} % %\section{The Code} % %\subsection{Introduction} % %First we have to introduce ourselves. % % \begin{macrocode} %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{psfont}% [\filedate\space v\fileversion\space loading PostScript fonts] % \end{macrocode} % %\subsection{Switches} % %Next, we define some switches. They are used to determine whether some fonts %have already been loaded, so we can warn the user when he tries to load two %colliding fonts. % % \begin{macrocode} \newif\ifrm@set\rm@setfalse \newif\ifsf@set\sf@setfalse \newif\iftt@set\tt@setfalse % \end{macrocode} % %\subsection{The default fonts} % %\DescribeMacro{\DefaultRMFont} %\DescribeMacro{\DefaultSFFont} %\DescribeMacro{\DefaultTTFont} %These are some commands for changing the default fonts. % %\noindent\cmd{\DefaultRMFont}\marg{\NFSS\ font family}\\ %\cmd{\DefaultSFFont}\marg{\NFSS\ font family}\\ %\cmd{\DefaultTTFont}\marg{\NFSS\ font family} % % \begin{macrocode} \newcommand{\DefaultRMFont}[1]{\renewcommand{\def@rmfont}{#1}} \newcommand{\DefaultSFFont}[1]{\renewcommand{\def@sffont}{#1}} \newcommand{\DefaultTTFont}[1]{\renewcommand{\def@ttfont}{#1}} \newcommand{\def@rmfont}{} \newcommand{\def@sffont}{} \newcommand{\def@ttfont}{} % \end{macrocode} % %\subsection{Declaring the options} % %\DescribeMacro{\AvailableRMFont} %\DescribeMacro{\AvailableRMFont} %\DescribeMacro{\AvailableRMFont} %These commands are needed later in the configuration %file. There is one command for each font family, ie.\ roman, sans serif or %typewriter. % % \noindent % \cmd{\AvailableRMFont}\oarg{additional code}\marg{long name}\marg{\NFSS\ % family name}\\ % \cmd{\AvailableSFFont}\oarg{additional code}\marg{long name}\marg{\NFSS\ % family name}\\ % \cmd{\AvailableTTFont}\oarg{additional code}\marg{long name}\marg{\NFSS\ % family name} % %They declare their first argument as an option. % %If the option is called, and the font family has already been defined, a %\cmd{\PackageError} is reported. If not, the second argument is defined as %the approriate family default. % %When the family default has successfully been set, the approriate switch is %turned, so it is not redefined anywhere else in this file. % %The optional argument contains some code that is to be executed when the %defaults have been set. I do not need this now, but this hook could be useful %later. % % \begin{macrocode} \newcommand{\AvailableRMFont}[3][]{% \DeclareOption{#2}{% \ifrm@set\PackageError{psfont}{% \protect\rmfamily\space already defined as \rmdefault }{% You tried to load two roman families at the same time,\MessageBreak e.g. times and palatino} \else\renewcommand{\rmdefault}{#3}\rm@settrue #1 \fi} } \newcommand{\AvailableSFFont}[3][]{% \DeclareOption{#2}{% \ifsf@set\PackageError{psfont}{% \protect\sffamily\space already defined as \sfdefault }{% You tried to load two sans serif families at the same time,\MessageBreak e.g. gill and helvetica} \else\renewcommand{\sfdefault}{#3}\sf@settrue #1 \fi} } \newcommand{\AvailableTTFont}[3][]{% \DeclareOption{#2}{% \iftt@set\PackageError{psfont}{% \protect\ttfamily\space already defined as \ttdefault }{% You tried to load two typewriter families at the same time,\MessageBreak e.g. courier and typewriter} \else\renewcommand{\ttdefault}{#3}\tt@settrue #1 \fi} } % \end{macrocode} % %\subsection{One command fits all} % %\DescribeMacro{\AvailableFont} %With the macro |\AvailableFont|, all three defaults are set with one %option. This is useful for managing combinations of three fonts under one %name, as well as for fonts that have the variants sans serif and %typewriter. (I'm told Lucida is one of those.) % % \begin{macrocode} \newcommand{\AvailableFont}[5][]{% \DeclareOption{#2}{% \ifrm@set\PackageError{psfont}{% \protect\rmfamily\space already defined as \rmdefault }{% You tried to load two roman families at the same time,\MessageBreak e.g. times and palatino} \else\renewcommand{\rmdefault}{#3}\rm@settrue \fi \ifsf@set\PackageError{psfont}{% \protect\sffamily\space already defined as \sfdefault }{% You tried to load two sans serif families at the same time,\MessageBreak e.g. gill and helvetica} \else\renewcommand{\sfdefault}{#4}\sf@settrue \fi \iftt@set\PackageError{psfont}{% \protect\ttfamily\space already defined as \ttdefault }{% You tried to load two typewriter families at the same time,\MessageBreak e.g. courier and typewriter} \else\renewcommand{\ttdefault}{#5}\tt@settrue \fi #1 } } % \end{macrocode} % %\subsection{Loading the configuration file} % %Next, the configuration file is loaded. If it is not found, an error is %issued, because the package is quite useless without it. % % \begin{macrocode} \InputIfFileExists{psfont.cfg}{}{% \PackageError{psfont}{% No local configuration file found }{% The psfont package was loaded without a local\MessageBreak configuration file, so it doesn't know which fonts\MessageBreak are available.} } % % \end{macrocode} % %\subsection{The configuration file} % %The configuration file looks like this: % %\subsubsection{Introduction} % %As usual\ldots % % \begin{macrocode} %<*config> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{psfont.cfg} [\filedate\space v\fileversion\space Local configuration for psfont.sty] % \end{macrocode} % %\subsubsection{Declaring default fonts} % %Here, the default PS fonts are defined. They are needed later, if the author %does not define all PS fonts he wants to use, but wants his document to %contain only PS fonts. % % \begin{macrocode} \DefaultRMFont{ptm} \DefaultSFFont{phv} \DefaultTTFont{pcr} % \end{macrocode} % %\subsubsection{Available fonts} % %Now the available PS fonts are defined. They are divided into three %categories, roman fonts, sans serif fonts and typewriter fonts, as it is done %in \LaTeXe\ itself. % %They are defined using the \cmd{\Available}\ldots\ macros. These macros %define a symbolic name to be used as an option to the package, and take the %name of the \NFSS\ font family as a second argument. % % \begin{macrocode} \AvailableRMFont{times}{ptm} \AvailableRMFont{palatino}{ppl} \AvailableRMFont{newcent}{pnc} \AvailableSFFont{helv}{phv} \AvailableSFFont{gill}{pgs} \AvailableTTFont{courier}{pcr} % % \end{macrocode} % % And that's the configuration. Of course one could do much more with this % configuration file, declaring new options and all. It's probably the biggest % hook a package could have. :-) % %\subsection{\texttt{onlyps}: Using only PS fonts} % %\DescribeEnv{onlyps} %This option redefines all other family defaults that have not yet been %\cmd{\renewcommand}ed to PS fonts. It uses the default fonts as defined in %the configuration file. If no default fonts have been defined, it reports a %warning and does nothing. % % \begin{macrocode} %<*package> \DeclareOption{onlyps}{ \ifrm@set\else \ifx\empty\def@rmfont \PackageWarning{psfont}{No default roman font defined!} \else\renewcommand{\rmdefault}{\def@rmfont}\fi \fi \ifsf@set\else \ifx\empty\def@sffont \PackageWarning{psfont}{No default sans serif font defined!} \else\renewcommand{\sfdefault}{\def@sffont}\fi \fi \iftt@set\else \ifx\empty\def@ttfont \PackageWarning{psfont}{No default typewriter font defined!} \else\renewcommand{\ttdefault}{\def@ttfont}\fi \fi } % \end{macrocode} % %\subsection{Parts of \textsf{psfonts}} % %\textit{The \psfont\ package ist ultimately intended as a replacement for %\textsf{psfonts} of \psNFSS. I therefore use the code of some files of %\textsf{psfonts} and wrap it up in an option. All code and comments of this %section are from \textsf{psfonts}, v5.2 by Sebastian Rahtz. Many thanks to %Sebastian for letting me use his code!} % %\DescribeEnv{pifont} % \begin{macrocode} \DeclareOption{pifont}{ % \end{macrocode} % Now some useful commands for Pi fonts (Dingbats, Symbol etc); they % all assume you know the character number of the (unmapped) font % \begin{macrocode} \newcommand{\Pifont}[1]{\fontfamily{#1}\fontencoding{U}% \fontseries{m}\fontshape{n}\selectfont} \newcommand{\Pisymbol}[2]{{\Pifont{#1}\char#2}} \newcommand{\Pifill}[2]{\leaders\hbox{\makebox[0.2in]{% \Pisymbol{#1}{#2}}}\hfill\kern\z@} \newcommand{\Piline}[2]{\par\noindent\hspace{0.5in}\Pifill{#1}{#2}% \hspace{0.5in}\kern\z@\par} \newenvironment{Pilist}[2]% {\begin{list}{\Pisymbol{#1}{#2}}{}}% {\end{list}}% % \end{macrocode} % A Pi number generator (from ideas by David Carlisle), for use in % lists where items are suffixed by symbols taken in sequence from a % Pi font. Usage is in lists just like enumerate. % % |\Pinumber| outputs the appropriate symbol, where |#2| is the name of a % \LaTeX\ counter and |#1| is the font family. % \begin{macrocode} \def\Pinumber#1#2{\protect\Pisymbol{#1}{\arabic{#2}}} \newenvironment{Piautolist}[2]{% \ifnum \@enumdepth >3 \@toodeep\else \advance\@enumdepth \@ne % \end{macrocode} % We force the labels and cross-references into a very plain style (eg % no brackets around `numbers', or dots after them). % \begin{macrocode} \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \expandafter\def\csname p@enum\romannumeral\the\@enumdepth\endcsname{}% \expandafter\def\csname labelenum\romannumeral\the\@enumdepth\endcsname{% \csname theenum\romannumeral\the\@enumdepth\endcsname}% \expandafter\def\csname theenum\romannumeral\the\@enumdepth\endcsname{% \Pinumber{#1}{enum\romannumeral\the\@enumdepth}}% \list{\csname label\@enumctr\endcsname}{% \@nmbrlisttrue \def\@listctr{\@enumctr}% \setcounter{\@enumctr}{#2}% \addtocounter{\@enumctr}{-1}% \def\makelabel##1{\hss\llap{##1}}} \fi }{\endlist} % \end{macrocode} % All the old Dingbat commands still work. % \begin{macrocode} \newcommand{\ding}{\Pisymbol{pzd}} \def\dingfill#1{\leaders\hbox{\makebox[0.2in]{\Pisymbol{pzd}{#1}}}\hfill} \def\dingline#1{\Piline{pzd}{#1}} \newenvironment{dinglist}[1]{\begin{Pilist}{pzd}{#1}}% {\end{Pilist}} \newenvironment{dingautolist}[1]{\begin{Piautolist}{pzd}{#1}}% {\end{Piautolist}} {\Pifont{pzd}} {\Pifont{psy}} } % \end{macrocode} %\DescribeEnv{mathptm} % \begin{macrocode} \DeclareOption{mathptm}{ % \end{macrocode} %This package loads the Adobe Times fonts and the mathptm fonts; %The virtual fonts are produced by fontinst; they %can be built by running tex on %fontptcm.tex from the fontinst package. % \begin{macrocode} % The main text family is Times Roman \def\rmdefault{ptm} \DeclareSymbolFont{operators} {OT1}{ptmcm}{m}{n} \DeclareSymbolFont{letters} {OML}{ptmcm}{m}{it} \DeclareSymbolFont{symbols} {OMS}{pzccm}{m}{n} \DeclareSymbolFont{largesymbols}{OMX}{psycm}{m}{n} \DeclareSymbolFont{bold} {OT1}{ptm}{bx}{n} \DeclareSymbolFont{italic} {OT1}{ptm}{m}{it} % \end{macrocode} % If we're in compatibility mode, defined |\mathbf| and |\mathit|. % \begin{macrocode} \@ifundefined{mathbf}{}{\DeclareMathAlphabet{\mathbf}{OT1}{ptm}{bx}{n}} \@ifundefined{mathit}{}{\DeclareMathAlphabet{\mathit}{OT1}{ptm}{m}{it}} % \end{macrocode} % An |\omicron| command, to fill the gap. % \begin{macrocode} \DeclareMathSymbol{\omicron}{0}{operators}{`\o} % \end{macrocode} % Reduce the space around math operators % \begin{macrocode} \thinmuskip=2mu \medmuskip=2.5mu plus 1mu minus 1mu \thickmuskip=4mu plus 1.5mu minus 1mu % \end{macrocode} % No bold math. % \begin{macrocode} \def\boldmath{% \@warning{there is no bold Symbol font}% \global\let\boldmath=\relax } \DeclareMathSizes{5}{5}{5}{5} \DeclareMathSizes{6}{6}{5}{5} \DeclareMathSizes{7}{7}{5}{5} \DeclareMathSizes{8}{8}{6}{5} \DeclareMathSizes{9}{9}{7}{5} \DeclareMathSizes{10}{10}{7.4}{6} \DeclareMathSizes{10.95}{10.95}{8}{6} \DeclareMathSizes{12}{12}{9}{7} \DeclareMathSizes{14.4}{14.4}{10.95}{8} \DeclareMathSizes{17.28}{17.28}{12}{10} \DeclareMathSizes{20.74}{20.74}{14.4}{12} \DeclareMathSizes{24.88}{24.88}{17.28}{14.4} } % \end{macrocode} % %\subsection{The end} % %At last, the options are processed. % % \begin{macrocode} \ProcessOptions % % \end{macrocode} % %\section{Additional font definitions from \textsf{psfonts}} % %\textit{This is again code from \textsf{psfonts} by Sebastian Rahtz. It %contains some font definitions for Adobe Symbol and Adobe Zapf Dingbats.} % % \subsection{Adobe Symbol font} % \begin{macrocode} %<*Upsy> \typeout{File \space Upsy.fd\space loading \space Adobe\space Symbol}% \DeclareFontFamily{U}{psy}{}% \DeclareFontShape{U}{psy}{m}{n}{<->psyr}{}% \DeclareFontShape{U}{psy}{m}{i}{<->ssub * psy/m/n}{}% % % \end{macrocode} % \subsection{Adobe Zapf Dingbats} % \begin{macrocode} %<*Upzd> \typeout{File \space Upzd.fd\space loading \space Adobe\space ZapfDingbats}% \DeclareFontFamily{U}{pzd}{}% \DeclareFontShape{U}{pzd}{m}{n}{<->pzdr}{}% % % \end{macrocode} % %\Finale % %\section{ToDo} % %There is mainly one things that this package is missing till now: % %\begin{itemize} %\item If the package has been loaded without any local options, it should act %as if the option \texttt{onlyps} had been called. I unfortunately do not know %how to detect this. %\end{itemize} % %\section{Legal rubbish} %\psfont: A \LaTeXe\ package for using PostScript fonts % %Copyright \copyright\ 1996 Sebastian Marius Kirsch\texttt{% % $\langle$sebastian\_kirsch@kl.maus.de$\rangle$} % %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. % \endinput