summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/acromake/acromake.sty
blob: 93291fec1b965f7b5a80d298f2eab65017e6c5aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% This is file `acromake.sty', written on 
%% on <1995/7/16> by Paul A. Thompson, Ph.D.
%% 
%% Copyright (C) 1995 Paul A. Thompson
%% All rights reserved. 
%%
%% Advice and suggestions of D. Carlisle, D. Arseneau and P. Schmitt noted.
%% Errors responsibility of author.
%%
%% This file requires LaTeX2e. 
%% --------------------------- 
%% 
%% No permission is granted to modify this file. 
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% This algorithm is presented and discussed in TeX and TUG News, V4, #1.
%% The algorithm as presented there has several small problems, which are
%% solved here.
%% 
%% This file generates acronyms.  There are three parameters which may be
%% set by the user
%% 1. To generate an acronym
%%    \acromk{ANSA}{{\tt ANSA}}{another nasty stupid acronym}
%%
%%    The first argument is the name used in text to implement the acronym.
%%    The second argument is the name printed in the text when the acronym
%%    is used.  The final argument is the full, non-acronymized version.
%%
%%    So, if there was an acronym 
%%    \acromake{ANSA}{{\tt ANSA}}{another nasty stupid acronym}
%%    it could be used as 
%%
%%    \ANSA is a new approach to the use of \ANSA, where \ANSA is ...
%% 
%%    This would result in
%%
%%    another nasty stupid acronym ({\tt ANSA}) is a new approach to 
%%    the use of {\tt ANSA}, where {\tt ANSA} is ...
%%    
%% 2. To use the acronym
%%    here \ANSA whatever {foo}lish use of acronym you wish
%%    This will generate the following:
%%      Usage number           Resolved text
%%           1              another nasty stupid acronym (ANSA) 
%%           2              ANSA (page 2) 
%%           3 (and beyond) ANSA
%%
%% 3. The following may be set by the user:
%%    ACRcnta  - count of uses of acronym macro which will be in full form  
%%               (default is 1)
%%    ACRcntb  - count of uses of acronym macro which will include page of
%%               acronym def (default is 1 reference, or ACRcntb-ACRcnta)
%%    useACRlb - should the page reference be used - 1-yes, 0-no
%%
%% For every acronym, the macro generates the acronym macro and a macro which
%% acts like a counter for acronym use.  Since counters are quite rare, it is
%% not responsible to use a counter for every acronym - rather, a macro is
%% generated which fills this function.  The acronym macro is called \foo,
%% while the counter macro is called \fooz.  Thus, I would avoid calling any
%% acronym fooz, as this may be confoozing.
%% 
%% The .sty file generates 1 counter if it is included.  For each acronym
%% specified, the .sty file generates two macros, 1 for the acronym, and 1 for
%% the count of acronym use
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
\NeedsTeXFormat{LaTeX2e}%                                         % 1
\RequirePackage{xspace}
\newcommand{\pv}{}     \newcounter{util}
\newcommand{\ACRcnta}{1}%  full acronym generations
\newcommand{\ACRcntb}{2}%  ACRcntb - ACRcnta = acronym + page number
\newcommand{\addtomacro}[2]{% % like \addtocounter, but for a macro
   \setcounter{util}{#1}\addtocounter{util}{#2}\xdef#1{\theutil}}%
\newcommand{\acromake}[3]{%
   \ifnum\ACRcnta<1\renewcommand{\ACRcnta}{1}\fi%
   \expandafter\gdef\csname#1z\endcsname{0}% count occurrences
   \expandafter\newcommand\csname#1\endcsname{%
      \ifnum\csname#1z\endcsname=0\label{acro:#1}\fi%
      \expandafter\addtomacro\expandafter{\csname#1z\endcsname}{1}%
      #3 (#2)% expansion and acronym printed here   
      \ifnum\csname#1z\endcsname=\ACRcnta%
        \expandafter\renewcommand\csname#1\endcsname{%
          \expandafter\addtomacro\expandafter{\csname#1z\endcsname}{1}%
          \renewcommand{\pv}{ (see Page \pageref{acro:#1})}%
          \ifnum\csname#1z\endcsname>\ACRcntb%
            \renewcommand{\pv}{#2}%
          \else%
            \ifnum\ACRcntb=0%
              \renewcommand{\pv}{#2}%
            \else%
              \ifnum\thepage=0\pageref{acro:#1}%
                \renewcommand{\pv}{#2}%
              \else%
                \renewcommand{\pv}{#2\ (see Page \pageref{acro:#1})}%
              \fi%
            \fi%
          \fi%
          \pv\xspace%
        }%
      \fi%
      \xspace}%
}