%%% OFS: Olsak's Font System based on NFSS + LaTeX macros %%% Jul 2001 Petr Olsak %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% see ofsdoc.tex for more details \NeedsTeXFormat{LaTeX2e} % I don't like LaTeX, the plain macro is more clean. % See the variant of my macros ofs.tex for plain. % But, some users ask for LaTeX style files :-(( %\ProvidesPackage{ofs}[2001/07/01 OFS based on NFSS] %\ProvidesPackage{ofs}[2002/10/24 OFS based on NFSS] % \addcmd added \ProvidesPackage{ofs}[2003/02/25 OFS based on NFSS] % \setfonts {\bgroup \catcode`\-=12 ... by Z. Wagner added \def\OFSversion{Oct. 2002} \typeout{OFS (Olsak's Font System) based on NFSS initialized. <\OFSversion>} %%%% \fontusage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \bgroup \catcode`\#=12 \catcode`\{=12 \catcode`}=12 \catcode`\X=1 \catcode`\Z=2 \catcode`\^^M=14 \catcode`\ =12 \catcode`\|=0\catcode`\\=12% |gdef|fontusageX |begingroup |typeoutX%--------------------------------------------------------------- \fontusage: ============ Olsak's Font System, usage: ===============^^J \usepackage [sjannon, sdynamo] {ofs} ... for example^^J \showfonts ... shows all loaded font families (by previous \usepackage)^^J \setfonts [Family/] ... local switch to the new family, after this, the^^J \rm, \bf, \it, bi will switch to the variants. The current size is used.^^J \setfonts [/size] ... local switch to the new size of fonts, the family is^^J not changed. The "size" has the following possible formats:^^J at ... the same as \font\something=file at^^J ... the same as at^^J ... the same as atpt^^J scaled ... the same as \font\something=file scaled^^J mag fonts will be magnified by given coefficient^^J depend on current size of the fonts.^^J \setfonts [Family/size] ... switch to the new family at given size^^J \setfonts [Family-vr/] ... switch to the specified font, the current size^^J is used. The "vr" is two-letter acronym for variants: rm, bf, it, bi.^^J \setfonts [Family-vr/size] ... switch to the specified font.^^J \fontdef\name [Family/size] ... same as \gdef\name{\setfonts[Family/size]}^^J The "Family" or "size" parameter may be empty.^^J \OFSfamily [Family] ... expands to internal NFSS family name.^^J \OFSfamilydefault [Family] ... same as \edef\familydefault{\OFSfamily[Family]} Z%----------------------------------------------------------------------- |endgroup Z |egroup %%%% \rm, \bf, \it, bi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\bi{\fontseries{b}\fontshape{it}\selectfont} \def\bf{\fontseries{b}\fontshape{n}\selectfont} \def\it{\fontseries{m}\fontshape{it}\selectfont} \def\rm{\fontseries{m}\fontshape{n}\selectfont} \def\bfdefault{b} %%%% Macros used in declaration files %%%%%%%%%%%%%%%%%% \def\ofs@listfamilies{} \def\ofs@messageheader{OFS (l.\the\inputlineno): } \def\ofs@unknownfam{undefined} \def\OFSdeclarefamily [#1] #2{% \OFSputfamlist {^^J \space\space[#1/]}% \expandafter \gdef\csname ofs-fam:#1\endcsname {#2}% \expandafter \gdef\csname ofs-fam:#2\endcsname {#2}% \bgroup \count2=18 \def\tmpa ##1{\if:##1\let\tmpa=\relax \else\advance\count2 by-1 \fi\tmpa}\tmpa #1:% \def\tmpa {\ifnum\count2>0 \advance\count2 by-1 \OFSputfamlist{ }% \else\let\tmpa=\relax \fi\tmpa}\tmpa \egroup } \def\OFSfamily [#1]{% \expandafter \ifx\csname ofs-fam:#1\endcsname \relax \ofs@unknownfam \else \csname ofs-fam:#1\endcsname \fi } \def\OFSfamilydefault [#1]{% \edef\tmpa{\OFSfamily[#1]}% \ifx\tmpa\ofs@unknownfam \typeout{\ofs@messageheader WARNING. The family is not set.^^J The family name [#1] is not known in the list: \ofs@listfamilies}% \else \edef\familydefault{\tmpa}% \fi } \def\OFSputfamlist #1{% \xdef\ofs@listfamilies {\ofs@listfamilies #1}% } \def\OFSextraencoding #1{% \expandafter \ifx \csname ofs-enc:#1\endcsname \relax \edef\ofs@extraencoding{#1}% \lowercase{\input{#1ini.def}}\relax \expandafter \def \csname ofs-enc:#1\endcsname {}% \fi } \def\OFSnormalvariants{\OFSputfamlist{% \string\rm, \string\bf, \string\it, \string\bi}} %%%% Defaults %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \OFSputfamlist {^^Jdefaults:} \OFSdeclarefamily [CMRoman] {cmr} \OFSnormalvariants \OFSputfamlist {, \string\sl} \OFSdeclarefamily [CMSans] {cmss} \OFSputfamlist {\string\rm, \string\bf, \string\it, \space-} \OFSdeclarefamily [CMTypewriter] {cmtt} \OFSputfamlist {\string\rm, \space- , \string\it, \space- , \string\sl} \OFSdeclarefamily [Times] {ptm} \OFSnormalvariants \OFSdeclarefamily [Helvetica] {phv} \OFSnormalvariants \OFSputfamlist{, \string\nrm, \string\nbf, \string\nit, \string\nbi} \OFSdeclarefamily [Courier] {pcr} \OFSnormalvariants \def\sl{\fontseries{m}\fontshape{sl}\selectfont} \def\nrm{\fontseries{mc}\fontshape{n}\selectfont} \def\nbf{\fontseries{bc}\fontshape{n}\selectfont} \def\nit{\fontseries{mc}\fontshape{it}\selectfont} \def\nbi{\fontseries{bc}\fontshape{it}\selectfont} %%%% \showfonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\showfonts{\typeout{\ofs@messageheader The list of known font families:\ofs@listfamilies}} %%%% \setfonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\setfonts {\bgroup \catcode`\-=12 \ofs@setfonts} \def\ofs@setfonts [#1/#2]{\egroup \OFSsetfonts{#1}{#2}} \DeclareRobustCommand \OFSsetfonts [2]{% \edef\tmpa{#1}\expandafter \ofs@readfamvariant\tmpa--:% \ifx\famvariant\empty \ofs@setfontfamily [#1/#2]% \else \ofs@setsinglefont [#1/#2]% \fi \ignorespaces } \def\ofs@readfamvariant #1-#2-#3:{\def\tmpb{#1}\def\famvariant{#2}} \def\ofs@setfontfamily [#1/#2]{% \if |#1|\else \edef\tmpa{\OFSfamily[#1]}% \ifx\tmpa\ofs@unknownfam \typeout{\ofs@messageheader WARNING. The family is not set.^^J The family name [#1/] is not known in the list: \ofs@listfamilies}% \else \fontfamily{\tmpa}% \fi \fi \if |#2|\else \edef\tmpa{#2}\expandafter\ofs@readfontsize \tmpa:% \fontsize{\tmpa}{\f@baselineskip}% \fi \ofs@selectfont } \let\ofs@selectfont=\selectfont \def\ofs@setsinglefont [#1-#2/#3]{% \let\ofs@selectfont=\relax \ofs@setfontfamily [#1/#3]\let\ofs@selectfont=\selectfont \csname #2\endcsname } \def\ofs@readfontsize #1#2:{\if a#1\ofs@readfontsizeat #1#2:% \else \if s#1\ofs@readfontsizescaled #1#2:% \else \if m#1\ofs@readfontsizemag #1#2..:% \fi\fi\fi } \def\ofs@readfontsizeat at#1:{\def\tmpa{#1}} \def\ofs@readfontsizescaled scaled#1:{\dimen0=0.01pt \dimen0=#1\dimen0 \edef\tmpa{\the\dimen0}} \def\ofs@readfontsizemag mag#1.#2.#3:{\dimen0=\f@size pt \if|#2|\if|#3|% \errmessage{OFS: "mag" need the decimal parameter with decimal point}% \fi\fi \dimen0 =#1.#2 \dimen0 \advance\dimen0 by7sp % rounding to three digits after decimal point \ifdim\dimen0<10pt \edef\tmpa{+\the\dimen0}\else \edef\tmpa{\the\dimen0}\fi \dimen0 =\expandafter \ofs@readsixdigits \tmpa :::::|pt \edef\tmpa{\the\dimen0}% } \def\ofs@readsixdigits #1#2#3#4#5#6#7#8#9|{% \if:#5#1#2\else\if:#6#1#2#3\else\if:#7#1#2#3#4\else \if:#8#1#2#3#4#5\else#1#2#3#4#5#6\fi\fi\fi\fi } %%%% \fontdef %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\fontdef #1[#2/#3]{\def\tmpc{!}% \edef\tmpa{#3}\ifx \tmpa\tmpc \edef\tmpa{\f@size}\fi \edef\tmpb{#2}\expandafter \ofs@readfamvariant\tmpb--:% \ifx \tmpb\tmpc \ifx\famvariant\empty \xdef #1{\noexpand\setfonts [\f@family/\tmpa]}% \else \xdef #1{\noexpand\setfonts [\f@family-\famvariant/\tmpa]}% \fi \else \xdef #1{\noexpand\setfonts [#2/\tmpa]}% \fi } %%%% \ifknownfam %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif \ifofs@familypresent \def\ifknownfam [#1]{% \expandafter \ifx\csname ofs-fam:#1\endcsname \relax \expandafter \ofs@familypresentfalse \else \expandafter \ofs@familypresenttrue \fi \ifofs@familypresent } %%%% \addcmd %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\addcmd #1#2{\expandafter\def\expandafter\tmpa\expandafter{#1}% \def\tmpb{#1}% \ifx\tmpa\tmpb % the #1 is not a macro \expandafter\let\csname \string#1-original\endcsname =#1% \expandafter\def\expandafter #1\expandafter{% \csname\string#1-original\endcsname #2}% \else % the #1 is a macro \expandafter\def\expandafter #1\expandafter{#1#2}% \fi } %%%% Extra encoding %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\setextrafont{\ifx\ofs@extraencoding\undefined \typeout{\ofs@messageheader WARNING. Extra encoding is no declared by \string\OFSextraencoding.}% \else \fontencoding{\ofs@extraencoding}\selectfont \fi } \def\extchar{\afterassignment\ofs@doextchar \chardef\tmpa=} \def\ofs@doextchar{{\setextrafont\tmpa}} %%%% Accents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \DeclareRobustCommand \accentabove [3]{% \def\tmpa{#3}% \ifx \tmpa\empty #1\else \leavevmode\vbox{% \setbox0=\hbox{#3}\setbox2=\hbox{#1}% \dimen0=\ht0 \advance\dimen0 by\dp2 \advance\dimen0 by#2\relax \offinterlineskip \halign {##\cr \hidewidth\slantcorrection{\dimen0}\box2 \hidewidth\cr \noalign{\kern#2}\box0 \cr}}% \fi } \DeclareRobustCommand \accentbelow [3]{% \def\tmpa{#3}% \ifx \tmpa\empty #1\else \leavevmode\vtop{% \setbox0=\hbox{#3}\setbox2=\hbox{#1}% \dimen0=-\dp0 \advance\dimen0 by-\ht2 \advance\dimen0 by-#2\relax \offinterlineskip \halign {##\cr \box0 \cr\noalign{\kern#2}% \hidewidth \slantcorrection{\dimen0}% \dimen0=\dp2 \ifdim\dimen0<.2ex \dimen0=.2ex \fi \vbox to\dimen0{\hbox{\box2}\vss}\hidewidth\cr}}% \fi } \def\slantcorrection #1{\dimen0=#1\relax \dimen0 =\strip@pt \fontdimen1\the\font \dimen0 \kern 2\dimen0 } %%%% Options = OFS-style files %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \let\OFSprocessoptions=\relax \DeclareOption *{\input{\CurrentOption.sty}} \ProcessOptions\relax \let\OFSprocessoptions=\undefined