diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hepparticles/hepparticles.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/hepparticles/hepparticles.sty')
-rw-r--r-- | macros/latex/contrib/hepparticles/hepparticles.sty | 504 |
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 }% + }% +}{} |