\def\fileversion{1.4} \def\filedate{2005/02/22} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{hepparticles}[\filedate\space HEP particle typesetting (v\fileversion)] \RequirePackage{maybemath} %\RequirePackage{xspace} %% Package options \def\@italicNames{}% \def\@forceItalic{}% \def\@maybeSansSerif{yes}% default is ON \def\@emptyOption{}% \def\@empty{}% %% Make particle symbols behave as for generic math mode \DeclareOption{italic}{% \def\@italicNames{yes}% } %% Force particle symbols to behave as for italic math mode \DeclareOption{itforce}{% \def\@italicNames{yes}% \def\@forceItalic{yes}% } %% Force upright particle names (default) \DeclareOption{notitalic}{% \def\@italicNames{}% \def\@forceItalic{}% } %% Allow particle names to be sans-serif in context (no italics, even for generic particles) \DeclareOption{maybess}{% \def\@maybeSansSerif{yes}% } \DeclareOption{noss}{% \def\@maybeSansSerif{}% } \ProcessOptions %% A set of macros for typesetting high energy particle names, to %% meet the following criteria: %% %% 1. The main particle name is a Roman or Greek symbol, to be %% typeset in upright font in normal contexts. Note that this %% follows from the mathematical convention that italics are %% only used to designate *variables* and that concrete particle %% names are not variables. However, if a symbol is being used %% to represent a whole class of possible concrete particles then %% that symbol should be italicised as befits a genuine variable. %% %% 2. Additionally a superscript and/or subscript may follow the %% main symbol. %% %% 3. Particle resonances may also have a resonance mass specifier %% which is typeset in parentheses following the main symbol %% e.g. (1440) and a spectroscopic term, e.g. P_11. %% In general these may also be followed by sub- and %% super-scripts. %% %% 4. The particle names are expected to be used both in and out %% of mathematical contexts. %% %% 5. If the surrounding text is bold or italic then the particle %% name should adapt to that context as best as possible (this %% may not be possible for Greek symbols). %% %% 6. Over-lines and over-tildes are used to indicate anti-particles %% and supersymmetric (SUSY) particles respectively. The line and/or %% tilde are only placed above the main symbol, NOT the accompanying %% sub- and super-scripts. %% %% 7. Sub- and super-scripts should be at the same heights for particles, %% anti-particles, SUSY particles and SUSY-anti-particles. %% %% A consequence of point 5 is that the well-known problems with %% boldness of particle names in section titles, headers and %% tables of contents automatically disappear if these macros are %% used. %% %% %% The macros provided are as follows: %% %% For generic particle names e.g. all positively charged leptons: %% \HepGenParticle{main}{subscript}{superscript} %% \HepGenAntiParticle{main}{subscript}{superscript} %% %% For concrete particle names: %% \HepParticle{main}{subscript}{superscript} %% \HepAntiParticle{main}{subscript}{superscript} %% %% For supersymmetric "sparticles": %% \HepSusyParticle{main}{subscript}{superscript} %% \HepGenSusyParticle{main}{subscript}{superscript} %% \HepSusyAntiParticle{main}{subscript}{superscript} %% \HepGenSusyAntiParticle{main}{subscript}{superscript} %% %% For resonance specifiers (just the extra terms): %% \HepResonanceMassTerm{mainTermInParenths}{subscript}{superscript} %% \HepResonanceSpecTerm{mainSpecTerm}{subscript}{superscript} %% %% For the total particle name and resonance specifications: the %% ``formal'' definitions include the spectroscopic term and the %% ``full'' versions pf each require the main particle name to be %% explicitly specified rather than just pass a \HepParticle as the first arg: %% \HepParticleResonance{name}{mass}{massSub}{massSup} %% \HepParticleResonanceFormal{name}{mass}{massSub}\ %% {massSup}{spec}{specSub}{specSup} %% \HepParticleResonanceFull{name}{sub}{sup}{mass}{massSub}{massSup} %% \HepParticleResonanceFormalFull{name}{sub}{sup}\ %% {mass}{massSub}{massSup}\ %% {spec}{specSub}{specSup} %% %% And finally, for containing processes describing the evolution %% of these particles: %% \HepProcess{iParticles \HepTo fParticles} %% where \HepTo is a normal \to arrow with a bit of extra space. %% Help on increasing horizontal math spacing in this environment %% would be welcome! %% %% There are probably some missing cases but they can be handled %% as explicit exceptions. You might also be interested in the %% ``heppennames'' package, which updates the "pennames" set of %% typeset concrete particle names to use this more flexible scheme. %% %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% Author: Andy Buckley %% ----------------------------------------------------------------------- %% Styling commands (exported) %% ----------------------------------------------------------------------- %% Undecorated particle style (boldness and sans-serif handling) \DeclareRobustCommand{\HepNormStyle}[1]{% \ifx\@maybeSansSerif\@emptyOption% {\ensuremath{\maybebm{#1}}}% %{\ensuremath{#1}}% lots of problems with the bold math nesting... cocks up in italic mode \else% {\ensuremath{\maybebm{\maybesf{#1}}}}% \fi% } %% Generic particle style (normal style with optional forced italics) \DeclareRobustCommand{\HepGenStyle}[1]{% \ifx\@forceItalic\@emptyOption% {\HepNormStyle{#1}}% \else% {\HepNormStyle{\mathit{#1}}}% \fi% } %% Concrete particle style (normal style with upright and forced italic handling) %% HepNormStyle can't be used in the first portion as it's important that sf be the %% innermost operator and that bm is the outermost so the rm must be sandwiched. %% The choice has been made to have forced-italics override the sf option, as you %% presumably have no sense of style if you use forced-it anyway :P \DeclareRobustCommand{\HepConStyle}[1]{% \ifx\@forceItalic\@emptyOption% \ifx\@maybeSansSerif\@emptyOption% {\ensuremath{\maybebm{\mayberm{#1}}}}% \else% {\ensuremath{\maybebm{\mayberm{\maybesf{#1}}}}}% \fi% \else% {\HepNormStyle{\maybeitrm{#1}}}% \fi% } %\setcounter{errorcontextlines}{10} %% ----------------------------------------------------------------------- %% Internal commands %% ----------------------------------------------------------------------- %% Spacer used for filling in superscripts to stabilise placement \DeclareRobustCommand{\@dummysuper}{{\vphantom{\ast}}} %\DeclareRobustCommand{\@dummysuper}{\ast} %% Internal command for typesetting conditionally-bold terms with optional %% following sub- and super-scripts. Used by most other commands \DeclareRobustCommand{\@HepMainSubSupTerm}[3]{% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ensuremath{% \ifx\myargtwo\@empty% \ifx\myargthree\@empty% {#1}% \else% {{#1}^{#3}}% \fi% \else% \ifx\myargthree\@empty% {{#1}_{#2}}% \else% {{#1}_{#2}^{#3}}% \fi% \fi% \mspace{-0.6mu}% I don't know why, but a 0.6mu space was arising compared to pure text names }% } \DeclareRobustCommand{\@HepGenericSubSupTerm}[3]{% {\def\myargtwo{#2}}% \ifx\myargtwo\@empty% {\HepGenStyle{\@HepMainSubSupTerm{#1}{}{#3}}}% \else% {\HepGenStyle{\@HepMainSubSupTerm{#1}{\mspace{-2mu}{#2}}{#3}}}% \fi% } \DeclareRobustCommand{\@HepConcreteSubSupTerm}[3]{% {\def\myargtwo{#2}}% \ifx\myargtwo\@empty% {\HepConStyle{\@HepMainSubSupTerm{#1}{}{#3}}}% \else% {\HepConStyle{\@HepMainSubSupTerm{#1}{\maybeitsubscript{#2}}{#3}}}% \fi% } %% Internal command for shifting sub- and super-scripts vertically to counter the effects of overlines etc. \DeclareRobustCommand{\@VerticalScriptShift}[2]{% {\raisebox{#1}{\HepNormStyle{\scriptstyle{#2}}}}% } %% Generic version of the above \DeclareRobustCommand{\@GenericVerticalScriptShift}[2]{% {\@VerticalScriptShift{#1}{\HepGenStyle{#2}}}% } %% Concrete version of the above \DeclareRobustCommand{\@ConcreteVerticalScriptShift}[2]{% {\@VerticalScriptShift{#1}{\HepConStyle{#2}}}% } %% ----------------------------------------------------------------------- %% Exported (public) commands %% ----------------------------------------------------------------------- %% Alias for the internal particle (main-sub-sup) structure \DeclareRobustCommand{\HepParticleStruct}[3]{\@HepMainSubSupTerm{#1}{#2}{#3}} %% For generic particles like "lepton", "quark" etc (no upright font) \DeclareRobustCommand{\HepGenParticle}[3]{% {\def\myargthree{#3}}% \ifx\myargthree\@empty% {\@HepGenericSubSupTerm{#1}{#2}{\@dummysuper}}% unmatched subscripts are very unstable \else% {\@HepGenericSubSupTerm{#1}{#2}{#3}}% \fi% } %% For concrete HEP particle names like "B", "J/psi" etc \DeclareRobustCommand{\HepParticle}[3]{% \ifx\@italicNames\@emptyOption% {\def\myargthree{#3}}% \ifx\myargthree\@empty% {\@HepConcreteSubSupTerm{#1}{#2}{\@dummysuper}}% unmatched subscripts are very unstable \else% {\@HepConcreteSubSupTerm{#1}{#2}{#3}}% \fi% \else% {\HepGenParticle{#1}{#2}{#3}}% \fi% } %% For generic antiparticles \DeclareRobustCommand{\HepGenAntiParticle}[3]{% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ifx\myargtwo\@empty% \HepGenParticle% {\overline{#1}}% {}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.6ex}{#3}}% \else% \ifx\myargthree\@empty% {\HepGenParticle% {\overline{#1}}% {\mspace{0mu}{#2}}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.55ex}{\@dummysuper}}}% \else% {\HepGenParticle% {\overline{#1}}% {\mspace{1mu}{#2}}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.55ex}{#3}}}% \fi% \fi% } %% For antiparticles \DeclareRobustCommand{\HepAntiParticle}[3]{% \ifx\@italicNames\@emptyOption% {\def\myargtwo{#2}}% {\def\myargthree{#2}}% \ifx\myargtwo\@empty% {\HepParticle% {\overline{#1}}% {}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-0.6ex}{#3}}}% \else% \ifx\myargthree\@empty% {\HepParticle% {\overline{#1}}% {\mspace{1mu}#2}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-0.55ex}{\@dummysuper}}}% \else% {\HepParticle% {\overline{#1}}% {\mspace{1mu}#2}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-0.55ex}{#3}}}% \fi% \fi% \else% {\HepGenAntiParticle{#1}{#2}{#3}}% \fi% } %% For generic SUSY particles e.g. slepton, squark \DeclareRobustCommand{\HepGenSusyParticle}[3]{% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ifx\myargtwo\@empty% {\HepGenParticle% {\widetilde{#1}}% {}% {\mspace{1mu}{#3}}}% \else% \ifx\myargthree\@empty% {\HepGenParticle% {\widetilde{#1}}% {\mspace{0mu}\@GenericVerticalScriptShift{0.0ex}{#2}}% {}}% \else% {\HepGenParticle% {\widetilde{#1}}% {\mspace{0mu}#2}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.02ex}{#3}}}% \fi% \fi% } %% For SUSY particles \DeclareRobustCommand{\HepSusyParticle}[3]{% \ifx\@italicNames\@emptyOption% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ifx\myargtwo\@empty% {\HepParticle% {\widetilde{#1}}% {}% {\mspace{1mu}{#3}}}% \else% \ifx\myargthree\@empty% {\HepParticle% {\widetilde{#1}}% {\mspace{1mu}{#2}}% {\mspace{1mu}{\@dummysuper}}}% \else% {\HepParticle% {\widetilde{#1}}% {\mspace{1mu}{#2}}% {\mspace{1mu}{#3}}}% \fi% \fi% \else% {\HepGenSusyParticle{#1}{#2}{#3}}% \fi% } %% For generic SUSY anti-particles e.g. slepton, squark \DeclareRobustCommand{\HepGenSusyAntiParticle}[3]{% {\HepGenParticle% {\overline{\widetilde{#1}}}% {\mspace{0mu}{#2}}% {\mspace{1mu}\@GenericVerticalScriptShift{-1.25ex}{#3}}}% } %% For SUSY anti-particles \DeclareRobustCommand{\HepSusyAntiParticle}[3]{% \ifx\@italicNames\@emptyOption% {\HepParticle% {\overline{\widetilde{#1}}}% {\mspace{0mu}{#2}}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-1.25ex}{#3}}}% \else% {\HepGenSusyAntiParticle{#1}{#2}{#3}}% \fi% } %% Resonances and other such structures. These are actually pretty %% complicated since the most general structure has a main particle %% term, a mass term and a spectroscopic term: in total 9 possible arguments %% if we let each main term have optional following sub- and super-scripts! %% The mass and spectroscopic terms seem to be mixed up quite often... *sigh* %% %% Apologies for the interface changing yet again as I learn how general %% these terms can be! Hopefully stable now (touch wood)... %% For resonance mass specifications like the bracket in "J/psi(1S)" \DeclareRobustCommand{\HepResonanceMassTerm}[3]{% \ifx\@italicNames\@emptyOption% \@HepConcreteSubSupTerm{\left({#1}\right)}{#2}{#3}% \else% \@HepGenericSubSupTerm{\left({#1}\right)}{#2}{#3}% \fi% } %% For resonance spectroscopic specifications like the P_11 in "N(1440)P_11" \DeclareRobustCommand{\HepResonanceSpecTerm}[3]{% \ifx\@italicNames\@emptyOption% \@HepConcreteSubSupTerm{#1}{#2}{#3}% \else% \@HepGenericSubSupTerm{#1}{#2}{#3}% \fi% } %% For resonances like "J/psi(1S)" (first arg is a whole \HepParticle) \DeclareRobustCommand{\HepParticleResonance}[4]{% \ensuremath{% {#1}{\HepResonanceMassTerm{#2}{#3}{#4}}% }% } %% For resonances like "N(1440)P_11" (first arg is a whole \HepParticle) \DeclareRobustCommand{\HepParticleResonanceFormal}[7]{% \ensuremath{% {\HepParticleResonance{#1}{#2}{#3}{#4}}\,{\HepResonanceSpecTerm{#5}{#6}{#7}}% }% } %% For resonances like "J/psi(1S)" (all arguments ``spelt out'') \DeclareRobustCommand{\HepParticleResonanceFull}[6]{% \HepParticleResonance{\HepParticle{#1}{#2}{#3}}{#4}{#5}{#6}% } %% For resonances like "N(1440)P_11" (all arguments ``spelt out'') \DeclareRobustCommand{\HepParticleResonanceFormalFull}[9]{% \HepParticleResonanceFormal{\HepParticle{#1}{#2}{#3}}{#4}{#5}{#6}{#7}{#8}{#9}% } %% For typesetting HEP processes with these particle names. %% Help on how to widen the math spacing would be nice: I always %% find myself putting \, between particle names to make it look good. \let\@HepOldto\to \DeclareRobustCommand{\HepTo}{\ensuremath{\to}}% \DeclareRobustCommand{\HepProcess}[1]{% \ifx\pdfoutput\@empty% \begingroup% \renewcommand{\to}{\mspace{2mu}\@HepOldto\mspace{2mu}}% %this defn makes PDFTeX do bad things \ensuremath{#1}% \renewcommand{\to}{\@HepOldto}% \endgroup% \else% \ensuremath{#1}% \fi% } %% For reference purposes :-) %\DeclareRobustCommand{\hepparticles}{\texttt{hepparticles}\xspace}