From 3b3af3ae6bed74cdcf1681ad41a45e0c32391fb4 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 25 Sep 2010 17:38:54 +0200 Subject: [PATCH] split and OFS interface --- ucw-ofs.tex | 96 +++++++++++++++++++++++++++++++++++++ ucw-verb.tex | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ ucwmac-test.tex | 14 ++++++ ucwmac.tex | 121 ++++------------------------------------------ 4 files changed, 243 insertions(+), 112 deletions(-) create mode 100644 ucw-ofs.tex create mode 100644 ucw-verb.tex diff --git a/ucw-ofs.tex b/ucw-ofs.tex new file mode 100644 index 0000000..7d33a88 --- /dev/null +++ b/ucw-ofs.tex @@ -0,0 +1,96 @@ +% The UCW Macro Collection: Interface to OFS (Olsak's Font System) +% Written by Martin Mares in 2010 and placed into public domain +% ------------------------------------------------------------------------- + +\ifx\OFSversion\undefined +\input ofs.tex +% \detailfontmessages +\fi + +% We extend OFS's default CM family by several fonts: cmb, cmcsc + +\ofsputfamlist{^^JUCW:} + +\ofsdeclarefamily [CMRomanUCW] {% ------------ Computer Modern Roman (UCW extended version) + \loadtextfam cmr\fotenc;% + cmbx\fotenc;% + cmti\fotenc;% + cmbxti\fotenc;\defaultextraenc;% + \newvariant8 \sl (Slanted) cmsl\fotenc;\defaultextraenc;% + \newvariant9 \bxsl (BoldSlanted) cmbxsl\fotenc;\defaultextraenc;% + \newvariant a \bo (BoldNormal) cmb\fotenc;\defaultextraenc;% + \newvariant b \csc (CapsAndSmallCaps) cmcsc\fotenc;\defaultextraenc;% + \modifyenc 8z:csfont;% +} +\registerenc: 8z + +\registertfm cmb8z - csb10 +\registertfm cmb8z 0pt-6pt csb5 +\registertfm cmb8z 6pt-7pt csb6 +\registertfm cmb8z 7pt-8pt csb7 +\registertfm cmb8z 8pt-9pt csb8 +\registertfm cmb8z 9pt-10pt csb9 +\registertfm cmb8z 10pt-12pt csb10 +\registertfm cmb8z 12pt-17pt csb12 +\registertfm cmb8z 17pt-* csb17 + +\registertfm cmcsc8z - cscsc10 +\registertfm cmcsc8z 0pt-6pt cscsc5 +\registertfm cmcsc8z 6pt-7pt cscsc6 +\registertfm cmcsc8z 7pt-8pt cscsc7 +\registertfm cmcsc8z 8pt-9pt cscsc8 +\registertfm cmcsc8z 9pt-10pt cscsc9 +\registertfm cmcsc8z 10pt-12pt cscsc10 +\registertfm cmcsc8z 12pt-17pt cscsc12 +\registertfm cmcsc8z 17pt-* cscsc17 + +\ofsdeclarefamily [BlackboardBold] {% + \loadtextfam bbm;% + ;% + ;% + ;\defaultextraenc;% +} + +\registertfm bbm - bbm10 +\registertfm bbm 0pt-6pt bbm5 +\registertfm bbm 6pt-7pt bbm6 +\registertfm bbm 7pt-8pt bbm7 +\registertfm bbm 8pt-9pt bbm8 +\registertfm bbm 9pt-10pt bbm9 +\registertfm bbm 10pt-12pt bbm10 +\registertfm bbm 12pt-17pt bbm12 +\registertfm bbm 17pt-* bbm17 + +\setfonts[CMRomanUCW/] + +% \bb - blackboard bold math font + +\newfam\bbfam +\def\bb{\fam\bbfam} + +\def\loadbbm{ + \loadmathfam\bbfam[/bbm] +} +\loadbbm + +% Recalculate line spacing for a given point size of the font (assuming CM-like metrics). +% Also sets \strut and \topskip. +\def\setbaselines#1{ + \dimen0=1pt + \dimen0=#1\dimen0 + \normalbaselineskip=1.2\dimen0 + \normallineskip=0.1\dimen0 + \setbox\strutbox=\hbox{\vrule height 0.85\dimen0 depth 0.35\dimen0 width 0pt} + \topskip=1\dimen0 + \normalbaselines +} + +% Switch to a specified font size (including math, line spacing etc.) +\def\settextsize#1{ + \def\fomenc{CM} + \setfonts[/#1] + \setmath[//] + \setbaselines{#1} + \loadbbm +} +\def\twelvepoint{\settextsize{12}} diff --git a/ucw-verb.tex b/ucw-verb.tex new file mode 100644 index 0000000..2b98909 --- /dev/null +++ b/ucw-verb.tex @@ -0,0 +1,124 @@ +% The UCW Macro Collection: Verbatim environment +% Written by Martin Mares in 2010 and placed into public domain +% ------------------------------------------------------------------------- + +% We'll use internal macros of plain TeX +\catcode`@=11 + +% New \frenchspacing, which doesn't leave unwanted spaces in text. +\def\frenchsp@cing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m% +\sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m} + +% Typesetting of one verbatim word: |word| + +% Set if spaces should be rendered as "bath-tub" glyphs +\newif\ifshowspaces +\showspacesfalse + +\def\make@ther#1{\catcode`#1=12\relax} +\def\setverb@tim{\tt\frenchsp@cing\catcode`\`=13\catcode`\'=13\n@ligs% +\let\do=\make@ther\dospecials\obeyspaces\showsp@ces} + +{\catcode`'=13 +\catcode``=13 +\gdef\n@ligs{\def`{\relax\lq}\def'{\relax\rq}}} + +{\obeyspaces +\global\chardef\sp@ce=32 +\gdef\showsp@ces{\ifshowspaces\let =\sp@ce\fi} +\global\let =\ } + +\catcode124=\active % Make | active +\def\ttst@rt{\begingroup\setverb@tim\let|=\endgroup} +\let|=\ttst@rt + +% Typesetting of verbatim blocks: +% - the block is enclosed in balanced {}'s +% - leading and trailing empty lines are ignored +% - all other empty lines are converted to \verbemptylineskip's +% - tabs are interpreted (one tab stop per \verbtabsize columns) +% - \showspacestrue works here, too, but it does not apply to tabs + +\newskip\verbstartskip % vskip before \verbatim +\newskip\verbendskip % vskip after \verbatim +\newskip\verbinterlineskip % between adjacent non-empty lines +\newskip\verbemptylineskip % instead of every empty line +\newskip\verbleftskip % left and right margin +\newskip\verbrightskip + +\verbstartskip=3pt plus 1pt minus 0.3pt +\verbendskip=\verbstartskip +\verbinterlineskip=0pt +\verbemptylineskip=5pt plus 2pt +\verbleftskip=0in +\verbrightskip=0pt plus 1fil + +% Can be re-defined to customize the verbatim environment +\def\verblocaldefs{} + +% Size of a single tab +\newcount\verbtabsize +\verbtabsize=8 + +\newdimen\v@rbspace +\newdimen\t@b +\newdimen\t@bwidth + +% When a complete line is assembled in \box0, \verbship is called to add it +% to the main vertical list. You can override it to get e.g. line numbering. +\def\verbship{% + \ifdim\wd0>0pt + \ifdim\v@rbspace>0pt + \penalty-100 + \vskip\v@rbspace + \else + \ifdim\v@rbspace=0pt + \vskip\verbinterlineskip + \fi + \fi + \line{\hskip\verbleftskip \box0 \hskip\verbrightskip} + \v@rbspace=0pt + \else + \advance\v@rbspace by \verbemptylineskip + \fi +} + +\newcount\verbcnt +\def\v@rbend{\par\egroup\endgroup\vskip\verbendskip} +\def\v@rbl{\ifnum\verbcnt>0\{\fi\global\advance\verbcnt by 1\relax} +\def\v@rbr{\ifnum\verbcnt>1\}\else\v@rbend\fi\global\advance\verbcnt by -1\relax} + +\def\v@rbparams{% + \setverb@tim + \raggedbottom + \verbcnt=0 + \v@rbspace=-1000pt + \catcode124=12 + \vskip\verbstartskip + \let\par=\endb@x + \obeylines +} + +\def\startb@x{\setbox0=\hbox\bgroup} +\def\endb@x{\egroup\verbship\startb@x} + +{\catcode`\^^I=\active +\gdef\setupt@bs{\catcode`\^^I=\active +\setbox0=\hbox{\ }\t@bwidth=\wd0\multiply\t@bwidth by \verbtabsize +\def^^I{\egroup\t@b=\wd0\divide\t@b by \t@bwidth% +\multiply\t@b by \t@bwidth% +\advance\t@b by \t@bwidth\advance\t@b by -\wd0\startb@x\box0\hbox to \t@b{}}% +}} + +{ +\catcode`[=1\catcode`]=2\catcode123=\active\catcode125=\active +\gdef\verbatim[\begingroup\v@rbparams\catcode123=\active\catcode125=\active% +\let{=\v@rbl\let}=\v@rbr\chardef\{=123\chardef\}=125\verblocaldefs\setupt@bs\startb@x% +]] + +% Input file verbatim + +\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\setupt@bs\startb@x\input #1 \egroup\endgroup} + +% Let's hide all internal macros +\catcode`@=12 diff --git a/ucwmac-test.tex b/ucwmac-test.tex index d28427c..9d8ad85 100644 --- a/ucwmac-test.tex +++ b/ucwmac-test.tex @@ -1,4 +1,10 @@ \input ucwmac.tex +\input ucw-ofs.tex +\input ucw-verb.tex + +\showfonts + +\twelvepoint \pageunderlay{\placeat{0pt}{0pt}{\crosshair{10pt}}} @@ -77,4 +83,12 @@ abracadabra {!@#$%^&*()\_} %\verbinput{ucwmac.tex} +\hd{Font selection} + +{\bo non-extended bold} + +{\csc Caps And Small Caps} + +$x\in\fam\bbfam R$ + \bye diff --git a/ucwmac.tex b/ucwmac.tex index da83a1c..3cbb25c 100644 --- a/ucwmac.tex +++ b/ucwmac.tex @@ -211,122 +211,19 @@ \zeta\or\eta\or\theta\or\iota\or\kappa\or\lambda\or\mu\or\nu\or\xi\or\pi\or\rho \or\sigma\or\tau\or\upsilon\or\phi\or\chi\or\psi\or\omega\fi$)} -%%% Verbatim typesetting %%% - -% New \frenchspacing, which doesn't leave unwanted spaces in text. -\def\frenchsp@cing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m% -\sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m} - -% Typesetting of one verbatim word: |word| - -% Set if spaces should be rendered as "bath-tub" glyphs -\newif\ifshowspaces -\showspacesfalse - -\def\make@ther#1{\catcode`#1=12\relax} -\def\setverb@tim{\tt\frenchsp@cing\catcode`\`=13\catcode`\'=13\n@ligs% -\let\do=\make@ther\dospecials\obeyspaces\showsp@ces} - -{\catcode`'=13 -\catcode``=13 -\gdef\n@ligs{\def`{\relax\lq}\def'{\relax\rq}}} - -{\obeyspaces -\global\chardef\sp@ce=32 -\gdef\showsp@ces{\ifshowspaces\let =\sp@ce\fi} -\global\let =\ } - -\catcode124=\active % Make | active -\def\ttst@rt{\begingroup\setverb@tim\let|=\endgroup} -\let|=\ttst@rt - -% Typesetting of verbatim blocks: -% - the block is enclosed in balanced {}'s -% - leading and trailing empty lines are ignored -% - all other empty lines are converted to \verbemptylineskip's -% - tabs are interpreted (one tab stop per \verbtabsize columns) -% - \showspacestrue works here, too, but it does not apply to tabs - -\newskip\verbstartskip % vskip before \verbatim -\newskip\verbendskip % vskip after \verbatim -\newskip\verbinterlineskip % between adjacent non-empty lines -\newskip\verbemptylineskip % instead of every empty line -\newskip\verbleftskip % left and right margin -\newskip\verbrightskip - -\verbstartskip=3pt plus 1pt minus 0.3pt -\verbendskip=\verbstartskip -\verbinterlineskip=0pt -\verbemptylineskip=5pt plus 2pt -\verbleftskip=0in -\verbrightskip=0pt plus 1fil - -% Can be re-defined to customize the verbatim environment -\def\verblocaldefs{} - -% Size of a single tab -\newcount\verbtabsize -\verbtabsize=8 - -\newdimen\v@rbspace -\newdimen\t@b -\newdimen\t@bwidth - -% When a complete line is assembled in \box0, \verbship is called to add it -% to the main vertical list. You can override it to get e.g. line numbering. -\def\verbship{% - \ifdim\wd0>0pt - \ifdim\v@rbspace>0pt - \penalty-100 - \vskip\v@rbspace - \else - \ifdim\v@rbspace=0pt - \vskip\verbinterlineskip - \fi - \fi - \line{\hskip\verbleftskip \box0 \hskip\verbrightskip} - \v@rbspace=0pt - \else - \advance\v@rbspace by \verbemptylineskip - \fi -} - -\newcount\verbcnt -\def\v@rbend{\par\egroup\endgroup\vskip\verbendskip} -\def\v@rbl{\ifnum\verbcnt>0\{\fi\global\advance\verbcnt by 1\relax} -\def\v@rbr{\ifnum\verbcnt>1\}\else\v@rbend\fi\global\advance\verbcnt by -1\relax} - -\def\v@rbparams{% - \setverb@tim - \raggedbottom - \verbcnt=0 - \v@rbspace=-1000pt - \catcode124=12 - \vskip\verbstartskip - \let\par=\endb@x - \obeylines -} - -\def\startb@x{\setbox0=\hbox\bgroup} -\def\endb@x{\egroup\verbship\startb@x} +%%% Miscellanea %%% -{\catcode`\^^I=\active -\gdef\setupt@bs{\catcode`\^^I=\active -\setbox0=\hbox{\ }\t@bwidth=\wd0\multiply\t@bwidth by \verbtabsize -\def^^I{\egroup\t@b=\wd0\divide\t@b by \t@bwidth% -\multiply\t@b by \t@bwidth% -\advance\t@b by \t@bwidth\advance\t@b by -\wd0\startb@x\box0\hbox to \t@b{}}% -}} +% {\I italic} with automatic italic correction +\def\I{\it\aftergroup\/} -{ -\catcode`[=1\catcode`]=2\catcode123=\active\catcode125=\active -\gdef\verbatim[\begingroup\v@rbparams\catcode123=\active\catcode125=\active% -\let{=\v@rbl\let}=\v@rbr\chardef\{=123\chardef\}=125\verblocaldefs\setupt@bs\startb@x% -]] +% A breakable dash, to be repeated on the next line +\def\={\discretionary{-}{-}{-}} -% Input file verbatim +% Non-breakable identifiers +\def\<#1>{\leavevmode\hbox{\I #1}} -\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\setupt@bs\startb@x\input #1 \egroup\endgroup} +% A handy shortcut +\let\>=\noindent %%% Epilog %%% -- 2.39.5