summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/ifthenx/README
blob: 1f767c8ef9ca4339d2e1a5e3b45fbd1ebd73eb35 (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
ifthenx.sty Copyright (C) 2012 Geoffrey Jones 2012/04/01 (v0.1a)
<geoffrey stop jones snailshell uqconnect stop edu stop au>

Package ifthenx.sty -- this little package extends David Carlisle's
ifthen package, adding a few extra tests. These include:
    \isinteger
    \ispositiveinteger
    \isrealnumber           (synonym: \isnumber)
    \ispositiverealnumber   (synonym: \ispositivenumber)
    \classloaded
    \packageloaded
    \fileexists

Example:
  \ifthenelse{\ispositiveinteger{\foo}\AND\fileexists{\foo.log}}
    { commands to execute if true  }
    { commands to execute if false }

  The production rules for numbers are quite straightforward:
    \ispositiveinteger    (string of one or more digits)
    \isinteger            (ditto, with optional leading minus sign)
    \isrealnumber         (ditto, with optional decimal point)
    \ispositiverealnumber (ditto, with no leading minus sign)

  Note that well-formed numbers are considered negative if they
  possess a leading minus sign. Accordingly, while 0, 0.0, -0 and
  -0.0 are all well-formed numbers, only 0 and 0.0 test positive.
  Consider this a feature.

Motivation:
  While nowadays the ifthen package is sometimes deprecated (e.g., see the
  March 2011 stackexchange.com conversation on this topic), it has several
  useful attributes that make it attractive in certain situations.
  Setting aside its downsides (particularly, the care needed when using it
  inside fragile contexts), positives include:
  1. it provides a simple mechanism for assembling complex logical
     expressions, i.e., those employing \AND, \OR, \NOT and \( ... \)
  2. its syntax, while always subject to preference, may be somewhat
     easier for LaTeX novices to read, write and understand. (To my
     eye, it presents a more approachable and certainly more uniform
     grammar than etoolbox's syntax. E.g., compare
       \ifboolexpr{ test {\ifnumcomp{\value{mycounter}}{>}{3}}}...
     with
       \ifthenelse{\value{mycounter} > 3}...
     )
  3. string expansion semantics (cf., etoolbox that does not)
  4. it is relatively lightweight compared to, say, the might of etoolbox
     (although note that we use etoolbox's \patchcmd if already loaded).

Required Packages:
  ifthen.sty (that's all)

  However, note that ifthenx uses \patchcmd if etoolbox.sty is already
  loaded.

Related Packages:
  xifthen.sty provides an alternative set of ifthen package extension
  tests, several of which are based around capabilities drawn from
  the calc package.

  xifthen and ifthenx are compatible, but only if xifthen is loaded
  before ifthenx (xifthen doesn't patch \ifthenelse but rewrites its
  own modified version instead). If loaded in the recommended order,
  users can ``mix and match'' the tests.
  For example:
      \newcommand*\foo{3}
      \newcommand*\baz{98}
      \ifthenelse{
        \isnumber{\foo}                   % ifthenx pkg command
        \AND\isodd{\foo}                  % ifthen pkg command
        \AND\cnttest{\foo + \baz}{>}{100} % xifthen pkg command
      }{true}{false}
    evaluates true.

Version: v0.1a *** release for comments ***
   The author would welcome bug reports, comments, suggestions,
   extensions and so forth at this early stage.

Acknowledgements:
  Gracious thanks David Carlisle for the ifthen package and for
  teaching me a new technique for run-time patching macro code.

-------------------------- End README ------------------------------------