summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/carlisle/slashed.sty
blob: 9c39b591bbe5a9e7ded937f1a5d66d1716bd02d0 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
%% slashed.sty: Produce the `Feynman slashed character' notation
%% beloved of High Energy Physicists.
%%
%% This is a standard LaTeX package, but as many physicists perversely
%% use use a plain TeX rather than a format designed for document
%% production, it runs under plain as well.
%% (Just say \input slashed.sty in that case
%% rather than \usepackage{slashed}).

%% This began life as me commenting in comp.text.tex
%% on some code posted by Ben Bullock, which was originally written by
%% Mike Wade. 
%% In the ensuing newsgroup thread, P? Parker, Axel Thimm
%% and  Maurizio Loreti and others made helpful comments
%%
%% David Carlisle
%%
%% Copyright 1997 David carlisle
%% This file may be distributed under the terms of the LPPL.
%% See 00readme.txt for details.

\ifx\ProvidesPackage\undefined
  \catcode`\@=11
\else
\ProvidesPackage{slashed}
    [1997/01/16 v0.01 Feynman Slashed Character Notation (DPC)]
\fi


%% Usage  \slashed{p}  \slashed{D} etc.

%% As \slashed may not put the / quite where you want, you can
%% customise it for certain arguments. After
%%
%% \declareslashed{}{/}{.1}{0}{D}
%%
%% Then any later use of \slashed{D} will have the / moved
%% to the right of centre by 0.1 of the width of `D'.
%%
%% The arguments to \declareslashed are:
%%
%% #1 A command to apply to the constructed character (for instance
%% \mathbin to re-make it into a binary relation). (It seems that
%% For the intended use as the Feynman notation it will only
%% ever be applied to `ordinary' symbols, and so #1 will be empty
%% but someone might find use for it.
%%
%% #2 The symbol to overprint. Normally / but you can try \not or |
%% (or \big/ or whatever) to get different effects.
%%
%% #3 The overprinted symbol is moved to the right by this fraction
%% of the width of the symbol #5.
%%
%% #4 The overprinted symbol is moved up by this fraction
%% of the width of the symbol #5.
%% (Note width not height, so #3 and #4 use the same units)
%%
%% #5 The symbol to which these customisations applies.


%% The basic guts of the macro just measures the specified character
%% and a / and arranges to put the centre of the / over the centre
%% of the character. (This, barring some TeX quibbles, was what the
%% orignally posted macro did.)

%% The first refinement is to call the macro via \mathpalette so
%% that it works correctly in subscripts, fractions etc.

%% Remaining problems.

%% The macro puts the middle of the slash through the
%% middle of the symbol, where `middle' is defined as the centre of the
%% bounding rectangles. However the eye doesn't necessarily work that
%% way, for instance $\sla D$ looks to have the slash too far to the
%% left to me. It is virtually impossible to do such micro positioning
%% automatically as it depends on the shape of the letters and the
%% personal judgement of the viewer, and \TeX\ does not have either of
%% these pieces of information. However one could do something like
%% the following which allows you to predefine offsets for certain
%% letters. The offsets are done relative to the size of the symbol
%% so they work OK in superscrips (or within the scope of a La\TeX\
%% size change).

%% Some characters just don't work with /. The computer modern math
%% italic f and / have about the same slope and whatever you do it
%% just looks horrible. So allow the use of an alternative character
%% (eg \not, which has a slightly different slope).

% #1 normally /
% #2 right shift
% #3 up shift
% #4 \displaystyle etc (added by \mathpalette)
% #5 symbol.
\def\sla@#1#2#3#4#5{{%
  \setbox\z@\hbox{$\m@th#4#5$}%
  \setbox\tw@\hbox{$\m@th#4#1$}%
  \dimen4\wd\ifdim\wd\z@<\wd\tw@\tw@\else\z@\fi
  \dimen@\ht\tw@
  \advance\dimen@-\dp\tw@
  \advance\dimen@-\ht\z@
  \advance\dimen@\dp\z@
  \divide\dimen@\tw@
  \advance\dimen@-#3\ht\tw@
  \advance\dimen@-#3\dp\tw@
  \dimen@ii#2\wd\z@
  \raise-\dimen@\hbox to\dimen4{%
    \hss\kern\dimen@ii\box\tw@\kern-\dimen@ii\hss}%
  \llap{\hbox to\dimen4{\hss\box\z@\hss}}}}

% Use offsets of 0 unless a command has been pre-defined
% with different offsets for this symbol.
\def\slashed#1{%
  \expandafter\ifx\csname sla@\string#1\endcsname\relax
    {\mathpalette{\sla@/00}{#1}}%
  \else
    \csname sla@\string#1\endcsname
  \fi}

% #1 normally empty, can be \mathop etc
% #2 normally /
% #3 right shift
% #4 up shift
% #5 symbol
\def\declareslashed#1#2#3#4#5{%
  \expandafter\def\csname sla@\string#5\endcsname{%
    #1{\mathpalette{\sla@{#2}{#3}{#4}}{#5}}}}

\catcode`\@=12

%% Now some fine tuning, if you are not using Computer Modern
%% This is almost certainly wrong. You may think some of these are
%% wrong anyway.


\declareslashed{}{/}{.08}{0}{D}
\declareslashed{}{/}{.1}{0}{A}
\declareslashed{}{/}{0}{-.05}{k}
\declareslashed{}{/}{.1}{0}{\partial}
\declareslashed{}{\not}{-.6}{0}{f}

\endinput

================================================================
% test file (plain TeX)
\input slashed.sty


$ 
\slashed{D} \slashed{p} \slashed{k} \slashed{r} \slashed{A}
 \slashed{f}
\slashed{U} \slashed{\partial}
$

\bye

================================================================
% and same again as LaTeX

\documentclass{article}
\usepackage{slashed}

\begin{document}

$ 
\slashed{D} \slashed{p} \slashed{k} \slashed{r} \slashed{A}
 \slashed{f}
\slashed{U} \slashed{\partial}
$
\end{document}