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
|
% braket.sty Macros for Dirac bra-ket <|> notation and sets {|}
% Donald Arseneau asnd@triumf.ca Last modified 05-May-2005.
% This is free, unencumbered, unsupported software.
%
% Commands defined are:
% \bra{ } \ket{ } \braket{ } \set{ } (small versions)
% \Bra{ } \Ket{ } \Braket{ } \Set{ } (expanding versions)
%
% The "small versions" use fixed-size brackets independent of their
% contents, whereas the "expanding versions" make the brackets and
% vertical lines expand to envelop their contents (internally using
% the \left and \right commands). You should use the vertical bar
% character "|" to input any extra vertical lines. In \Braket these
% vertical lines will expand to match the arguments, and in \Set the
% first vertical will expand. E.g.,
%
% \Braket{ \phi | \frac{\partial^2}{\partial t^2} | \psi }
% \Set{ x\in\mathbf{R}^2 | 0<{|x|}<5 }
%
% Likewise, you may make an expandable double-bar using either
% the "\|" command or its local alias "||".
%
% NOT defined is "\ketbra" (for projection operators) because I prefer
% \ket{ } \bra{ }.
%
% Because each definition is so small, it makes no sense to have a
% complicated generic version for many bracket styles. Instead,
% you can just copy the definitions and change \langle or \rangle,
% < and > to what you like.
%
\def\bra#1{\mathinner{\langle{#1}|}}
\def\ket#1{\mathinner{|{#1}\rangle}}
\def\braket#1{\mathinner{\langle{#1}\rangle}}
\def\Bra#1{\left<#1\right|}
\def\Ket#1{\left|#1\right>}
{\catcode`\|=\active
\gdef\Braket#1{\begingroup
\ifx\SavedDoubleVert\relax
\let\SavedDoubleVert\|\let\|\BraDoubleVert
\fi
\mathcode`\|32768\let|\BraVert
\left<{#1}\right>\endgroup}
}
\def\BraVert{\@ifnextchar|{\|\@gobble}% turn || into \|
{\egroup\,\mid@vertical\,\bgroup}}
\def\BraDoubleVert{\egroup\,\mid@dblvertical\,\bgroup}
\let\SavedDoubleVert\relax
% The \mid@vertical is \vrule with ordinary TeX but \middle| in eTeX.
% We always avoid a \mathchoice in making the inner vertical lines.
% Note that \right>, prints the same as \right\rangle but is faster.
%
% \def\ketbra#1#2{\ket{#1}\bra{#2}}
% \def\Ketbra#1#2{\left|{#1}\vphantom{#2}\right>\left<{#2}\vphantom{#1}\right|}
% \Set{...|...} Only the first | is treated specially.
{\catcode`\|=\active
\gdef\set#1{\mathinner{\lbrace\,{\mathcode`\|32768\let|\midvert #1}\,\rbrace}}
\gdef\Set#1{\left\{
\ifx\SavedDoubleVert\relax \let\SavedDoubleVert\|\fi
\:{\let\|\SetDoubleVert
\mathcode`\|32768\let|\SetVert
#1}\:\right\}}
}
\def\midvert{\egroup\mid\bgroup}
\def\SetVert{\@ifnextchar|{\|\@gobble}% turn || into \|
{\egroup\;\mid@vertical\;\bgroup}}
\def\SetDoubleVert{\egroup\;\mid@dblvertical\;\bgroup}
% If the user is using e-TeX with its \middle primitive, use that for
% verticals instead of \vrule.
%
\begingroup
\edef\@tempa{\meaning\middle}
\edef\@tempb{\string\middle}
\expandafter \endgroup \ifx\@tempa\@tempb
\def\mid@vertical{\middle|}
\def\mid@dblvertical{\middle\SavedDoubleVert}
\else
\def\mid@vertical{\mskip1mu\vrule\mskip1mu}
\def\mid@dblvertical{\mskip1mu\vrule\mskip2.5mu\vrule\mskip1mu}
\fi
% May 2005: Double verticals; tweak spacing.
|