summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/thinsp/thinsp.sty
blob: f1070a09ce14ed44778be8630978e21d82726d34 (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
% Copyright (C) 2007, 2016 Palle Jorgensen

% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.

% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.

% You should have received a copy of the GNU General Public License
% along with this program.  If not, see
% <http://www.gnu.org/licenses/>.

\ProvidesPackage{thinsp}[2016/10/02 v 0.2 Package providing stretchable thinspaces]

\newif\if@thinsp@thinspace
\@thinsp@thinspacetrue
\DeclareOption{nothinspace}{\@thinsp@thinspacefalse}
\DeclareOption{thinspace}{\@thinsp@thinspacetrue}

\newif\if@thinsp@thinthinspace
\@thinsp@thinthinspacetrue
\DeclareOption{nothinthinspace}{\@thinsp@thinthinspacefalse}
\DeclareOption{thinthinspace}{\@thinsp@thinthinspacetrue}


\newif\if@thinsp@negthinspace
\@thinsp@negthinspacefalse
\DeclareOption{nonegthinspace}{\@thinsp@negthinspacefalse}
\DeclareOption{negthinspace}{\@thinsp@negthinspacetrue}

\def\thinsp@thinamount{.5}
\def\thinsp@thinthinamount{.25}

\DeclareOption{onethird}{%
  \def\thinsp@thinamount{.333}%
  \def\thinsp@thinthinamount{.167}%
}

\DeclareOption{onehalf}{%
  \def\thinsp@thinamount{.5}%
  \def\thinsp@thinthinamount{.25}%
}

\DeclareOption{twothirds}{%
  \def\thinsp@thinamount{.667}%
  \def\thinsp@thinthinamount{.333}%
}

\ProcessOptions*

\def\stretchthinspace{%
  \nobreak\hskip\thinsp@thinamount\fontdimen2\font%
  \@plus\thinsp@thinamount\fontdimen3\font%
  \@minus\thinsp@thinamount\fontdimen4\font%
  \relax%
}

\def\stretchnegthinspace{%
  \nobreak\hskip-\thinsp@thinamount\fontdimen2\font%
  \@plus\thinsp@thinamount\fontdimen4\font%
  \@minus\thinsp@thinamount\fontdimen3\font%
  \relax%
}

\def\stretchthinthinspace{%
  \nobreak\hskip\thinsp@thinthinamount\fontdimen2\font%
  \@plus\thinsp@thinthinamount\fontdimen3\font%
  \@minus\thinsp@thinthinamount\fontdimen4\font%
  \relax%
}

\AtBeginDocument{%
  \if@thinsp@thinspace
  \PackageInfo{thinsp}{Redefining \string\thinspace}
  \let\thinspace\stretchthinspace
  \@ifpackageloaded{amsmath}{%
    \PackageInfo{thinsp}{And now redefining AMS-math's
      \string\thinspace}
    \def\,{\ifmmode\mskip\thinmuskip\else\stretchthinspace\fi}%
    \let\thinspace\,%
  }
  \fi
  % 
  \if@thinsp@negthinspace
  \PackageInfo{thinsp}{Redefining \string\negthinspace}
  \let\negthinspace\stretchnegthinspace
  \@ifpackageloaded{amsmath}{%
    \PackageInfo{thinsp}{And now redefining AMS-math's
      \string\negthinspace}
    \def\!{\ifmmode\mskip-\thinmuskip\else\stretchnegthinspace\fi}%
    \let\negthinspace\!%
  }
  \fi
  % 
  \if@thinsp@thinthinspace
  \@ifundefined{thinthinspace}{}{%
    \PackageInfo{thinsp}{Redefining \string\thinthinspace}}
  \let\thinthinspace\stretchthinthinspace
  \fi
}

\endinput