home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / text / tex / 9571 < prev    next >
Encoding:
Text File  |  1992-07-27  |  3.0 KB  |  87 lines

  1. Newsgroups: comp.text.tex
  2. Path: sparky!uunet!cs.utexas.edu!qt.cs.utexas.edu!yale.edu!yale!gumby!destroyer!ubc-cs!unixg.ubc.ca!reg.triumf.ca!asnd
  3. From: asnd@reg.triumf.ca (Donald Arseneau)
  4. Subject: Re: How to make a macro expand to nothing?
  5. Message-ID: <27JUL199221533271@reg.triumf.ca>
  6. News-Software: VAX/VMS VNEWS 1.41    
  7. Keywords: macro latex tex
  8. Sender: news@unixg.ubc.ca (Usenet News Maintenance)
  9. Nntp-Posting-Host: reg.triumf.ca
  10. Organization: TRIUMF: Tri-University Meson Facility
  11. References: <1992Jul27.213015.29910@bmerh85.bnr.ca>
  12. Date: Tue, 28 Jul 1992 04:53:00 GMT
  13. Lines: 72
  14.  
  15. In article <1992Jul27.213015.29910@bmerh85.bnr.ca>, crath@bnr.ca writes...
  16. In article <1992Jul27.213015.29910@bmerh85.bnr.ca>, you write...
  17. >I am using the following latex macro:
  18. >    \newcommand{\Ch}[2]{{#2}}
  19. >When used, it produces the following output from the given input:
  20. >    input:   This is \Ch{G}{a} sam\Ch{C}{ple.} \Ch{G}{}
  21. >    output:  This is a sample.
  22. >This works as expected except ... 
  23. >extra whitespace gets inserted after the paragraph.  
  24.  
  25. The problem isn't with the macro expanding to a space, or with the 
  26. end of the paragraph.  The extra space is the space between your two 
  27. final \Ch commands.  
  28.  
  29.         input: This is \Ch{G}{} a sample.
  30.         output: This is  a sample.
  31.  
  32. If you want this to look nice for whole words and parts of words, you
  33. are probably best including the space in the parameter:
  34.  
  35. \newcount\plurality \plurality=2  % LaTeX's versions of counters don't work
  36.                                   % well for this.
  37.  
  38. \newcommand{\pl}[2]{{\ifnum1=\plurality #1\else #2\fi}}
  39.  
  40. \pl{This}{These} \pl{is}{are}\pl{ a}{} sample\pl{}{s}.
  41. %                          NOTE " a"
  42.  
  43.  
  44. Here is a fair attempt at handling the spaces automatically:
  45. (put these in a style file so @ is valid in command names.)
  46.  
  47. \newcounter{plurality} 
  48. % If LaTeX-style counters are really necessary.
  49.  
  50. \newcommand{\pl}[2]{\leavevmode{\ifnum\@ne=\c@plurality 
  51.   \plU{#1}\else\plU{#2}\fi}}
  52. % ignore spaces afterwards if blank entry follows a space.
  53. \newcommand{\plU}[1]{\skip@\lastskip #1%
  54.   \ifdim\skip@=\z@\else \if\blank{#1}\aftergroup\ignorespaces\fi\fi}
  55.  
  56. %==============Conditionals by Donald Arseneau==============================
  57. %  \ifblank --- checks if parameter is blank (Spaces count as blank)
  58. %  \ifgiven --- checks if parameter is not blank: like \ifblank\else
  59. %  \ifnull  --- checks if parameter is null (spaces are NOT null)
  60. {\catcode`\!=8 % funny catcode so ! will be a delimiter
  61. %.. use \if\given, \if\blank, \if\naught (\null already exists)
  62. %
  63. \long\gdef\given#1{\fi\Ifbl@nk#1@@@\empty!}
  64. \long\gdef\blank#1{\fi\Ifbl@nk#1@@..!}% if null or spaces
  65. \long\gdef\naught#1{\IfN@Ught#1* {#1}!}% if null
  66. \long\gdef\Ifbl@nk#1#2@#3#4!{\ifx#3#4}
  67. \long\gdef\IfN@Ught#1 #2!{\blank{#2}}
  68. }
  69. %==================================
  70.  
  71. TEST: 
  72.  
  73. \setcounter{plurality}{1}%  
  74. \pl{This}{These} \pl{is}{are} \pl{a}{} sample\pl{}{s}.
  75.  
  76. \setcounter{plurality}{2}%  
  77. \pl{This}{These} \pl{is}{are} \pl{a}{} sample\pl{}{s}.
  78. \setcounter{plurality}{3}%  
  79. \pl{This}{These} \pl{is}{are} \pl{a}{} sample\pl{}{s}.
  80.  
  81. Donald Arseneau        asnd@reg.triumf.ca
  82.