jk@cs.man.ac.uk (John Kewley ICL) (09/12/90)
Here are some macros for performing acronym expansion in LaTeX. They could well work in TeX as well, I have never tried. They are, hopefully fully described within the acronym.sty file. J.K. John M. Kewley, ICL, Wenlock Way, West Gorton, Manchester. M12 5DR Tel: (+44) 61 223 1301 X2138 Email: jk@r6.cs.man.ac.uk / jk@nw.stl.stc.co.uk #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # acronym.sty # This archive created: Tue Sep 11 17:54:45 1990 export PATH; PATH=/bin:$PATH if test -f 'acronym.sty' then echo shar: will not over-write existing file "'acronym.sty'" else cat << \SHAR_EOF > 'acronym.sty' % @(#)acronym.sty 1.2 9/11/90 Copyright 1989 ICL % % Author: John Kewley % % This style file contains macros for acronyms. % % Two styles are supported - footnote and parenthesised. % This can be switched using \foottrue for footnotes or % \footfalse (default) for parenthesised. % % Parenthesised acronyms are used as follows: % Declare acronym using: % \newacronym{latex name}{expanded name}[printed name] % (The printed name defaults to latex name). % e.g. \acronym{GNU}{GNU Not Unix}[\sc{gnu}] % When acronym is first used (\GNU), the following is printed: % expanded name (printed name) % GNU Not Unix (GNU) % Subsequent use yields only the printed name. % % Footnote acronyms work in the same way except when they are first used: % printed name\footnote{expanded name} % % Acronyms can be followed by an optional argument: % \newacronym{PE}{Processing Element} % \PE['s] gives % Processing Element's (PE's) % % They can also be followed by s to signify the plural: % \newacronym{PE}{Processing Element} % \PEs gives % Processing Elements (PEs) % % If they are to be referred to before they are first used, in a title say % When full expansion might not look good, or in a section heading where % the definition would not be wanted in the contents list, short and long forms % of the acronym are defined. % % e.g. \section{\GNUshort\ Comings} % % The long version can be used where a repetition of the full name is required. % % Quite often acronyms are defined in a Glossary, Terminology or % Table of Acronyms. The item command is provided for this: % % \GNUitem gives % \item[GNU] GNU Not Unix % % Whenever an acronym is defined using \newacronym, all the above forms are % available. % % John Kewley ICL % % jk@r6.cs.man.ac.uk or % jk@nw.stl.stc.co.uk % Auxiliary definitions: % \ifnextchar %\def\ifnextchar#1#2#3{\@ifnextchar#1{#2}{#3}} \def\namegdef#1{\expandafter\gdef\csname #1\endcsname} \def\namedef#1{\expandafter\def\csname #1\endcsname} \def\nameuse#1{\csname #1\endcsname} \newif\iffoot \footfalse \def\acitemx#1#2[#3]{\item [#1#3] #2#3} \def\acitem#1#2{\@ifnextchar [{\acitemx{#1}{#2}}{\acitemx{#1}{#2}[]}} \def\acfootx#1#2[#3]{#1#3\footnote{#2#3}} \def\acfoot#1#2{\@ifnextchar [{\acfootx{#1}{#2}}{\acfootx{#1}{#2}[]}} \def\aclongx#1#2[#3]{#1#3 (#2#3)} \def\aclong#1#2{\@ifnextchar [{\aclongx{#1}{#2}}{\aclongx{#1}{#2}[]}} \def\acshortx#1[#2]{#1#2} \def\acshort#1{\@ifnextchar [{\acshortx{#1}}{\acshortx{#1}[]}} \def\acronx#1#2[#3]{\iffoot\acfoot{#1}{#2}[#3]\else\aclong{#1}{#2}[#3]\fi} \def\acron#1#2{\@ifnextchar [{\acronx{#1}{#2}}{\acronx{#1}{#2}[]}} \def\newacaux#1#2{\namegdef{#1x}[##1]{#2##1}% \namegdef{#1}{\protect\@ifnextchar [{\protect\nameuse{#1x}}{#2}}} \def\newac#1#2[#3]{% \namegdef{#1item}{\acitem{#3}{#2}} \namegdef{#1items}{\acitem{#3s}{#2s}} \namegdef{#1long}{\protect\aclong{#2}{#3}} \namegdef{#1longs}{\protect\aclong{#2s}{#3s}} \namegdef{#1short}{\protect\acshort{#3}} \namegdef{#1shorts}{\protect\acshort{#3s}} \namegdef{#1foot}{\protect\acfoot{#3}{#2}} \namegdef{#1foots}{\protect\acfoot{#3s}{#2s}} \namegdef{#1x}[##1]{\acron{#2##1}{#3##1}\newacaux{#1}{#3}} \namegdef{#1s}{\protect\nameuse{#1x}[s]} \namegdef{#1}{\protect\@ifnextchar [{\protect\nameuse{#1x}}% {\protect\acronx{#2}{#3}[]\protect\newacaux{#1}{#3}}}} \def\termit#1#2[#3]{\newac{#1}{#2}[#3]\acitem{#3}{#2}} \def\termitem#1#2{\@ifnextchar [{\termit{#1}{#2}}{\termit{#1}{#2}[#1]}} \def\newte#1#2[#3]{\namegdef{#1item}{\acitem{#3}{#2}}} \def\newterm#1#2{\protect\@ifnextchar [{\newte{#1}{#2}}{\newte{#1}{#2}[#1]}} % \newacronym % #1 : short name % #2 : long name % [#3] : optional printed name \def\newacronym#1#2{\@ifnextchar [{\newac{#1}{#2}}{\newac{#1}{#2}[#1]}} SHAR_EOF fi # end of overwriting check # End of shell archive exit 0 -- J.K. John M. Kewley, ICL, Wenlock Way, West Gorton, Manchester. M12 5DR Tel: (+44) 61 223 1301 X2138 Email: jk@r6.cs.man.ac.uk / jk@nw.stl.stc.co.uk