%D \module %D [ file=core-fnt, %D version=1995.10.10, %D title=\CONTEXT\ Core Macros, %D subtitle=Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Core Macros / Fonts} \unprotect %D \macros %D {compound} %D %D We will overload the already active \type {|} so we have %D to save its meaning in order to be able to use this handy %D macro. %D %D \starttyping %D so test\compound{}test can be used instead of test||test %D \stoptyping \bgroup \catcode`\|=\@@active \gdef\compound#1{|#1|} \egroup %D Here we hook some code into the clean up mechanism needed %D for verbatim data. \appendtoks \disablecompoundcharacters \disablediscretionaries \to \everycleanupfeatures %D \macros %D {stretched} %D %D Stretching characters in a word is a sort of typographical %D murder. Nevertheless we support this manipulation for use in %D for instance titles. %D %D \starttyping %D \hbox to 5cm{\stretched{murder}} %D \stoptyping %D %D \typebuffer %D %D or %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D \showsetup{stretched} \def\stretched#1% {\ifvmode\hbox to \hsize\else\ifinner\else\hbox\fi\fi \bgroup\processtokens\relax\hss\relax{\hss\hss}{#1}\egroup} %D \startbuffer %D \stretched{Unknown Box} %D \hbox to .5\hsize{\stretched{A Horizontal Box}} %D \vbox to 2cm{\stretched{A Vertical Box}} %D \hbox to 3cm{\stretched{sp{\'e}c{\`\i}{\"a}l}} %D \stopbuffer %D %D \getbuffer %D %D The first line of this macros takes care of boxing. Normally %D one will use an \type{\hbox} specification. The last line %D shows how special characters should be passed. %D %D \typebuffer %D \macros %D {stretchednormalcase, stretcheduppercase, stretchedlowercase} %D %D A convenient alternative is: %D %D \starttyping %D \stretcheduppercase{Is this what you like?} %D \stoptyping %D %D \typebuffer %D %D this one uses fixed skips and kerns. %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D The default skip can be set with: %D Given the following settings, the space is 1em by default: \def\stretchedspacefactor{4} \def\stretchedspaceamount{.25em} \def\stretchedbreaktokens{.@/} \unexpanded\def\stretchednormalcase {\stretchedsomecase\firstofoneargument} \unexpanded\def\stretcheduppercase {\stretchedsomecase{\the\everyuppercase\uppercase}} \unexpanded\def\stretchedlowercase {\stretchedsomecase{\the\everylowercase\lowercase}} \def\stretchedsomecase#1#2% {\bgroup #1{\def\textstring{#2}}% \ifdim\stretchedspaceamount=\zeropoint \textstring \else \def\textkern##1% {% beware: ##1 may not be \box\somebox -) \determinemidwordbreak{##1}{\stretchedbreaktokens}% \kern\stretchedspaceamount##1\domidwordbreak}% \def\textskip {\scratchdimen\stretchedspaceamount \hskip\stretchedspacefactor\scratchdimen}% \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA\textskip\@EA{\textstring}% \fi \egroup} %D An auxiliary macro, see for usage \type {\stretcheduppercase}. \let\domidwordbreak\relax \def\setmidwordbreaktoken#1% {\sfcode`#1=5000\relax} \def\determinemidwordbreak#1#2% {\edef\midwordbreaktokens{#2}% \ifx\midwordbreaktokens\empty \global\let\domidwordbreak\relax \else \setbox\scratchbox\hbox {\expandafter\handletokens\midwordbreaktokens\with\setmidwordbreaktoken a\space \!!dimena\lastskip #1\space\!!dimenb\lastskip \relax % needed \ifdim\!!dimena=\!!dimenb \globallet\domidwordbreak\relax \else \globallet\domidwordbreak\allowbreak \fi}% \fi} %D \macros %D {shiftedword, shiftedwords} %D %D Used as \type {\shiftedwords {10pt} {some text}} this macro will %D move % \def\shiftedword#1% #2% % {\raise#1\hbox} % {#2}} % officially: {\ifdim#1>\zeropoint\raise\else\lower\fi#1\hbox{#2}} % \def\shiftedwords#1#2% % {\processisolatedwords{#2}{\shiftedword{#1}}} %D \macros %D {low, high, lohi, hilo} %D %D Although \TEX\ is pretty well aware of super- and %D subscripts, its mechanism is mainly tuned for math mode. %D The next few commands take care of script texts both modes. %D %D \startbuffer %D The higher\high{one goes} the lower\low{one drops}, or\lohi{yes}{no}? %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D Note the different placement of \type {\lohi}, where we %D need a bit more space. The implementation looks a bit %D fuzzy, since some \type {\fontdimen}'s are involved to %D determine the optimal placement. \def\dodohighlow {\ifx\fontsize\empty \ifmmode \ifnum\fam<0 \tx \else \holamathfont \fi \else \tx \fi \else \tx \fi} \def\dohighlow#1#2#3#4#5% todo, named fontdimens {\dontleavehmode \bgroup \scratchdimen\ifdim\fontexheight\textfont2=1ex #2\textfont2\else #3ex\fi \advance\scratchdimen #4ex \kern.1ex \setbox\scratchbox\hbox{#1\scratchdimen\hbox{\dodohighlow#5}}% \ht\scratchbox\strutheight \dp\scratchbox\strutdepth \box\scratchbox \egroup} \unexpanded\def\high{\dohighlow\raise\mathsupnormal{.86}{0}} \unexpanded\def\low {\dohighlow\lower\mathsubnormal{.48}{0}} \unexpanded\def\lohi {\dosingleempty\dolohi} \unexpanded\def\hilo {\dosingleempty\dohilo} \def\dolohi[#1]#2#3% {\dontleavehmode \hbox {\setbox4\hbox{\dohighlow\lower\mathsubnormal{.48}{.1}{#2}}% \setbox6\hbox{\dohighlow\raise\mathsupnormal{.86}{.1}{#3}}% \doif{#1}{\v!left} {\ifdim\wd4<\wd6 \setbox4\hbox to \wd6{\hss\box4}% \else \setbox6\hbox to \wd4{\hss\box6}% \fi}% \ifdim\wd4<\wd6 \wd4=\zeropoint\box4\box6 \else \wd6=\zeropoint\box6\box4 \fi}} \def\dohilo[#1]#2#3% {\dolohi[#1]{#3}{#2}} %D You can provide an optional keyword \type {left}, in which %D case the super and subscripts will be aligned in a way that %D permits placement at the left of a word (which means that %D it will be right aligned). %D %D \startbuffer %D \lohi{aha}{ah} test \lohi{aha}{ah} test %D \lohi[left]{aha}{ah} test \lohi[left]{aha}{ah} test %D \lohi{aha}{ah} test\lohi{aha}{ah} test %D \lohi[left]{aha}{ah}test \lohi[left]{aha}{ah}test %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D \macros %D {setupinitial,placeinitial,checkinitial} %D %D {\em To be documented.} %D %D \starttyping %D \setupinitial[state=start] \placeinitial \input tufte %D \stoptyping %D %D and %D %D \starttyping %D \def\bpar{\ifvmode\checkinitial\fi} %D \def\epar{\ifhmode\par\fi\checkinitial} %D \stoptyping % to do: more fine tuning \unexpanded\def\setupinitial {\dodoubleempty\getparameters[\??dc]} \definefontsynonym[Initial][Regular] % prefered initial identifier \definefontsynonym[initial][Initial] % internal but accepted too \setupinitial [\c!state=\v!stop, \c!location=\v!text, \c!n=3, \c!distance=.125em, \c!command=, \s!font=initial] \def\AutoDroppedCapsCommand{\NiceDroppedCaps\@@dccommand\@@dcfont\@@dcdistance\@@dcn}% \unexpanded\def\placeinitial {\doifelse\@@dclocation\v!margin{\chardef\DropMode\plusone}{\chardef\DropMode\zerocount}% \doif \@@dcstate\v!start{\ifcase\@@dcn\else\AutoDroppedCaps\fi}} \let\checkinitial\CheckDroppedCaps \protect \endinput