Update a couple of CTAN links
[latex2e.git] / required / graphics / keyval.dtx
blob11a96a694e4a384321f4b1c10ec5939f131a6023
2 % \iffalse
3 %% keyval.dtx Copyright (C) 1993 1994 1995 1997 1998 1999 David Carlisle
4 %%            Copyright (C) 2000--2015 David Carlisle, LaTeX3 Project
5 %%
6 %% This file is part of the Standard LaTeX `Graphics Bundle'.
7 %% It may be distributed under the terms of the LaTeX Project Public
8 %% License, as described in lppl.txt in the base LaTeX distribution.
9 %% Either version 1.3c or, at your option, any later version.
12 %<*dtx>
13           \ProvidesFile{keyval.dtx}
14 %</dtx>
15 %<*!plain>
16 %<package&!plain>\NeedsTeXFormat{LaTeX2e}
17 %<package&!plain>\ProvidesPackage{keyval}
18 %<driver>        \ProvidesFile{keyval.drv}
19 % \fi
20 %                \ProvidesFile{keyval.dtx}
21                  [2014/10/28 v1.15 key=value parser (DPC)]
23 % \iffalse
24 %</!plain>
25 %<*driver>
26 \documentclass{ltxdoc}
27 \usepackage{keyval}
28 \begin{document}
29  \DocInput{keyval.dtx}
30 \end{document}
31 %</driver>
32 % \fi
34 % \GetFileInfo{keyval.dtx}
35 % \title{The \textsf{keyval} package\thanks{This file
36 %        has version number \fileversion, last
37 %        revised \filedate.}}
38 % \author{David Carlisle}
39 % \date{\filedate}
40 % \MaintainedByLaTeXTeam{graphics}
41 % \maketitle
43 % \begin{abstract}
44 %  A \LaTeX\ package implementing a system allowing the setting
45 %  of parameters (or `named arguments' with a
46 %  \meta{key}${}={}$\meta{value} syntax.
48 %  Eg: |\foo[height=3in, shadow = true ]{bar}|
49 % \end{abstract}
51 % \CheckSum{158}
53 % \changes{v1.03}
54 %         {1993/10/13}{Initial version}
55 % \changes{v1.04}{1993/11/15}
56 %         {Upgrade after comments from Timothy van Zandt}
57 % \changes{v1.05}{1993/11/17}
58 %         {Further small improvements}
59 % \changes{v1.06}{1994/02/01}
60 %         {Update to LaTeX2e}
61 % \changes{v1.07}{1994/03/15}
62 %         {New style ltxdoc}
63 % \changes{v1.08}{1994/09/12}
64 %         {Improve docstrip handling}
65 % \changes{v1.09}{1995/09/21}
66 %         {Move a comma for graphics/1698}
67 % \changes{v1.14}{2014/04/25}
68 %         {Make most definitions \cs{long} to allow \cs{par} in values: graphics/3446}
69 % \changes{v1.14}{2014/04/25}
70 %         {Only strip a single brace pair from values: graphics/3446}
71 % \changes{v1.15}{2014/05/08}
72 %         {revert this change: Only strip a single brace pair from values: graphics/3446}
75 % This package implements a system of defining and using sets of
76 % parameters, which are set using the syntax \meta{key}=\meta{value}.
78 % For each keyword in such a set, there exists a function which is
79 % called whenever the parameter appears in a parameter list. For
80 % instance if the set |dpc| is to have the keyword |scale| then I
81 % would define.\\
82 % | \define@key{dpc}{scale}{scale ({\tt\string#1})\\}|\\
83 % The first argument of |\define@key| is the  set of keywords being
84 % used, the second is the keyword, and the third is the function to
85 % call. This function will be given as |#1| the \meta{value} specified
86 % by the user.
88 % Normally it is an error to omit the `=\meta{value}' however if an
89 % optional \meta{value} is supplied when the keyword is defined, then
90 % just the keyword need be supplied.\\
91 % |\define@key{dpc}{clip}[true]{...}|\\
92 % For `|clip|' you can go `|clip = true|' or `|clip = false|' or
93 % just `|clip|', which is the same as `|clip = true|'
95 % To use these keywords, just call `|\setkeys|' with a comma
96 % separated list of settings, each of the form
97 % \meta{key}=\meta{value}, or just \meta{key}. Any white space around
98 % the `|=|' and `|,|' is ignored.
100 % As the \meta{key} is passed as a macro argument, if it consists
101 % entirely of a |{ }| group, the outer  braces are stripped off. Thus
102 % |,key=foo,| and |,key={foo},| are equivalent. This fact enables one to
103 % `hide' any commas or equals signs that must appear in the value. i.e.\
104 % in |foo={1,2,3},bar=4|, |foo| gets the value |1,2,3|, the comma after
105 % |1| does not terminate the keyval pair, as it is `hidden' by the
106 % braces.
108 % Empty entries, with nothing between the commas, are silently ignored.
109 % This means that it is not an error to have a comma after the last
110 % term, or before the first.
112 % \section{Example}
114 % We may extend the examples above to give  a `fake' graphics
115 % inclusion macro, with a syntax similar to that used in the psfig
116 % macros.
118 % \makeatletter
119 % \def\dpcgraphics{\@ifnextchar[\@dpcgraphics{\@dpcgraphics[]}}
121 % |\dpcgraphics| has one optional argument which is passed through
122 % |\setkeys|, and one mandatory argument, the filename. It actually
123 % just typesets its arguments, for demonstration.
125 % \def\@dpcgraphics[#1]#2{{\setkeys{dpc}{#1}INPUT: #2}}%
127 % \define@key{dpc}{scale}{scale ({\tt\string#1\relax})\\}
128 % \define@key{dpc}{height}{height ({\tt#1})\\}
129 % \define@key{dpc}{width}{width ({\tt#1})\\}
130 % \define@key{dpc}{bb}{bounding box ({\tt#1})\\}
131 % \define@key{dpc}{clip}[true]{clip ({\tt\string#1\relax})\\}
132 % \makeatother
134 % The declared keys are: |scale|, |height|, |width|, |bb|,
135 % and |clip|. Except for the last, they must all be given a value if
136 % used.
138 % Note how in the following, any white space around |=| or |,| is
139 % ignored, as are the `empty' arguments caused by extra commas. Note
140 % also that each macro receives \emph{exactly} the tokens that you
141 % specify as arguments, no premature expansion is done.
143 % \begin{verbatim}
144 % \def\dpcgraphics{\@ifnextchar[\@dpcgraphics{\@dpcgraphics[]}}
145 % \def\@dpcgraphics[#1]#2{{\setkeys{dpc}{#1}INPUT: #2}}
147 % \define@key{dpc}{scale}{scale ({\tt\string#1\relax})\\}
148 % \define@key{dpc}{clip}[true]{clip ({\tt\string#1\relax})\\}
149 % \end{verbatim}
151 % \begin{minipage}{.4\textwidth}
152 % \begin{verbatim}
153 % \def\scalemacro{9}
154 % \dpcgraphics
155 % [ height =4in, ,
156 %   width = 3in,
157 %   scale = \scalemacro,
158 %   bb = 20 20 300 400 ,
159 %   clip,
160 %  ]{aaa}
161 % \end{verbatim}
162 % \end{minipage}
163 % \hfill
164 % \begin{minipage}{.4\textwidth}
165 % \def\scalemacro{9}
166 %\dpcgraphics
167 % [ height =4in, ,
168 %   width = 3in,
169 %   scale = \scalemacro ,
170 %   bb = 20 20 300 400 ,
171 %   clip ,
172 %  ]{aaa}
173 % \end{minipage}
176 % \section{The Internal Interface}
177 % A declaration of the form:\\
178 % |\define@key{family}{key}{...}|\\
179 % Defines a macro |\KV@prefix@key| with one argument. When used in a
180 % keyval list, the macro receives the value as its argument.
182 % A declaration of the form:\\
183 % |\define@key{family}{key}[default]{...}|\\
184 % Defines a macro |\KV@family@key| as above, however it also defines the
185 % macro |\KV@family@key@default| as a macro with no arguments, and
186 % definition\\
187 %  |\KV@family@key{default}|.
189 % Thus if macros are defined using |\define@key|, the use of a key with
190 % no value \ldots|,foo,|\ldots\ is always equivalent to the use of the
191 % key with some value, \ldots|,foo=default,|\ldots. However a package
192 % writer may wish that the `default' behaviour for some key is not
193 % directly equivalent to using that key with a value. (In particular, as
194 % pointed out to me by Timothy Van Zandt, you may wish to omit error
195 % checking on the default value as you know it is correct.) In these
196 % cases one simply needs to define the two macros
197 % |\KV@|\meta{family}|@key| and |\KV@|\meta{family}|@key@default|
198 % directly using |\def| (or |\newcommand|). I do not supply a user
199 % interface for this type of definition, but it is supported in the
200 % sense that I will try to ensure that any future upgrades of this
201 % package do not break styles making use of these `low level'
202 % definitions.
204 % \StopEventually{}
206 % \section{The Macros}
208 % From version~1.05, all `internal' macros associated to keys have names
209 % of the form:\\
210 % |\KV@|\meta{family}|@|\meta{key} or
211 % |\KV@|\meta{family}|@|\meta{key}|@|\meta{default}
213 %    \begin{macrocode}
214 %<*package>
215 %    \end{macrocode}
217 % \begin{macro}{\setkeys}
218 % The top level macro. |#2| should be a comma separated values of the
219 % form  \meta{key} |=| \meta{value} or just simply \meta{key}.
220 % The macro associated with this key in the `family' |#1| is called with
221 % argument \meta{value}. The second form is only allowed if the key was
222 % declared with a default value.
223 %    \begin{macrocode}
224 \long\def\setkeys#1#2{%
225 %    \end{macrocode}
226 %  Save the `family' for later. Then begin acting on the comma
227 %  separated list.
228 % \changes{v1.11}{1998/06/05}
229 %         {Make \cs{@tempc} safe (in case it is an \cs{if}.}
230 %    \begin{macrocode}
231   \def\KV@prefix{KV@#1@}%
232   \let\@tempc\relax
233   \KV@do#2,\relax,}
234 %    \end{macrocode}
235 % \end{macro}
237 % \begin{macro}{\KV@do}
238 % Iterate down the list of comma separated argument pairs.
239 % \changes{v1.14}{2014/04/25}
240 %         {Add \cs{@empty} not \cs{empty}}
241 %    \begin{macrocode}
242 \long\def\KV@do#1,{%
243  \ifx\relax#1\@empty\else
244   \KV@split#1==\relax
245   \expandafter\KV@do\fi}
246 %    \end{macrocode}
247 % \end{macro}
249 % \begin{macro}{\KV@split}
250 % Split up the keyword and value, and call the appropriate command.
251 % This macro was slightly reorganised for version 1.04, after some
252 % suggestions from Timothy Van Zandt.
253 %    \begin{macrocode}
254 \long\def\KV@split#1=#2=#3\relax{%
255   \KV@@sp@def\@tempa{#1}%
256   \ifx\@tempa\@empty\else
257     \expandafter\let\expandafter\@tempc
258       \csname\KV@prefix\@tempa\endcsname
259     \ifx\@tempc\relax
260 %<plain>      \KV@err
261 %<!plain>      \KV@errx
262        {\@tempa\space undefined}%
263     \else
264       \ifx\@empty#3\@empty
265         \KV@default
266       \else
267         \KV@@sp@def\@tempb{#2}%
268         \expandafter\@tempc\expandafter{\@tempb}\relax
269       \fi
270     \fi
271   \fi}
272 %    \end{macrocode}
273 % \end{macro}
275 % \begin{macro}{\KV@default}
276 % Run the default code, or raise an error.
277 %    \begin{macrocode}
278 \def\KV@default{%
279   \expandafter\let\expandafter\@tempb
280     \csname\KV@prefix\@tempa @default\endcsname
281   \ifx\@tempb\relax
282     \KV@err{No value specified for \@tempa}%
283   \else
284     \@tempb\relax
285   \fi}
286 %    \end{macrocode}
287 % \end{macro}
289 % \begin{macro}{\KV@err}
290 % \changes{v1.10}{1997/11/10}
291 %         {Use \cs{PackageError}}
292 % \changes{v1.12}{1998/11/18}
293 %         {Option system added}
294 % Error messages.
295 %    \begin{macrocode}
296 %<plain>\def\KV@err#1{\errmessage{key-val: #1}}
297 %<*!plain>
298 \DeclareOption{unknownkeysallowed}{%
299   \def\KV@errx#1{\PackageInfo{keyval}{#1}}}
300 \DeclareOption{unknownkeyserror}{%
301   \def\KV@errx#1{\PackageError{keyval}{#1}\@ehc}}
302 \ExecuteOptions{unknownkeyserror}
303 \let\KV@err\KV@errx
304 \ProcessOptions
305 %</!plain>
306 %    \end{macrocode}
307 % \end{macro}
309 % \begin{macro}{\KV@@sp@def}
310 % \changes{v1.10}{1997/11/10}
311 %         {Reorganise to not require doubled hash tokens, and to not
312 %          lose initial brace groups.}
313 % \begin{macro}{\KV@@sp@b}
314 % \begin{macro}{\KV@@sp@c}
315 % \begin{macro}{\KV@@sp@d}
316 % |\KV@@sp@def|\meta{cmd}\meta{token list} is like |\def|, except that
317 % a space token at the beginning or end of \meta{token list} is
318 % removed before making the assignment. \meta{token list} may not
319 % contain the token |\@nil|, unless it is within a brace group.
320 % The names of these commands were changed at version~1.05 to ensure
321 % that they do not clash with `internal' macros in a key family `sp'.
323 % Since v1.10, |#| may appear in the second argument without it
324 % needing to be doubled as |##|. Also earlier versions would
325 % drop any initial brace group, so |{abc}d| would incorrectly
326 % be treated as |abcd|. The current version only removes brace
327 % groups that surround the entire value, so |{abcd}| \emph{is} treated
328 % correctly as |abcd|. Prior to v1.14, two levels of bracing are removed, if
329 % you require the entire argument to be a single brace group, you had
330 % use |{{{abcd}}}|, from v1.14 exactly one brace group is removed, so to make
331 % the entire value be a brace group you need |{{abc}}|.
333 %    \begin{macrocode}
334 \def\@tempa#1{%
335 %    \end{macrocode}
337 %    \begin{macrocode}
338 \long\def\KV@@sp@def##1##2{%
339   \futurelet\KV@tempa\KV@@sp@d##2\@nil\@nil#1\@nil\relax##1}%
340 %    \end{macrocode}
342 % Early release removed initial space by having an `extra' argument
343 % in |\KV@@sp@b| but that removed too many braces, so now make
344 % |\KV@@sp@b| explicitly remove a single space token. That unfortunately
345 % means we need the new |\KV@@sp@d| command to add a space token if
346 % one was not there before.
347 %    \begin{macrocode}
348 \def\KV@@sp@d{%
349   \ifx\KV@tempa\@sptoken
350     \expandafter\KV@@sp@b
351   \else
352     \expandafter\KV@@sp@b\expandafter#1%
353   \fi}%
354 %    \end{macrocode}
356 % \changes{v1.14}{2014/04/25}
357 %         {Add \cs{@empty} to avoid dropping a brace pair: graphics/3446}
358 % \changes{v1.15}{2014/05/08}
359 %         {revert last change}
360 %    \begin{macrocode}
361 \long\def\KV@@sp@b#1##1 \@nil{\KV@@sp@c##1}%
362 %    \end{macrocode}
364 %    \begin{macrocode}
365 %<plain>\def\@sptoken{#1}%
366 %    \end{macrocode}
368 % Make the above definitions, inserting the space token where needed.
369 %    \begin{macrocode}
370   }
371 \@tempa{ }
372 %    \end{macrocode}
374 % \changes{v1.14}{2014/04/25}
375 %         {Add \cs{expandafter} to remove the extra \cs{@empty} token: graphics/3446}
376 % \changes{v1.15}{2014/05/08}
377 %         {revert last change}
378 %    \begin{macrocode}
379 \long\def\KV@@sp@c#1\@nil#2\relax#3{\KV@toks@{#1}\edef#3{\the\KV@toks@}}
380 %    \end{macrocode}
381 % \end{macro}
382 % \end{macro}
383 % \end{macro}
384 % \end{macro}
386 % \begin{macro}{\KV@toks@}
387 % Macro register used above to prevent |#| doubling.
388 % Avoid uding one of the normal scratch registers, as this code
389 % is not in a local group.
390 %    \begin{macrocode}
391 \newtoks\KV@toks@
392 %    \end{macrocode}
393 % \end{macro}
395 % \begin{macro}{\define@key}
396 % Define the command associated to the key |#2| in the family |#1|.
397 % First looks for a default argument (the default value for the
398 % key)
399 %    \begin{macrocode}
400 \def\define@key#1#2{%
401   \@ifnextchar[{\KV@def{#1}{#2}}{\long\@namedef{KV@#1@#2}####1}}
402 %    \end{macrocode}
403 % \end{macro}
405 % \begin{macro}{\KV@def}
406 % Make the definitions of the command, and the default value.
407 %    \begin{macrocode}
408 \def\KV@def#1#2[#3]{%
409   \long\@namedef{KV@#1@#2@default\expandafter}\expandafter
410     {\csname KV@#1@#2\endcsname{#3}}%
411   \long\@namedef{KV@#1@#2}##1}
412 %    \end{macrocode}
413 % \end{macro}
415 %    \begin{macrocode}
416 %</package>
417 %    \end{macrocode}
418 % \Finale
420 \endinput