summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/hepparticles/hepparticles.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/hepparticles/hepparticles.sty')
-rw-r--r--macros/latex/contrib/hepparticles/hepparticles.sty504
1 files changed, 504 insertions, 0 deletions
diff --git a/macros/latex/contrib/hepparticles/hepparticles.sty b/macros/latex/contrib/hepparticles/hepparticles.sty
new file mode 100644
index 0000000000..67a8f7b3c6
--- /dev/null
+++ b/macros/latex/contrib/hepparticles/hepparticles.sty
@@ -0,0 +1,504 @@
+%% hepparticles --- flexible elementary particle symbols
+%% Author: Andy Buckley <andy@insectnation.org>
+%%
+%% 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.
+%%
+%%
+%% The macros provided are:
+%%
+%% 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 \to fParticles}
+%% where \to is re-defined to have a bit of extra space.
+%%
+%% There are probably some missing cases but they can be handled
+%% as explicit exceptions. You might also be interested in the
+%% ``hepnames'' package, which updates the "pennames" set of
+%% typeset concrete particle names to use this more flexible scheme.
+
+%% TODO:
+%%
+%% * Make the bold math only occur within particle macros
+%%
+%% * Distinction between italic main symbol and italic main+scripts
+%%
+%% * Optionally include Greek letters (lower and upper) in upright/italic
+%% forcing (and sans/bold context sensitivity)
+%%
+%% * Use maybemath again? (A new version, using NFSS properly)
+
+%% Admin
+\def\fileversion{2.0}
+\def\filedate{2014/12/01}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hepparticles}[\filedate\space HEP particle typesetting (v\fileversion)]
+
+% \RequirePackage{xspace}
+% \RequirePackage{etoolbox}
+
+%% Package options
+\def\@italicNames{}%
+
+%% Use italic particle symbols
+\DeclareOption{italic}{%
+ \def\@italicNames{yes}%
+}
+% %% Force particle symbols to behave as for italic math mode
+% % TODO: clarify... means that text super/sub scripts are italic not rm?
+% \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{}%
+% }
+
+% TODO: Add options to force upright Greek lower-case / italic Greek upper-case?
+
+\ProcessOptions
+
+%% Force all sub/superscripts to the same height
+\RequirePackage{subdepth}
+\RequirePackage{amsmath}
+
+%% Automatically bolden math mode symbols in a bold text context
+% TODO: only apply to particles? Redefine \bfseries inside hepparticles macros and restore at end? Or is there a simpler scoping?
+\g@addto@macro\bfseries{\boldmath}
+
+\DeclareMathAlphabet{\mathup}{OT1}{\familydefault}{m}{n}
+\SetMathAlphabet{\mathup}{bold}{\encodingdefault}{\familydefault}{bx}{n}
+
+\DeclareMathAlphabet{\mathsfup}{OT1}{\sfdefault}{m}{n}
+\SetMathAlphabet{\mathsfup}{bold}{\encodingdefault}{\sfdefault}{bx}{n}
+
+\DeclareMathAlphabet{\mathsfit}{\encodingdefault}{\sfdefault}{m}{sl}
+\SetMathAlphabet{\mathsfit}{bold}{\encodingdefault}{\sfdefault}{bx}{sl}
+
+% \DeclareMathAlphabet{\mathbfsfit}{\encodingdefault}{\sfdefault}{bx}{sl} % why doesn't this work (no italic)?
+% \DeclareMathAlphabet{\mathbfsf} {\encodingdefault}{\sfdefault}{bx}{sl}
+
+% TODO: Use fixmath to force italic/upright upper/lower Greek characters -- only in particles
+
+
+%% -----------------------------------------------------------------------
+%% Styling commands
+%% -----------------------------------------------------------------------
+
+%% Generic particle style (normal style with optional forced italics)
+\DeclareRobustCommand{\@HepGenStyle}[1]{%
+ \ensuremath{%
+ \edef\@itcode{\itdefault}%
+ \edef\@slcode{\sldefault}%
+ \edef\@sfcode{\sfdefault}%
+ \edef\@upcode{\updefault}%
+ \edef\@bfcode{\bfdefault}%
+ %
+ \ifx\f@family\@sfcode%
+ % \ifx\f@shape\@itcode%
+ % \ifx\f@series\@bfcode\bm{\mathsfit{#1}}\else\mathsfit{#1}\fi%
+ % \fi%
+ % \ifx\f@shape\@slcode%
+ % \mathsfit{#1}%
+ % \fi%
+ % \ifx\f@shape\@upcode%
+ % \mathsfup{#1}%
+ % \fi%
+%
+ % \ifx\f@series\@bfcode\mathbfsf{#1}\else\mathsfit{#1}\fi%
+%
+ \mathsfit{#1}%
+ \else%
+ % \ifx\f@shape\@itcode%
+ % \mathit{#1}%
+ % \fi%
+ % \ifx\f@shape\@slcode%
+ % \mathit{#1}%
+ % \fi%
+ % \ifx\f@shape\@upcode%
+ % {#1}%
+ % \fi%
+%
+ % \ifx\f@series\@bfcode\bm{\mathit{#1}}\else\mathit{#1}\fi%
+%
+ \mathit{#1}%
+ \fi%
+ }%
+}
+
+
+%% Concrete particle style (normal style with upright and forced italic handling)
+\DeclareRobustCommand{\@HepConStyle}[1]{%
+ \ensuremath{%
+ \edef\@itcode{\itdefault}%
+ \edef\@slcode{\sldefault}%
+ \edef\@sfcode{\sfdefault}%
+ \edef\@upcode{\updefault}%
+ %
+ \ifx\f@family\@sfcode%
+ \ifx\f@shape\@itcode%
+ \mathsfit{#1}%
+ \fi%
+ \ifx\f@shape\@slcode%
+ \mathsfit{#1}%
+ \fi%
+ \ifx\f@shape\@upcode%
+ \mathsfup{#1}% <--- difference from gen style
+ \fi%
+ \else%
+ \ifx\f@shape\@itcode%
+ \mathit{#1}%
+ \fi%
+ \ifx\f@shape\@slcode%
+ \mathit{#1}%
+ \fi%
+ \ifx\f@shape\@upcode%
+ \mathup{#1}% <--- difference from gen style
+ \fi%
+ \fi%
+ }%
+}
+
+
+%% -----------------------------------------------------------------------
+%% Conditional horizontal shifting and kerning for sub/superscripts
+%% -----------------------------------------------------------------------
+
+\DeclareRobustCommand{\@itmkern}[1]{%
+ \ensuremath{%
+ \edef\@itcode{\itdefault}%
+ \edef\@slcode{\sldefault}%
+ %
+ \ifx\f@shape\@itcode%
+ \mkern#1%
+ \fi%
+ \ifx\f@shape\@slcode%
+ \mkern#1%
+ \fi%
+ }%
+}
+
+\DeclareRobustCommand{\@itsfshift}[2]{%
+ \ensuremath{%
+ \edef\@itcode{\itdefault}%
+ \edef\@slcode{\sldefault}%
+ \edef\@sfcode{\sfdefault}%
+ \edef\@upcode{\updefault}%
+ \edef\@bfcode{\bfdefault}%
+ %
+ \ifx\f@family\@sfcode%
+ \ifx\f@shape\@itcode%
+ \mspace{#2}
+ \fi%
+ \ifx\f@shape\@slcode%
+ \mspace{#2}%
+ \fi%
+ \ifx\f@shape\@upcode%
+ \relax%
+ \fi%
+ \else%
+ \ifx\f@shape\@itcode%
+ \mspace{#1}
+ \fi%
+ \ifx\f@shape\@slcode%
+ \mspace{#1}
+ \fi%
+ \ifx\f@shape\@upcode%
+ \relax%
+ \fi%
+ \fi%
+ }%
+}
+
+\DeclareRobustCommand{\@sfshift}[2]{%
+ \ensuremath{%
+ \edef\@sfcode{\sfdefault}%
+ %
+ \ifx\f@family\@sfcode%
+ \mspace{#2}
+ \else%
+ \mspace{#1}
+ \fi%
+ }%
+}
+
+
+%% -----------------------------------------------------------------------
+%% Public commands for particle typesetting
+%% -----------------------------------------------------------------------
+
+%% For generic particles like "lepton", "quark" etc (no upright font)
+\def\@shiftlen@norm@gen@rmsub{-3mu}
+\def\@shiftlen@norm@gen@sfsub{-2mu}
+\def\@shiftlen@norm@gen@rmsup{-1mu}
+\def\@shiftlen@norm@gen@sfsup{0mu}
+%
+\DeclareRobustCommand{\HepGenParticle}[3]{%
+ \@HepGenStyle{{#1}{}%
+ _{\@sfshift{\@shiftlen@norm@gen@rmsub}{\@shiftlen@norm@gen@sfsub}\scriptstyle{#2}}%
+ ^{\@sfshift{\@shiftlen@norm@gen@rmsup}{\@shiftlen@norm@gen@sfsup}\scriptstyle{#3}}}%
+}
+
+%% For generic antiparticles
+\def\@shiftlen@anti@gen@bar{4mu}
+\def\@shiftlen@anti@gen@rmsub{-2mu}
+\def\@shiftlen@anti@gen@sfsub{-1mu}
+\def\@shiftlen@anti@gen@rmsup{0mu}
+\def\@shiftlen@anti@gen@sfsup{1mu}
+%
+\DeclareRobustCommand{\HepGenAntiParticle}[3]{%
+ \@HepGenStyle{{\mkern\@shiftlen@anti@gen@bar\overline{\mkern-\@shiftlen@anti@gen@bar{#1}}}{}%
+ _{\@sfshift{\@shiftlen@anti@gen@rmsub}{\@shiftlen@anti@gen@sfsub}\scriptstyle{#2}}%
+ ^{\@sfshift{\@shiftlen@anti@gen@rmsup}{\@shiftlen@anti@gen@sfsup}\scriptstyle{#3}}}%
+}
+
+%% For generic SUSY particles e.g. slepton, squark
+% cm/lmodern
+\def\@shiftlen@susy@gen@til{2mu}
+\def\@shiftlen@susy@gen@rmsub{-2.5mu}
+\def\@shiftlen@susy@gen@sfsub{-2mu}
+\def\@shiftlen@susy@gen@rmsup{-0.5mu}
+\def\@shiftlen@susy@gen@sfsup{0mu}
+% mathpazo
+% \def\@shiftlen@susy@gen@til{2mu}
+% \def\@shiftlen@susy@gen@rmsub{-1.5mu}
+% \def\@shiftlen@susy@gen@sfsub{-2mu}
+% \def\@shiftlen@susy@gen@rmsup{0.5mu}
+% \def\@shiftlen@susy@gen@sfsup{0mu}
+%
+\DeclareRobustCommand{\HepGenSusyParticle}[3]{%
+ \@HepGenStyle{{\mkern\@shiftlen@susy@gen@til\widetilde{\mkern-\@shiftlen@susy@gen@til{#1}}}{}%
+ _{\@sfshift{\@shiftlen@susy@gen@rmsub}{\@shiftlen@susy@gen@sfsub}\scriptstyle{#2}}%
+ ^{\@sfshift{\@shiftlen@susy@gen@rmsup}{\@shiftlen@susy@gen@sfsup}\scriptstyle{#3}}}%
+}
+
+%% For generic SUSY anti-particles e.g. slepton, squark
+% cm/lmodern
+\def\@shiftlen@antisusy@gen@bar{3.5mu}
+\def\@shiftlen@antisusy@gen@til{2mu}
+\def\@shiftlen@antisusy@gen@rmsub{-4mu}
+\def\@shiftlen@antisusy@gen@sfsub{-3mu}
+\def\@shiftlen@antisusy@gen@rmsup{-2mu}
+\def\@shiftlen@antisusy@gen@sfsup{0mu}
+% mathpazo
+% \def\@shiftlen@antisusy@gen@bar{3.5mu}
+% \def\@shiftlen@antisusy@gen@til{2mu}
+% \def\@shiftlen@antisusy@gen@rmsub{-2mu}
+% \def\@shiftlen@antisusy@gen@sfsub{-3mu}
+% \def\@shiftlen@antisusy@gen@rmsup{0.7mu}
+% \def\@shiftlen@antisusy@gen@sfsup{0mu}
+%
+\DeclareRobustCommand{\HepGenSusyAntiParticle}[3]{%
+ %\@HepGenStyle{{\mkern3.5mu\overline{\mkern-1.5mu\widetilde{\mkern-2mu{#1}}}}{}%
+ \@HepGenStyle{{\mkern\@shiftlen@antisusy@gen@bar\overline{\mkern-\@shiftlen@antisusy@gen@bar\mkern\@shiftlen@antisusy@gen@til\widetilde{\mkern-\@shiftlen@antisusy@gen@til{#1}}}}{}%
+ _{\@sfshift{\@shiftlen@antisusy@gen@rmsub}{\@shiftlen@antisusy@gen@sfsub}\scriptstyle{#2}}%
+ ^{\@sfshift{\@shiftlen@antisusy@gen@rmsup}{\@shiftlen@antisusy@gen@sfsup}\scriptstyle{#3}}}%
+}
+
+
+
+%% For concrete HEP particle names like "B", "J/psi" etc
+% cm/lmodern
+\def\@shiftlen@norm@con@rmsub{-2mu}
+\def\@shiftlen@norm@con@sfsub{-1.5mu}
+\def\@shiftlen@norm@con@rmsup{0mu}
+\def\@shiftlen@norm@con@sfsup{0mu}
+% mathpazo
+% \def\@shiftlen@norm@con@rmsub{-3mu}
+% \def\@shiftlen@norm@con@sfsub{-2mu}
+% \def\@shiftlen@norm@con@rmsup{-1mu}
+% \def\@shiftlen@norm@con@sfsup{0mu}
+%
+\DeclareRobustCommand{\HepParticle}[3]{%
+ \ifx\@italicNames\@empty%
+ \@HepConStyle{{{#1}}{}%
+ _{\@itsfshift{\@shiftlen@norm@con@rmsub}{\@shiftlen@norm@con@sfsub}\scriptstyle{#2}}%
+ ^{\@itsfshift{\@shiftlen@norm@con@rmsup}{\@shiftlen@norm@con@sfsup}\scriptstyle{#3}}}%
+ \else%
+ \HepGenParticle{#1}{#2}{#3}%
+ \fi%
+}
+
+%% For concrete antiparticles
+\def\@shiftlen@anti@con@bar{3.5mu}
+\def\@shiftlen@anti@con@rmsub{-3mu}
+\def\@shiftlen@anti@con@sfsub{-3mu}
+\def\@shiftlen@anti@con@rmsup{1mu}
+\def\@shiftlen@anti@con@sfsup{1mu}
+%
+\DeclareRobustCommand{\HepAntiParticle}[3]{%
+ \ifx\@italicNames\@empty%
+ \@HepConStyle{{\@itmkern{\@shiftlen@anti@con@bar}\overline{\@itmkern{-\@shiftlen@anti@con@bar}{#1}}}{}%
+ _{\@itsfshift{\@shiftlen@anti@con@rmsub}{\@shiftlen@anti@con@sfsub}\scriptstyle{#2}}%
+ ^{\@itsfshift{\@shiftlen@anti@con@rmsup}{\@shiftlen@anti@con@sfsup}\scriptstyle{#3}}}%
+ \else%
+ \HepGenAntiParticle{#1}{#2}{#3}%
+ \fi%
+}
+
+%% For SUSY particles
+% cm/lmodern
+\def\@shiftlen@susy@con@til{2mu}
+\def\@shiftlen@susy@con@rmsub{-3mu}
+\def\@shiftlen@susy@con@sfsub{-3mu}
+\def\@shiftlen@susy@con@rmsup{0mu}
+\def\@shiftlen@susy@con@sfsup{0mu}
+% mathpazo
+% \def\@shiftlen@susy@con@til{2mu}
+% \def\@shiftlen@susy@con@rmsub{-1mu}
+% \def\@shiftlen@susy@con@sfsub{-2mu}
+% \def\@shiftlen@susy@con@rmsup{1mu}
+% \def\@shiftlen@susy@con@sfsup{0.5mu}
+%
+\DeclareRobustCommand{\HepSusyParticle}[3]{%
+ \ifx\@italicNames\@empty%
+ \@HepConStyle{{\@itmkern{\@shiftlen@susy@con@til}\widetilde{\@itmkern{-\@shiftlen@susy@con@til}{#1}}}{}%
+ _{\@itsfshift{\@shiftlen@susy@con@rmsub}{\@shiftlen@susy@con@sfsub}\scriptstyle{#2}}%
+ ^{\@itsfshift{\@shiftlen@susy@con@rmsup}{\@shiftlen@susy@con@sfsup}\scriptstyle{#3}}}%
+ \else%
+ \HepGenSusyParticle{#1}{#2}{#3}%
+ \fi%
+}
+
+%% For SUSY anti-particles
+% cm/lmodern
+\def\@shiftlen@antisusy@con@bar{3.5mu}
+\def\@shiftlen@antisusy@con@til{2mu}
+\def\@shiftlen@antisusy@con@rmsub{-2.5mu}
+\def\@shiftlen@antisusy@con@sfsub{-2mu}
+\def\@shiftlen@antisusy@con@rmsup{0mu}
+\def\@shiftlen@antisusy@con@sfsup{0mu}
+% mathpazo
+% \def\@shiftlen@antisusy@con@bar{3.5mu}
+% \def\@shiftlen@antisusy@con@til{2mu}
+% \def\@shiftlen@antisusy@con@rmsub{-2.5mu}
+% \def\@shiftlen@antisusy@con@sfsub{-3mu}
+% \def\@shiftlen@antisusy@con@rmsup{0mu}
+% \def\@shiftlen@antisusy@con@sfsup{0mu}
+%
+\DeclareRobustCommand{\HepSusyAntiParticle}[3]{%
+ \ifx\@italicNames\@empty%
+ \@HepConStyle{{\@itmkern{\@shiftlen@antisusy@con@bar}\overline{\@itmkern{-\@shiftlen@antisusy@con@bar}%
+ \@itmkern{\@shiftlen@antisusy@con@til}\widetilde{\@itmkern{-\@shiftlen@antisusy@con@til}{#1}}}}{}%
+ _{\@itsfshift{\@shiftlen@antisusy@con@rmsub}{\@shiftlen@antisusy@con@sfsub}\scriptstyle{#2}}%
+ ^{\@itsfshift{\@shiftlen@antisusy@con@rmsup}{\@shiftlen@antisusy@con@sfsup}\scriptstyle{#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\@empty%
+ \@HepConStyle{{\left({#1}\right)}{}_{#2}^{\scriptstyle{#3}}}%
+ \else%
+ \@HepGenStyle{{\left({#1}\right)}{}_{#2}^{\scriptstyle{#3}}}%
+ \fi%
+}
+
+%% For resonance spectroscopic specifications like the P_11 in "N(1440)P_11"
+\DeclareRobustCommand{\HepResonanceSpecTerm}[3]{%
+ \ifx\@italicNames\@empty%
+ \@HepConStyle{{#1}{}_{#2}^{#3}}%
+ \else%
+ \@HepGenStyle{{#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 ``spelled out'')
+\DeclareRobustCommand{\HepParticleResonanceFull}[6]{%
+ \HepParticleResonance{\HepParticle{#1}{#2}{#3}}{#4}{#5}{#6}%
+}
+
+%% For resonances like "N(1440)P_11" (all arguments ``spelled out'')
+\DeclareRobustCommand{\HepParticleResonanceFormalFull}[9]{%
+ \HepParticleResonanceFormal{\HepParticle{#1}{#2}{#3}}{#4}{#5}{#6}{#7}{#8}{#9}%
+}
+
+
+%% For typesetting HEP processes with these particle names.
+%% TODO: 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{\HepProcess}[1]{%
+ \begingroup%
+ \renewcommand{\to}{\mspace{1mu}\@HepOldto\mspace{1mu}}%
+ \ensuremath{#1}%
+ \renewcommand{\to}{\@HepOldto}%
+ \endgroup%
+}
+
+
+%% Typesetting tweaks (-> becomes "to", remove mspace) from hyperref labels in PDFTeX
+%% Thanks to Heiko Oberdiek and Donald Arseneau for assistance via comp.text.tex
+\@ifpackageloaded{hyperref}{
+ \pdfstringdefDisableCommands{%
+ \DeclareRobustCommand{\HepProcess}[1]{#1}
+ \let\mspace\@gobble
+ \def\to{to }%
+ }%
+}{}