%% 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}