\newdimen \naturalwidth
\newdimen \naturaldepth
\newdimen \naturalheight
\chardef \atcode = \the \catcode `\@
\catcode `\@ = 11
\newbox \l@tterspacebox
\newtoks \l@tterspacetoks
\let \@x = \expandafter
\def \letterspace #1#%
{\def \hb@xmodifier {#1}%
\afterassignment \l@tterspace
\l@tterspacetoks =
}
\def \l@tterspace
{\setbox \l@tterspacebox = \hbox {\the \l@tterspacetoks}%
\naturalwidth = \wd \l@tterspacebox
\naturaldepth = \dp \l@tterspacebox
\naturalheight = \ht \l@tterspacebox
\hbox \hb@xmodifier
{\@x \l@tt@rspace \@x {\@x }\the \l@tterspacetoks \@nd}%
}
\def \l@tt@rspace #1#2\@nd
{\def \1{#1}%
\def \2{#2}%
\1%
\ifx \1\empty \else \ifx \2\empty \else \hss \fi \fi
\ifx \2\empty
\let \n@xt = \relax
\else
\futurelet \2\m@kespaceexplicit #2\@nd
\ifx \1\space \hss \fi
\def \n@xt {\expandafter \l@tt@rspace \2\@nd}%
\fi
\n@xt
}
\def \m@kespaceexplicit #1#2\@nd {\if \2 \def \2{{ }#1#2}\else \def \2{#1#2}\fi}
\catcode `\@ = \the \atcode
%%% Examples
%%% \letterspace {Now is the time for all good men}
%%% \letterspace to \hsize {Now is the time for all good men}
%%% \letterspace spread 0.3 \hsize {Now is the time for all good men}
%%% \letterspace to 1.5 \naturalwidth {Now is the time for all good men}
%%% \letterspace spread 0.5 \naturalwidth {Now is the time for all good men}
%%% \end
|