home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / text / tex / 14729 < prev    next >
Encoding:
Text File  |  1993-01-07  |  2.4 KB  |  64 lines

  1. Path: sparky!uunet!wupost!usc!news.service.uci.edu!unogate!mvb.saic.com!info-tex
  2. From: "Daniel H. Luecking" <DL24794%UAFSYSB.BITNET@SHSU.edu>
  3. Newsgroups: comp.text.tex
  4. Subject: Re: wider macro
  5. Message-ID: <9984798@MVB.SAIC.COM>
  6. Date: Thu, 07 Jan 93 16:53:35 CST
  7. Organization: Info-Tex<==>Comp.Text.Tex Gateway
  8. X-Gateway-Source-Info: Mailing List
  9. Lines: 53
  10.  
  11.  
  12. > From: wilcox@cmns.think.com
  13. >
  14. > I would like to write a TeX macro which inserts spaces after every letter in
  15. > its argument. For example:
  16. >
  17. >                 WIDER  ->  W I D E R
  18. >
  19. > My attempt works, but causes lots of error messages:
  20. >
  21. > \def\wider#1{{\getwider#1\end}}
  22. > \def\getwider#1{#1 \ifx#1\end \let\next=\relax \else \let\next=\getwider
  23. \next}
  24. >
  25. > It also ignores spaces in the input, so all words get run together.
  26. > Any suggestions?
  27. >
  28.  
  29. Yes. In the TeXbook in Appendix D there is given a macro which
  30. accepts a token list and reads each token one by one, and checks to see if
  31. it is an asterix. You could modify the code to read each token,
  32. check to see if it is \end and then, if not, replace the token
  33. and emit a space. Part of the trick is to say
  34.  
  35. {...\let\next= }
  36.               ^
  37. The space is important since, in an assignment, at most one
  38. space is ignored after the equal sign and so this procedure will
  39. not ignore spaces. Here are two possibilities with apparently identical
  40. effects (at least in the simple test), but different syntax.
  41.  
  42. \def\wider{\afterassignment\processthetoken\let\next= }
  43. \def\processthetoken{\ifx\next\endwider\let\next=\relax % do nothing
  44.                      \else\next\space                 % emit token+space
  45.                      \let\next=\wider\fi                %
  46.                      \next}                             % repeat
  47. Test it here:
  48.  
  49. \hbox{\wider     WIDER and W I D E R and W \ I \ D \ E \ R \
  50.       \endwider :widened text}
  51. \hbox{ WIDER and W I D E R and W \ I \ D \ E \ R \ :unwidened text}
  52.  
  53. Another try:
  54. \def\wider#1{\getwider#1\endwider}
  55. \def\getwider{\afterassignment\processthetoken\let\next= }
  56. \def\processthetoken{\ifx\next\endwider\let\next=\relax % do nothing
  57.                      \else\next\space                 % emit token+space
  58.                      \let\next=\getwider\fi             %
  59.                      \next}                             % repeat
  60.  
  61. \hbox{\wider{WIDER and W I D E R and W \ I \ D \ E \ R \ }:widened text}
  62. \hbox{ WIDER and W I D E R and W \ I \ D \ E \ R \ :unwidened text}
  63. \bye
  64.