%---------------------------------------------------------------------- % 18:46:21 7/4/1988 %---------------------------------------------------------------------- % module `POLTAILS' % % % macro package for PLAIN TeX % A PREMATURED VERSION!!! % to be used with crossed fingers % NO RIGHTS RESERVED % % SPECIFICATION: % defines macros \Polisha \PolishA \Polishe \PolishE % for Polish tailed characters, % \Polishl and \PolishL for Polish suppressed l's % and, moreover, macro \polopenquot as Polish % opening quotation symbol, macro \numbersymbol for N, % and facilitates the use of them. % % macros and variables with names containing at-sign `@' are assumed % to be local for this module % % % IMPLEMENTATION : % % authors: B. JACKOWSKI - T. HOœDYS - M. RY›KO % %-------- % \def\KeepKerns#1#2{% #2{\setbox0=\hbox{#1}\kern-\wd0\copy0\kern-\wd0}#2}% %-------- \catcode `\@=11 % %-------- \newdimen\prop@rshift % \prop@rshift<0 - shift to the left, >0 - shift to the right \newdimen\taild@pth \newdimen\d@pthcorr % \d@pthcorr<0 - shift up, >0 - shift down \newdimen\min@x \newdimen\curr@x %-------- {% \font\fivegr@@k=cmmi5 at 5truept% \global\min@x=\fontdimen5\fivegr@@k} %-------- \def\@@lap#1{\vbox to 0pt{\hsize=0pt\kern\d@pthcorr\rlap{\hss#1}\vss}}% %-------- \def\s@ttwofonts#1#2{% \font\small@rfont=\curr@nttailfont#1% \font\bigg@rfont=\curr@nttailfont#2% }% %-------- \def\s@tprop@rfonts{% \curr@x=\fontdimen5\the\font% % doubled magnification factors (half excluded): 2000, 2400, 3456, 4148, 4976 \s@ttwofonts00% \ifdim 2\min@x>\curr@x% \s@ttwofonts01% \else\ifdim 2.4\min@x>\curr@x% \s@ttwofonts12% \else\ifdim 3.456\min@x>\curr@x% \s@ttwofonts23% \else\ifdim 4.148\min@x>\curr@x% \s@ttwofonts34% \else% \ifdim 4.976\min@x>\curr@x% \s@ttwofonts45% \fi\fi\fi\fi\fi}% %-------- \def\s@ttailparam@t@rs#1#2{% % \curr@ntcedillashift and \curr@ntiotashift are defined later on \if c\curr@nttail% % C E D I L L A \prop@rshift=\curr@ntcedillashift{#2}% \def\prop@rchar{\char'30}% \d@pthcorr=-0.05ex \setbox0=\hbox{\prop@rchar}\taild@pth=\dp0 \advance\taild@pth by \d@pthcorr % O.K. since \s@ttailparam@t@rs % is used inside a group in \tail@d \else% % G R E E K I O T A \def\prop@rchar{\char'23}% \prop@rshift=\curr@ntiotashift{#2}% \s@tprop@rfonts% \ifnum \the\lccode`#1=`#1 % small letter \small@rfont\else% \ifnum \the\uccode`#1=`#1 % capital letter \bigg@rfont% \fi\fi% \d@pthcorr=-0.05ex \taild@pth=1ex \advance\taild@pth by \d@pthcorr \fi}% %-------- \def\tail@d#1#2{% #1% incidentally, preceeding implicit kerns are preserved % (e.g., W\\asko is O.K.) {\s@ttailparam@t@rs{#1}{#2}% \setbox0=\@@lap{\kern2\prop@rshift\prop@rchar}\dp0=\taild@pth \box0}% }% %-------- \def\PolishA{\tail@d A0}% \def\PolishE{\tail@d E1}% \def\Polisha{\tail@d a2}% \def\Polishe{\tail@d e3}% %-------- \def\Polishl{\char32l}% \def\PolishL{\leavevmode{\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}% \kern-\wd0}L} %-------- \newdimen\polop@nquotdim% \def\polopenquot{% {\setbox0=\hbox{''}\polop@nquotdim=\ht0% \setbox0=\hbox{,}\advance\polop@nquotdim by -\ht0% \setbox1=\hbox{\lower\polop@nquotdim\hbox{''}}% \ht1=\ht0 \dp1=\dp0% \leavevmode\box1}}% %-------- \def\@@symbol{\vrule height 1ex width 0.22em depth -0.9ex% \llap{\char'27 \kern -0.28em}}% %-------- \def\numbersymbol{N\kern0.05em\@@symbol\kern 0.1em }% DON'T REMOVE THE SPACE! %-------- \catcode `\@=12% %---------------------------------------------------------------------- % the main macro of this part of the module, i.e., \Polishdiacriticalletters#1, % produces the Polish diacritical character made of a letter #1; % it may be used with letters a, c, e, l, n, o, s, x, z, % and A, C, E, L, N, O, S, X, Z, % #1=x and #1=X represent accented z and Z, resp. % #1=z and #1=Z represent dotted z and Z, resp., % #1=@ repesents N§ symbol, % #1=, repesents Polish opening quotation mark,i.e. ",,"; % % GENERAL REMARKS % the module should work well with a basic set of CM or AM fonts; % due to especial arragement of macros accomplishing % Polish "tailed" letters implicit kernings are preserved; % % IT DOES NOT WORK IN MATHMODE!!! - embeding in boxes might help... % (also typewriter fonts does not provide necessary types) % %-------- \def\Polishdiacriticalletters#1{% \if a#1\KeepKerns{\Polisha}a% \else\if c#1\KeepKerns{\'c}c% \else\if e#1\KeepKerns{\Polishe}e% \else\if l#1\Polishl% \else\if n#1\'n% \else\if o#1\KeepKerns{\'o}o% \else\if s#1\'s% \else\if x#1\'z% \else\if z#1\.z% \else\if A#1\KeepKerns{\PolishA}A% \else\if C#1\KeepKerns{\'C}C% \else\if E#1\PolishE% \else\if L#1\PolishL% \else\if N#1\'N% \else\if O#1\KeepKerns{\'O}O% \else\if S#1\'S% \else\if X#1\'Z% \else\if Z#1\.Z% \else\if @#1\numbersymbol% \else\if ,#1\polopenquot% \else% \ifhmode % \hskip2pt \vrule height1.5ex width\overfullrule depth0.2ex \hskip2pt % \else % \ifvmode % \vskip2pt \hrule height1.5ex width\overfullrule depth0.2ex \vskip2pt % \fi % \fi % %\message{NIE MA DIAKRYTYCZNEGO #1! }% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % %-------- % \begingroup \global\let\previoustwobackslashes=\\% \def\\#1{% \Polishdiacriticalletters{#1}}% \global\let\Polishtwobackslashes=\\ \endgroup %-------- % % An alternative implementation, using active `/' rather than `\\': % %-------- \newcount\previousslashcode \previousslashcode=\the\catcode`\/% \begingroup \catcode`\/=12 % \global\def\normalslash{/} \catcode`\/=\active % \global\let\previoussingleslash=/% \def/#1{% \ifx /#1\normalslash \else% \Polishdiacriticalletters{#1}% \fi% }% \global\let\Polishsingleslash=/ %---------------------------------------------------------------------- % macros \switchtoslash and \switchtobackslashes enable an undecided % user to switch back and forth between the two ways of marking Polish % diacritical letters in a source text: after \switchtoslash / should be % used as the preceding operator, after \switchtobackslashes - \\ (default). % Switching restores the previous meaning of the other operator. %---------------------------------------------------------------------- \global\def\switchtoslash{% \global\previousslashcode=\the\catcode`\/% \catcode`\/=\active% \global\let\\=\previoustwobackslashes% \global\let\previoussingleslash=/% \global\let/=\Polishsingleslash}% % \global\def\switchtobackslashes{% \global\let\previoustwobackslashes=\\% \global\let\\=\Polishtwobackslashes% \ifnum \the\catcode`\/=\active \global\let/=\previoussingleslash \fi% \global\catcode`\/=\previousslashcode % }% \endgroup% % %---------------------------------------------------------------------- % some additional macros: %---------------------------------------------------------------------- \begingroup% \catcode`\@=11 % % a, A, e, and E shifts: \global\def\setiotashifts(#1\A #2\E #3\a #4\e){% \def\curr@ntiotashift##1{% \ifcase##1 #1em\or#2em\or#3em\or#4em\fi}}% DON'T REMOVE THE SPACE! %-------- \global\def\setcedillashifts(#1\A #2\E #3\a #4\e){% \def\curr@ntcedillashift##1{% \ifcase##1 #1em\or#2em\or#3em\or#4em\fi}}% DON'T REMOVE THE SPACE! %-------- \global\def\switchtoiotatail{\let\curr@nttail=i}% \global\def\switchtocedillatail{\let\curr@nttail=c}% \global\def\switchtononbold{% \setiotashifts(-0.12\A -0.2\E -0.1\a -0.18\e)% \setcedillashifts(-0.1\A -0.24\E -0.14\a -0.2\e)% \def\curr@nttailfont##1{% \ifcase ##1 cmmi5 at 5truept \or% cmmi5 at 5.475truept \or% cmmi5 at 6truept \or% cmmi5 at 7.2truept \or% cmmi5 at 8.64truept \or% cmmi5 at 10.37truept \or% \fi}% }% \global\def\switchtobold{% \setiotashifts(-0.14\A -0.18\E -0.1\a -0.2\e)% \setcedillashifts(-0.18\A -0.24\E -0.16\a -0.22\e)% \def\curr@nttailfont##1{% \ifcase ##1 cmmi5 at 5truept \or% cmmi5 at 5.475truept \or% cmmi5 at 6truept \or% cmmi5 at 7.2truept \or% cmmib10 at 10truept \or% cmmib10 at 10.95truept \or% \fi}% }% \endgroup% %---------------------------------------------------------------------- % DEFAULTS: %---------------------------------------------------------------------- \switchtobackslashes \switchtoiotatail \switchtononbold % % \endinput