% alphabeta: Greek symbols in text and math
% *****************************************
%
% :Copyright: © 2010 Günter Milde
% :Licence:   This work may be distributed and/or modified under the
%             conditions of the `LaTeX Project Public License`_, either
%             version 1.3 of this license or any later version.
%
% :Abstract: Use ``\alpha, \beta, ...`` for Greek letters in text and math
%            mode.
%
% :Identification:
%  ::

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{alphabeta}
  [2020/10/13 2.0 macros for Greek letters in text and math]

% Changelog:
%   .. class:: borderless
%
%   ====== ========== =========================================================
%   0.1    2012-06-26 initial version
%   0.2    2013-05-03 new accent macro names with ``lgrxenc.def`` 0.7
%   0.3    2013-05-28 use ``lgrenc.def`` from greek-fontenc,
%   ..                enable Unicode input in math mode.
%   0.4    2013-09-11 move to greek-fontenc_, support XeTeX/LuaTeX.
%   0.13   2015-09-04 Support for `variant symbols`.
%   0.13.2 2016-02-05 Support for standard Unicode text font encoding "TU"
%                     (new in fontspec v2.5a).
%   0.14   2020/02/28 rename ``alphabeta-euenc.def`` to
%                     ``alphabeta-tuenc.def``.
%   1.0    2020/09/25 New package version. No changes in this file.
%   2.0    2020/10/13 Provide ``\Koppa``.
%   ====== ========== =========================================================
%
% .. contents:: 
%
% Motivation
% ==========
%
% By default, the ``\alpha, \beta, ...`` macros for Greek letters
% are only valid in mathematical mode.
%
% With this package, the math macros are redefined to work in both, text and
% math mode, so that Greek letters can be specified with the established
% command names in text, too.
%
% If used together with the ``utf8`` option of inputenc_, literal Unicode
% characters can be used for Greek symbols in mathematical formulas.
%
% .. Attention::
%    The macros work well in any font encoding for single symbols.
%    However, with 8-bit TeX, the automatic font-encoding switches behind the
%    doors interfere with kerning between letters and replacement of
%    accent+character with a pre-composed character.
%
%    Therefore, Greek text should be written with the help of Babel_ or
%    Polyglossia_ (setting the language to ``greek``) or wrapped in the
%    provided ``ensuregreek`` macro.  Using Babel_ or Polyglossia_ also helps
%    to ensure proper hyphenation.
%
%
% Usage
% =====
%
% .. code:: latex
%
%   \usepackage{alphabeta}
%
% The greek-inputenc_ package provides support for Unicode (utf-8) input
% of Greek characters with 8-bit TeX and the inputenc_ package:
%
% .. code:: latex
%
%   \usepackage[utf-8]{inputenc}
%   \usepackage{alphabeta}
%
% Conflicts
% ----------
%
% `alphabeta` does not work if the ``utf8x`` input encoding is selected.
% (``utf8x`` is an interface to the ``ucs`` package which uses a
% non-compatible definition of ``\DeclareUnicodeCharacter``.)
%
% For details see `<alphabeta-doc.tex>`_ and `<alphabeta-doc.pdf>`_.
%
%
% Implementation
% ==============
%
% Requirements
% ------------
%
% This package extends the `textalpha <textalpha.sty.html>`_ package.
% Package options are passed on to `textalpha`::

\RequirePackageWithOptions{textalpha}

% Just like `alphabeta`, `textalpha` is part of greek-fontenc_.
%
% This package requires the e-TeX_ extensions (i.e. a not too old TeX
% distribution) for the ``\ifdefined`` test.
%
% It uses the ``\TextOrMath`` test from the fixltx2e_ standard LaTeX package.
% ``fixltx2e`` is loaded by default since TeXLive 2015. In case of an
% ``\TextOrMath undefined`` error, load it in the document preamble via
%
% .. code:: latex
%
%   \usepackage{fixltx2e}
%
%
% Postpone the re-definitions
% ---------------------------
%
% To prevent other packages overwriting the re-defined commands we postpone
% the next steps until the start of the document body::

