Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!yale!quasi-eli!cs.yale.edu!newsbase!duchier From: duchier@cs.yale.edu (Denys Duchier) Newsgroups: comp.text.tex Subject: Re: underlining large blocks of text for submittable manuscript Message-ID: Date: 10 Jul 90 04:02:27 GMT References: <1990Jul10.011954.18294@max.physics.sunysb.edu> Sender: news@cs.yale.edu Reply-To: duchier-denys@cs.yale.edu Followup-To: comp.text.tex Organization: Computer Science, Yale University, New Haven, CT 06520-2158 Lines: 344 In-reply-to: graham@max.physics.sunysb.edu's message of 10 Jul 90 01:19:54 GMT I did this once out of curiosity. You need to make underlined fonts using MetaFont because there is no other way to get proper hyphenation to happen otherwise (so you can just forget about making each character active and have it expand into an underlined version of its original self; supposing this idea crossed your mind in the first place). Fortunately making underlined fonts is rather easy if you have MetaFont (henceforth MF). Here is how to proceed: 1. find out where the .mf files for the necessary fonts are kept on your system. usually it is in: /usr/local/lib/mf/inputs 2. depending on who is the bozo who installed MF on your system, you may have to set the following environment variables: setenv MFINPUTS .:/usr/local/lib/mf/inputs setenv MFBASES .:/usr/local/lib/mf/bases setenv MFPOOL .:/usr/local/lib/mf and you should read the man page. 3. create a directory somewhere. let's call it myfonts. in this directory create symbolic links to the .mf files for the fonts you want to create underlined versions of. 4. put the following code in myfonts/underlined.mf extra_endchar:=extra_endchar&"underlineit;"; def underlineit = if (charcodeoct"030") and (charcodeoct"137") and (charcode/myfonts/%f.%mpk should be replaced with the full pathname. This might not be required, but I don't know that and you don't that, so who needs surprises. Quite frankly I don't even know what the 3 is for. I guessed and it worked, and I wasn't inclined to find out, so there! 7. Finally, you need to write some TeX code that will switch to the right fonts AND implement correctly stretching underlined space in between words. I did this (sort of) for LaTeX. I'll simply include the code at the end and you can sort it out. It was originally in file underlined.sty. To write it I simply followed the algorithm given in the TeXbook. Caveat: the file assumes that some fonts have been generated at various magnifications. Underlined text is obtained using \begin{underline} ... \end{underline}. Within the environment \hspace is redefined to produce underlined space. Well, I hope I remembered everything right and didn't leave to much out. It's really not as complicated as it sounds. Resulting output looks ok. I am sure those who really know what they are doing have run out of hair to tear out by now, and I will be informed shortly of all I did wrong, and why it was a perfectly stupid idea to begin with. So i'll learn. Hope this helps anyway. --Denys \newdimen\UL@Fwidth \newdimen\UL@Fstretch \newdimen\UL@Fshrink \newdimen\UL@Fextra \newdimen\UL@width \newdimen\UL@stretch \newdimen\UL@shrink \mathchardef\tw@m=2000 \def\UL@GlueSetup{% \UL@width \UL@Fwidth \UL@stretch \UL@Fstretch \UL@shrink \UL@Fshrink \ifnum \spacefactor > \tw@m \advance\UL@width \UL@Fextra \fi \ifnum \spacefactor = \@m \else \multiply \UL@stretch \spacefactor \divide \UL@stretch \@m \multiply \UL@shrink \@m \divide \UL@shrink \spacefactor \fi} \def\UL@Glue{\hskip \UL@width plus \UL@stretch minus \UL@shrink} \def\UL@Rule{\hrule depth 2.7pt height -2.3pt} \newif\if@ULunskip \@ULunskiptrue \def\UL@Space{\ifhmode \if@ULunskip\unskip\fi \@ULunskiptrue \UL@GlueSetup\leaders\UL@Rule\UL@Glue\fi} \def\UL@Tilde{\penalty\@M\UL@Space} {\catcode`\ =\active\gdef\UL@ActivateSpace{\catcode`\ =\active\let =\UL@Space}} {\catcode`\^^M=\active\gdef\UL@ActivateCR{\catcode`\^^M=\active\let^^M=\UL@Space}} {\catcode`\~=\active\gdef\UL@ActivateTilde{\catcode`=\active\let~=\UL@Tilde}} \def\UL@FontInfoSetup{% \UL@Fwidth = \fontdimen 2 \the\font \UL@Fstretch = \fontdimen 3 \the\font \UL@Fshrink = \fontdimen 4 \the\font \UL@Fextra = \fontdimen 7 \the\font} \def\UL@PRM{\UL@prm\UL@FontInfoSetup} \def\UL@PIT{\UL@pit\UL@FontInfoSetup} \def\UL@PBF{\UL@pbf\UL@FontInfoSetup} \def\UL@PSL{\UL@psl\UL@FontInfoSetup} \def\UL@PSF{\UL@psf\UL@FontInfoSetup} \def\UL@PSC{\UL@psc\UL@FontInfoSetup} \def\UL@PTT{\UL@ptt\UL@FontInfoSetup} \def\UL@FontStyle{% \ifnum \fam=\z@ \rm\else \ifnum \fam=\itfam \it\else \ifnum \fam=\slfam \sl\else \ifnum \fam=\bffam \bf\else \ifnum \fam=\ttfam \tt\else \ifnum \fam=\sffam \sf\else \ifnum \fam=\scfam \sc\else \fi\fi\fi\fi\fi\fi\fi} \def\UL@SpaceRule{\leaders\UL@Rule\hskip} \def\UL@hspace#1{\leavevmode \expandafter\UL@SpaceRule #1\relax \@ULunskipfalse} \def\UL@hspacer#1{\leavevmode \vrule width\z@ \nobreak \expandafter\UL@SpaceRule #1\relax \hskip\z@} \def\underlined{% \UL@ActivateSpace \UL@ActivateCR \UL@ActivateTilde \def\rm{\protect\UL@PRM}% \def\it{\protect\UL@PIT}% \def\bf{\protect\UL@PBF}% \def\sl{\protect\UL@PSL}% \def\sf{\protect\UL@PSF}% \def\sc{\protect\UL@PSC}% \def\tt{\protect\UL@PTT}% \let\@hspace\UL@hspace \let\@hspacer\UL@hspacer \UL@FontStyle } \let\UL@vpt\vpt \def\vpt{% \UL@vpt \def\UL@prm{\@getfont\UL@prm\z@\@vpt{ucmr5}}% \def\UL@pit{\@subfont\it\rm}% \def\UL@psl{\@subfont\sl\rm}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@vpt{ucmbx5}}% \def\UL@ptt{\@subfont\tt\rm}% \def\UL@psf{\@subfont\sf\rm}% \def\UL@psc{\@subfont\sc\rm}% } \let\UL@vipt\vipt \def\vipt{% \UL@vipt \def\UL@prm{\@getfont\UL@prm\z@\@vipt{ucmr6}}% \def\UL@pit{\@subfont\it\rm}% \def\UL@psl{\@subfont\sl\rm}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@vipt{ucmbx6}}% \def\UL@ptt{\@subfont\tt\rm}% \def\UL@psf{\@subfont\sf\rm}% \def\UL@psc{\@subfont\sc\rm}% } \let\UL@viipt\viipt \def\viipt{% \UL@viipt \def\UL@prm{\@getfont\UL@prm\z@\@viipt{ucmr7}}% \def\UL@pit{\@subfont\it\rm}% \def\UL@psl{\@subfont\sl\rm}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@viipt{ucmbx7}}% \def\UL@ptt{\@subfont\tt\rm}% \def\UL@psf{\@subfont\sf\rm}% \def\UL@psc{\@subfont\sc\rm}% } \let\UL@viiipt\viiipt \def\viiipt{% \UL@viiipt \def\UL@prm{\@getfont\UL@prm\z@\@viiipt{ucmr8}}% \def\UL@pit{\@getfont\UL@pit\itfam\@viiipt{ucmti8}}% \def\UL@psl{\@getfont\UL@psl\slfam\@viiipt{ucmsl8}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@viiipt{ucmbx8}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@viiipt{ucmtt8}\@nohyphens\UL@ptt\@viiipt}% \def\UL@psf{\@getfont\UL@psf\sffam\@viiipt{ucmss8}}% \def\UL@psc{\@getfont\UL@psc\scfam\@viiipt{ucmcsc10}}% KLUDGE } \let\UL@ixpt\ixpt \def\ixpt{% \UL@ixpt \def\UL@prm{\@getfont\UL@prm\z@\@ixpt{ucmr9}}% \def\UL@pit{\@getfont\UL@pit\itfam\@ixpt{ucmti9}}% \def\UL@psl{\@getfont\UL@psl\slfam\@ixpt{ucmsl9}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@ixpt{ucmbx9}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@ixpt{ucmtt9}\@nohyphens\UL@ptt\@ixpt}% \def\UL@psf{\@getfont\UL@psf\sffam\@ixpt{ucmss9}}% \def\UL@psc{\@getfont\UL@psc\scfam\@ixpt{ucmcsc10}}% KLUDGE } \let\UL@xpt\xpt \def\xpt{% \UL@xpt \def\UL@prm{\@getfont\UL@prm\z@\@xpt{ucmr10}}% \def\UL@pit{\@getfont\UL@pit\itfam\@xpt{ucmti10}}% \def\UL@psl{\@getfont\UL@psl\slfam\@xpt{ucmsl10}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xpt{ucmbx10}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@xpt{ucmtt10}\@nohyphens\UL@ptt\@xpt}% \def\UL@psf{\@getfont\UL@psf\sffam\@xpt{ucmss10}}% \def\UL@psc{\@getfont\UL@psc\scfam\@xpt{ucmcsc10}}% } \let\UL@xipt\xipt \def\xipt{% \UL@xipt \def\UL@prm{\@getfont\UL@prm\z@\@xipt{ucmr10 \@halfmag}}% \def\UL@pit{\@getfont\UL@pit\itfam\@xipt{ucmti10 \@halfmag}}% \def\UL@psl{\@getfont\UL@psl\slfam\@xipt{ucmsl10 \@halfmag}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xipt{ucmbx10 \@halfmag}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@xipt{ucmtt10 \@halfmag}\@nohyphens\UL@ptt\@xipt}% \def\UL@psf{\@getfont\UL@psf\sffam\@xipt{ucmss10 \@halfmag}}% \def\UL@psc{\@getfont\UL@psc\scfam\@xipt{ucmcsc10 \@halfmag}}% } \let\UL@xiipt\xiipt \def\xiipt{% \UL@xiipt \def\UL@prm{\@getfont\UL@prm\z@\@xiipt{ucmr12}}% \def\UL@pit{\@getfont\UL@pit\itfam\@xiipt{ucmti12}}% \def\UL@psl{\@getfont\UL@psl\slfam\@xiipt{ucmsl12}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xiipt{ucmbx12}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@xiipt{ucmtt12}\@nohyphens\UL@ptt\@xiipt}% \def\UL@psf{\@getfont\UL@psf\sffam\@xiipt{ucmss12}}% \def\UL@psc{\@getfont\UL@psc\scfam\@xiipt{ucmcsc10 \@magscale1}}% } \let\UL@xivpt\xivpt \def\xivpt{% \UL@xivpt \def\UL@prm{\@getfont\UL@prm\z@\@xivpt{ucmr10 \@magscale2}}% \def\UL@pit{\@getfont\UL@pit\itfam\@xivpt{ucmti10 \@magscale2}}% \def\UL@psl{\@getfont\UL@psl\slfam\@xivpt{ucmsl10 \@magscale2}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xivpt{ucmbx10 \@magscale2}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@xivpt{ucmtt10 \@magscale2}\@nohyphens\UL@ptt\@xivpt}% \def\UL@psf{\@getfont\UL@psf\sffam\@xivpt{ucmss10 \@magscale2}}% \def\UL@psc{\@getfont\UL@psc\scfam\@xivpt{ucmcsc10 \@magscale2}}% } \let\UL@xviipt\xviipt \def\xviipt{% \UL@xviipt \def\UL@prm{\@getfont\UL@prm\z@\@xviipt{ucmr17}}% \def\UL@pit{\@getfont\UL@pit\itfam\@xviipt{ucmti10 \@magscale3}}% \def\UL@psl{\@getfont\UL@psl\slfam\@xviipt{ucmsl10 \@magscale3}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xviipt{ucmbx10 \@magscale3}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@xviipt{ucmtt10 \@magscale3}\@nohyphens\UL@ptt\@xviipt}% \def\UL@psf{\@getfont\UL@psf\sffam\@xviipt{ucmss10 \@magscale3}}% \def\UL@psc{\@getfont\UL@psc\scfam\@xviipt{ucmcsc10 \@magscale3}}% } \let\UL@xxpt\xxpt \def\xxpt{% \UL@xxpt \def\UL@prm{\@getfont\UL@prm\z@\@xxpt{ucmr10 \@magscale4}}% \def\UL@pit{\@getfont\UL@pit\itfam\@xxpt{ucmti10 \@magscale4}}% \def\UL@psl{\@getfont\UL@psl\slfam\@xxpt{ucmsl10 \@magscale4}}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xxpt{ucmbx10 \@magscale4}}% \def\UL@ptt{\@getfont\UL@ptt\ttfam\@xxpt{ucmtt10 \@magscale4}\@nohyphens\UL@ptt\@xxpt}% \def\UL@psf{\@getfont\UL@psf\sffam\@xxpt{ucmss10 \@magscale4}}% \def\UL@psc{\@getfont\UL@psc\scfam\@xxpt{ucmcsc10 \@magscale4}}% } \let\UL@xxvpt\xxvpt \def\xxvpt{% \UL@xxvpt \def\UL@prm{\@getfont\UL@prm\z@\@xxvpt{ucmr10 \@magscale5}}% \def\UL@pit{\@subfont\it\rm}% \def\UL@psl{\@subfont\sl\rm}% \def\UL@pbf{\@getfont\UL@pbf\bffam\@xxvpt{ucmbx10 \@magscale5}}% \def\UL@ptt{\@subfont\tt\rm}% \def\UL@psf{\@subfont\sf\rm}% \def\UL@psc{\@subfont\sc\rm}% }