summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/interval/interval.sty
blob: 1aa4ae52346aca8af7917edc096c2e3d4cee2d52 (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
\ProvidesPackage{interval}[2019/03/06 v0.4]

\newcommand\INTVversion{v0.4}

%%
%% This package can be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2003/12/01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% The Current Maintainer of this work is Lars Madsen (daleif@math.au.dk).
%%


\RequirePackage{pgfkeys}

\newcommand\INTV@scaler[1]{
  \def\INTV@auto{auto}
  \def\INTV@arg{#1}
  \ifx\INTV@auto\INTV@arg
    \def\INTV@openfence{\mathopen{}\mathclose\bgroup\left\INTV@leftfence}
    \def\INTV@closefence{\aftergroup\egroup\right\INTV@rightfence}
  \else
    \def\INTV@openfence{\mathopen{#1\INTV@leftfence}}
    \def\INTV@closefence{\mathclose{#1\INTV@rightfence}}
  \fi
}


% setup
\pgfkeys{%
  /interval/.is family,%
  /interval,%
  left open fence/.initial={]},%
  left closed fence/.initial={[},%
  right open fence/.initial={[},%
  right closed fence/.initial={]},%
  left fence/.link=/interval/left closed fence,%
  right fence/.link=/interval/right closed fence,%
  separator symbol/.initial={,},%
  open left/.style={ left fence/.link=/interval/left open fence },%
  open right/.style={ right fence/.link=/interval/right open fence },%
  open/.style={open left,open right},%
  scaled/.code={\INTV@scaler{#1}},%
  scaled/.default=auto,%
  soft open fences/.style={%
    left open fence={(},%
    right open fence={)},%
  },%
  colorize/.initial=,%
}

% user configuation
\newcommand\intervalconfig[1]{\pgfkeys{/interval,#1}}

\newcommand\intervalsetup{
  \PackageError{interval}{The \string\intervalsetup\space macro has
    been removed. Please use \string\intervalconfig\space instead}{}
}


\newcommand\interval[3][]{%
  \begingroup%
  \def\INTV@openfence{\mathopen{\INTV@leftfence}}%
  \def\INTV@closefence{\mathclose{\INTV@rightfence}}%
%  \let\INTV@extra\relax%
  \pgfkeys{interval,#1}%
  \pgfkeysgetvalue{/interval/left fence}{\INTV@leftfence}%
  \pgfkeysgetvalue{/interval/right fence}{\INTV@rightfence}%
  \pgfkeysgetvalue{/interval/colorize}{\INTV@colorize}%
  \INTV@colorize%
  \INTV@openfence%
  #2% 
  \pgfkeysvalueof{/interval/separator symbol}
  #3%
  \INTV@closefence%
  \endgroup%
}

\newcommand\ointerval[3][]{\interval[open,#1]{#2}{#3}}
\newcommand\linterval[3][]{\interval[open left,#1]{#2}{#3}}
\newcommand\rinterval[3][]{\interval[open right,#1]{#2}{#3}}