\AtBeginDocument{

% Save math macros
% ----------------
%
% Map the standard math commands to maths-specific names::

\let\mathGamma\Gamma
\let\mathDelta\Delta
\let\mathTheta\Theta
\let\mathLambda\Lambda
\let\mathXi\Xi
\let\mathPi\Pi
\let\mathSigma\Sigma
\let\mathUpsilon\Upsilon
\let\mathPhi\Phi
\let\mathPsi\Psi
\let\mathOmega\Omega
%
\let\mathalpha\alpha
\let\mathbeta\beta
\let\mathgamma\gamma
\let\mathdelta\delta
\let\mathepsilon\epsilon
\let\mathvarepsilon\varepsilon
\let\mathzeta\zeta
\let\matheta\eta
\let\maththeta\theta
\let\mathvartheta\vartheta
\let\mathiota\iota
\let\mathkappa\kappa
\let\mathlambda\lambda
\let\mathmu\mu
\let\mathnu\nu
\let\mathxi\xi
\let\mathpi\pi
\let\mathvarpi\varpi
\let\mathrho\rho
\let\mathvarrho\varrho
\let\mathsigma\sigma
\let\mathvarsigma\varsigma
\let\mathfinalsigma\varsigma
\let\mathtau\tau
\let\mathupsilon\upsilon
\let\mathphi\phi
\let\mathvarphi\varphi
\let\mathchi\chi
\let\mathpsi\psi
\let\mathomega\omega
% ``\digamma`` is defined by amsmath, provide a fallback
\providecommand*{\digamma}{\textit{\textdigamma}}
\let\mathdigamma\digamma

% \varkappa and \varbeta are defined by some math packages
\ifdefined\varbeta
  \let\mathvarbeta\varbeta
\fi
\ifdefined\varkappa % e.g. with newtxmath
  \let\mathvarkappa\varkappa
\fi

% Commands to access Greek letters by name
% ----------------------------------------
%
% For letters defined in math mode, the commands work in both, text and math.
%
% Some Greek letters look identical to Latin letters and can therefore not be
% used as variable symbols in math formulas. These letters are not defined in
% TeX's math mode, we provide an alias to the corrsponding ``\text...``
% command.
%
% Mathematical notation distinguishes `variant shape symbols`_ for pi, phi,
% rho, theta (small and capital), beta, and kappa (characters for the latter
% three symbols are not included in TeX’s math fonts). These variations have
% no syntactic meaning in Greek text and are not given code-points in the LGR
% encoding while Unicode defines separate code points for the symbol variants.
%
% Greek Alphabet:
%
% Macros keep their meaning in mathematical mode (i.e. use the same shape as
% without this package) and refer to GREEK LETTER ... in text. For
% ``\epsilon`` and ``phi``, this means that the selected symbol variant
% differs in text vs. math mode. Use ``\varepsilon`` and ``\varphi`` (see
% section `variant shape symbols`_ below) to select the GREEK LETTER ...”
% in both, text and math mode.
% ::

\providecommand*{\Alpha}{\textAlpha}
\providecommand*{\Beta}{\textBeta}
\renewcommand*{\Gamma}{\TextOrMath{\textGamma}{\mathGamma}}
\renewcommand*{\Delta}{\TextOrMath{\textDelta}{\mathDelta}}
\providecommand*{\Epsilon}{\textEpsilon}
\providecommand*{\Zeta}{\textZeta}
\providecommand*{\Eta}{\textEta}
\renewcommand*{\Theta}{\TextOrMath{\textTheta}{\mathTheta}}
\providecommand*{\Iota}{\textIota}
\providecommand*{\Kappa}{\textKappa}
\renewcommand*{\Lambda}{\TextOrMath{\textLambda}{\mathLambda}}
\providecommand*{\Mu}{\textMu}
\providecommand*{\Nu}{\textNu}
\renewcommand*{\Xi}{\TextOrMath{\textXi}{\mathXi}}
\providecommand*{\Omicron}{\textOmicron}
\renewcommand*{\Pi}{\TextOrMath{\textPi}{\mathPi}}
\providecommand*{\Rho}{\textRho}
\renewcommand*{\Sigma}{\TextOrMath{\textSigma}{\mathSigma}}
\providecommand*{\Tau}{\textTau}
\renewcommand*{\Upsilon}{\TextOrMath{\textUpsilon}{\mathUpsilon}}
\renewcommand*{\Phi}{\TextOrMath{\textPhi}{\mathPhi}}
\providecommand*{\Chi}{\textChi}
\renewcommand*{\Psi}{\TextOrMath{\textPsi}{\mathPsi}}
\renewcommand*{\Omega}{\TextOrMath{\textOmega}{\mathOmega}}
%
\renewcommand*{\alpha}{\TextOrMath{\textalpha}{\mathalpha}}
\renewcommand*{\beta}{\TextOrMath{\textbeta}{\mathbeta}}
\renewcommand*{\gamma}{\TextOrMath{\textgamma}{\mathgamma}}
\renewcommand*{\delta}{\TextOrMath{\textdelta}{\mathdelta}}
\renewcommand*{\epsilon}{\TextOrMath{\textepsilon}{\mathepsilon}} % ε/ϵ
\renewcommand*{\zeta}{\TextOrMath{\textzeta}{\mathzeta}}
\renewcommand*{\eta}{\TextOrMath{\texteta}{\matheta}}
\renewcommand*{\theta}{\TextOrMath{\texttheta}{\maththeta}}
\renewcommand*{\iota}{\TextOrMath{\textiota}{\mathiota}}
\renewcommand*{\kappa}{\TextOrMath{\textkappa}{\mathkappa}}
\renewcommand*{\lambda}{\TextOrMath{\textlambda}{\mathlambda}}
\renewcommand*{\mu}{\TextOrMath{\textmu}{\mathmu}}
\renewcommand*{\nu}{\TextOrMath{\textnu}{\mathnu}}
\renewcommand*{\xi}{\TextOrMath{\textxi}{\mathxi}}
\providecommand*{\omicron}{\textomicron}
\renewcommand*{\pi}{\TextOrMath{\textpi}{\mathpi}}
\renewcommand*{\rho}{\TextOrMath{\textrho}{\mathrho}}
\renewcommand*{\sigma}{\TextOrMath{\textsigma}{\mathsigma}}
\renewcommand*{\varsigma}{\TextOrMath{\textvarsigma}{\mathvarsigma}}
\providecommand*{\finalsigma}{\varsigma}
\renewcommand*{\tau}{\TextOrMath{\texttau}{\mathtau}}
\renewcommand*{\upsilon}{\TextOrMath{\textupsilon}{\mathupsilon}}
\renewcommand*{\phi}{\TextOrMath{\textphi}{\mathphi}}             % ϕ/φ
\renewcommand*{\chi}{\TextOrMath{\textchi}{\mathchi}}
\renewcommand*{\psi}{\TextOrMath{\textpsi}{\mathpsi}}
\renewcommand*{\omega}{\TextOrMath{\textomega}{\mathomega}}


% Archaic letters
% '''''''''''''''
%
% ::

\renewcommand*{\digamma}{\TextOrMath{\textdigamma}{\mathdigamma}} % ϝ
\providecommand*{\Digamma}{\textDigamma}     % Ϝ
\providecommand*{\stigma}{\textstigma}       % ϛ
\providecommand*{\varstigma}{\textvarstigma} % stigma variant (CB.enc, teubner)
\providecommand*{\koppa}{\textkoppa}         % ϟ (greek small letter koppa)
\providecommand*{\Koppa}{\textKoppa}         % Ϟ (greek letter koppa)
\providecommand*{\qoppa}{\textqoppa}         % ϙ (archaic koppa)
\providecommand*{\Qoppa}{\textQoppa}         % Ϙ (archaic Koppa)
\providecommand*{\Stigma}{\textStigma}       % Ϛ (in some fonts ϹΤ ligature)
\providecommand*{\Sampi}{\textSampi}         % Ϡ
\providecommand*{\sampi}{\textsampi}         % ϡ

% Variant shape symbols
% '''''''''''''''''''''
%
% TeX’s concept of “standard” vs. “variant” math symbols does not map to the
% distinction between GREEK LETTER ... vs. GREEK ... SYMBOL in the Unicode
% standard (see `<test-tuenc-greek.pdf>`_).
%
% The ``\...symbol``  macros select the GREEK ... SYMBOL in both, text and
% math mode. For ``\epsilonsymbol`` and ``\phisymbol`` this is the default
% shape in math mode. The ``\var...`` macros select the shape used by TeX
% math (or, if not supported, the SYMBOL shape)::

% ..symbol == var..
\renewcommand*{\varpi}{\TextOrMath{\textpisymbol}{\mathvarpi}}          % ϖ
\providecommand*{\pisymbol}{\varpi}                                     % ϖ
\renewcommand*{\varrho}{\TextOrMath{\textrhosymbol}{\mathvarrho}}       % ϱ
\providecommand*{\rhosymbol}{\TextOrMath{\textrhosymbol}{\mathvarrho}}  % ϱ
\renewcommand*{\vartheta}{\TextOrMath{\textthetasymbol}{\mathvartheta}} % ϑ
\providecommand*{\thetasymbol}{\vartheta}                               % ϑ
% ..symbol != var..
\renewcommand*{\varepsilon}{\TextOrMath{\textepsilon}{\mathvarepsilon}} % ε
\providecommand*{\epsilonsymbol}{\TextOrMath{\textepsilonsymbol}{\mathepsilon}} % ϵ
\renewcommand*{\varphi}{\TextOrMath{\textphi}{\mathvarphi}}             % φ
\providecommand*{\phisymbol}{\TextOrMath{\textphisymbol}{\mathphi}}     % ϕ
% only text (in standard 8-bit TeX, may be defined with additional packages):
\ifdefined\mathvarbeta
  \renewcommand*{\varbeta}{\TextOrMath{\textbetasymbol}{\mathvarbeta}}  % ϐ
\else
  \providecommand*{\varbeta}{\textbetasymbol}
\fi
\providecommand*{\betasymbol}{\varbeta}
\ifdefined\mathvarkappa                                                 % ϰ
  \renewcommand*{\varkappa}{\TextOrMath{\textkappasymbol}{\mathvarkappa}}
\else
  \providecommand*{\varkappa}{\textkappasymbol}
\fi
\providecommand*{\kappasymbol}{\varkappa}
% \Theta/\varTheta are not a symbol variants but upright/italic shape of Theta
\providecommand*{\Thetasymbol}{\textThetasymbol}                        % ϴ


% TextCompositeCommands for the generic macros
% --------------------------------------------
%
% The NFSS TextComposite mechanism looks for the next token without expanding
% it. In order to let compositions like ``\ensuregreek{\'\Alpha}`` or
% ``\ensuregreek{\>"\alpha}`` work as expected we define TextComposites with the
% `letter name commands`. (Composition only works if the active font encoding
% is LGR). ::

\@ifl@aded{def}{tuenc-greek}{
  \input{alphabeta-tuenc.def}
}{}
\@ifl@aded{def}{lgrenc}{
  \input{alphabeta-lgr.def}
}{}

% Re-definition for Greek Unicode input in math mode
% --------------------------------------------------
%
% Check with ``\ifdefined`` for the definition of
% ``\DeclareUnicodeCharacter``. In contrast to ``\@ifdefined``, this works
% without side-effects. It makes the package dependent on the `e-TeX`_
% extensions but these are standard in all current TeX distributions anyway.
%
% Map Greek characters that are also defined in math mode to the generic
% macros::

\ifdefined\DeclareUnicodeCharacter
  \DeclareUnicodeCharacter{0393}{\Gamma}         % Γ
  \DeclareUnicodeCharacter{0394}{\Delta}         % Δ
  \DeclareUnicodeCharacter{0398}{\Theta}         % Θ
  \DeclareUnicodeCharacter{039B}{\Lambda}        % Λ
  \DeclareUnicodeCharacter{039E}{\Xi}            % Ξ
  \DeclareUnicodeCharacter{03A0}{\Pi}            % Π
  \DeclareUnicodeCharacter{03A3}{\Sigma}         % Σ
  \DeclareUnicodeCharacter{03A5}{\Upsilon}       % Υ
  \DeclareUnicodeCharacter{03A6}{\Phi}           % Φ
  \DeclareUnicodeCharacter{03A8}{\Psi}           % Ψ
  \DeclareUnicodeCharacter{03A9}{\Omega}         % Ω

  \DeclareUnicodeCharacter{03B1}{\alpha}         % α
  \DeclareUnicodeCharacter{03B2}{\beta}          % β
  \DeclareUnicodeCharacter{03B3}{\gamma}         % γ
  \DeclareUnicodeCharacter{03B4}{\delta}         % δ
  \DeclareUnicodeCharacter{03B5}{\varepsilon}    % ε textepsilon/varepsilon
  \DeclareUnicodeCharacter{03B6}{\zeta}          % ζ
  \DeclareUnicodeCharacter{03B7}{\eta}           % η
  \DeclareUnicodeCharacter{03B8}{\theta}         % θ
  \DeclareUnicodeCharacter{03B9}{\iota}          % ι
  \DeclareUnicodeCharacter{03BA}{\kappa}         % κ
  \DeclareUnicodeCharacter{03BB}{\lambda}        % λ
  \DeclareUnicodeCharacter{03BC}{\mu}            % μ
  \DeclareUnicodeCharacter{03BD}{\nu}            % ν
  \DeclareUnicodeCharacter{03BE}{\xi}            % ξ
  \DeclareUnicodeCharacter{03C0}{\pi}            % π
  \DeclareUnicodeCharacter{03C1}{\rho}           % ρ
  \DeclareUnicodeCharacter{03C2}{\varsigma}      % ς
  \DeclareUnicodeCharacter{03C3}{\sigma}         % σ
  \DeclareUnicodeCharacter{03C4}{\tau}           % τ
  \DeclareUnicodeCharacter{03C5}{\upsilon}       % υ
  \DeclareUnicodeCharacter{03C6}{\varphi}        % φ textphi/varphi
  \DeclareUnicodeCharacter{03C7}{\chi}           % χ
  \DeclareUnicodeCharacter{03C8}{\psi}           % ψ
  \DeclareUnicodeCharacter{03C9}{\omega}         % ω

  \DeclareUnicodeCharacter{03D1}{\thetasymbol}   % ϑ
  \DeclareUnicodeCharacter{03D5}{\phisymbol}     % ϕ $\phi$
  \DeclareUnicodeCharacter{03D6}{\pisymbol}      % ϖ
  \DeclareUnicodeCharacter{03DD}{\digamma}       % ϝ
  \DeclareUnicodeCharacter{03F1}{\rhosymbol}     % ϱ
  \DeclareUnicodeCharacter{03F5}{\epsilonsymbol} % ϵ $\epsilon$

\fi

% ::

} % close the \AtBeginDocument macro

% .. References
%    ----------
% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
% .. _CB Fonts: http://ctan.org/pkg/cbgreek-complete
% .. _Babel: http://ctan.org/pkg/babel
% .. _e-TeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=etex
% .. _greek-fontenc: http://ctan.org/pkg/greek-fontenc
% .. _greek-inputenc: http://ctan.org/pkg/greek-inputenc
% .. _inputenc: http://ctan.org/pkg/inputenc
% .. _fixltx2e: http://ctan.org/pkg/fixltx2e
% .. _Polyglossia: http://ctan.org/pkg/polyglossia
