diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/ofs/ofs.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/ofs/ofs.sty | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/ofs/ofs.sty b/Master/texmf-dist/tex/generic/ofs/ofs.sty new file mode 100644 index 00000000000..6bac96bbc5f --- /dev/null +++ b/Master/texmf-dist/tex/generic/ofs/ofs.sty @@ -0,0 +1,301 @@ + +%%% 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<dimen> ... the same as \font\something=file at<dimen>^^J + <dimen> ... the same as at<dimen>^^J + <number> ... the same as at<number>pt^^J + scaled<number> ... the same as \font\something=file scaled<number>^^J + mag<decimal-number> 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 + + + + |