greek-fontenc.def

Common Greek font encoding definitions

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.

Identification
\ProvidesFile{greek-fontenc.def}
[2020/10/30 2.0 Common Greek font encoding definitions]

Abstract

This file provides definitions that are shared between font encodings providing Greek characters.

Changelog:

0.9

2013-07-03

code “outsourced” from lgrxenc.def

0.9.1

2013-07-17

composite definitions starting with standard accent cmds

0.11

2013-11-28

\greekscript TextCommand

0.12

2014-12-12

Remove symbol macros for breathing accents.

0.13

2015-08-04

No @uclclist entry for ypogegrammeni/prosgegrammeni.

0.13.4

2019-07-10

@uclclist entry for \prosgegrammeni.

1.0

2020-09-25

\textKoppagreek and \textstigmagreek aliases.

2.0

2020/10/30

Alias definitions matching mathematical variant symbols.

Usage

This file is input by the font encoding definition files lgrenc.def. and tuenc-greek.def.

Implementation

ensuregreek, greekscript

Provide “empty” encoding-specific definitions for \ensuregreek and \greekscript. The definitions in this file make the font encoding fit for use with the Greek script. (See textalpha.sty for default definitions.)

The \ensuregreek macro can be used to ensure that its argument is set in a font encoding with support for Greek. If the active font encoding supports it, kerning between adjacent command calls (e.g. \ensuregreek{A}\ensuregreek{\Upsilon}) is preserved. This allows, e.g., wrapping of compound Unicode character definitions.

\ProvideTextCommand{\ensuregreek}{\LastDeclaredEncoding}[1]{#1}

The \greekscript declaration switches to a font encoding supporting the Greek script, if required. The following definition announces the \LastDeclaredEncoding as Greek-supporting:

\ProvideTextCommand{\greekscript}{\LastDeclaredEncoding}{}

Aliases

Aliases are defined via DeclareTextCommand so that up/downcasing works without the need for additional uclclist entries.

Names matching mathematical variant symbols:

% \var... matching GREEK ... SYMBOL
\DeclareTextCommand{\textvarbeta}{\LastDeclaredEncoding}{\textbetasymbol}   % ϐ
\DeclareTextCommand{\textvarkappa}{\LastDeclaredEncoding}{\textkappasymbol} % ϰ
\DeclareTextCommand{\textvarTheta}{\LastDeclaredEncoding}{\textThetasymbol} % ϴ
\DeclareTextCommand{\textvartheta}{\LastDeclaredEncoding}{\textthetasymbol} % ϑ
\DeclareTextCommand{\textvarpi}{\LastDeclaredEncoding}{\textpisymbol}       % ϖ
\DeclareTextCommand{\textvarrho}{\LastDeclaredEncoding}{\textrhosymbol}     % ϱ
% \var... matching GREEK LETTER ...
\DeclareTextCommand{\textvarepsilon}{\LastDeclaredEncoding}{\textepsilon}   % ε
\DeclareTextCommand{\textvarphi}{\LastDeclaredEncoding}{\textphi}           % φ
\DeclareTextCommand{\textvarsigma}{\LastDeclaredEncoding}{\textfinalsigma}  % ς

Compatibility aliases for hyperref’s puenc.def:

\DeclareTextCommand{\textmugreek}{\LastDeclaredEncoding}{\textmu}
\DeclareTextCommand{\textkoppagreek}{\LastDeclaredEncoding}{\textkoppa}
\DeclareTextCommand{\textKoppagreek}{\LastDeclaredEncoding}{\textKoppa}
\DeclareTextCommand{\textStigmagreek}{\LastDeclaredEncoding}{\textStigma}
\DeclareTextCommand{\textstigmagreek}{\LastDeclaredEncoding}{\textstigma}
\DeclareTextCommand{\textSampigreek}{\LastDeclaredEncoding}{\textSampi}
\DeclareTextCommand{\textsampigreek}{\LastDeclaredEncoding}{\textsampi}
\DeclareTextCommand{\textdigammagreek}{\LastDeclaredEncoding}{\textdigamma}
\DeclareTextCommand{\textDigammagreek}{\LastDeclaredEncoding}{\textDigamma}

\DeclareTextCommand{\textnumeralsigngreek}{\LastDeclaredEncoding}{\textdexiakeraia}
\DeclareTextCommand{\textnumeralsignlowergreek}{\LastDeclaredEncoding}{\textaristerikeraia}

Names from babel and teubner (do we want to define them here as alias?)

\DeclareTextCommand{\anwtonos}{\LastDeclaredEncoding}{\textdexiakeraia}     % ʹ
\DeclareTextCommand{\katwtonos}{\LastDeclaredEncoding}{\textaristerikeraia} % ͵

Two Unicode code points and names for one character:

\DeclareTextCommand{\accoxia}{\LastDeclaredEncoding}{\acctonos}
\DeclareTextCommand{\accdialytikaoxia}{\LastDeclaredEncoding}{\accdialyikatonos}
\DeclareTextCommand{\acckoronis}{\LastDeclaredEncoding}{\accpsili}

Symbol macros for the breathings:

Moved to textalpha.sty to avoid clashes with local definitions of \< and \> in documents using LGR or babel-greek. (Bugreport David Kastrup). If you want to use the short macros without loading textalpha, you can define them in the document preamble like

\DeclareTextCommand{\<}{LGR}{\accdasia}
\DeclareTextCommand{\>}{LGR}{\accpsili}
\DeclareTextCompositeCommand{\>}{LGR}{'}{\accpsilioxia}
\DeclareTextCompositeCommand{\>}{LGR}{`}{\accpsilivaria}
\DeclareTextCompositeCommand{\>}{LGR}{~}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\<}{LGR}{'}{\accdasiaoxia}
\DeclareTextCompositeCommand{\<}{LGR}{`}{\accdasiavaria}
\DeclareTextCompositeCommand{\<}{LGR}{~}{\accdasiaperispomeni}

Or use alternative symbols for the breathings (cf. X compose table, LCI encoding)?

\DeclareTextCommand{\(}{\LastDeclaredEncoding}{\accdasia}
\DeclareTextCommand{\)}{\LastDeclaredEncoding}{\accpsili}

Composite diacritics

Composite accents can be input as sequence of simple diacritics (in arbitrary order) via named macro, symbol macro and “transcription characters”, e.g. one of

\accdialyticavaria\textalpha,
\accdialytica\accvaria\textalpha,
\"\'\textalpha,
\"'\textalpha, or
\'"\textalpha.

Separate definitions for the supported variants of the second input token are required as composition is based on the non-expanded input

The composition with simple “transcription characters” must also be defined for the symbol macros, otherwise it fails with \Makeuppercase.

For Unicode encodings (where they do not resolve to Greek named macros, composite definitions starting with standard macros are requried:

\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\acctonos}{\accdialytikatonos}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\'}{\accdialytikatonos}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{'}{\accdialytikatonos}
\DeclareTextCompositeCommand{\"}{\LastDeclaredEncoding}{\'}{\accdialytikatonos}
\DeclareTextCompositeCommand{\"}{\LastDeclaredEncoding}{'}{\accdialytikatonos}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\accvaria}{\accdialytikavaria}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\`}{\accdialytikavaria}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{`}{\accdialytikavaria}
\DeclareTextCompositeCommand{\"}{\LastDeclaredEncoding}{\`}{\accdialytikavaria}
\DeclareTextCompositeCommand{\"}{\LastDeclaredEncoding}{`}{\accdialytikavaria}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\accperispomeni}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\~}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{~}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\"}{\LastDeclaredEncoding}{\~}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\"}{\LastDeclaredEncoding}{~}{\accdialytikaperispomeni}

\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{\accdialytika}{\accdialytikatonos}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{\"}{\accdialytikatonos}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{"}{\accdialytikatonos}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{\"}{\accdialytikatonos}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{"}{\accdialytikatonos}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{\accdasia}{\accdasiaoxia}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{\<}{\accdasiaoxia}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{<}{\accdasiaoxia}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{\<}{\accdasiaoxia}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{<}{\accdasiaoxia}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{\accpsili}{\accpsilioxia}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{\>}{\accpsilioxia}
\DeclareTextCompositeCommand{\acctonos}{\LastDeclaredEncoding}{>}{\accpsilioxia}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{\>}{\accpsilioxia}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{>}{\accpsilioxia}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{\'}{\textquoteright}
\DeclareTextCompositeCommand{\'}{\LastDeclaredEncoding}{'}{\textquoteright}

\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{\accdialytika}{\accdialytikavaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{\"}{\accdialytikavaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{"}{\accdialytikavaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{\"}{\accdialytikavaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{"}{\accdialytikavaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{\accdasia}{\accdasiavaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{\<}{\accdasiavaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{<}{\accdasiavaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{\<}{\accdasiavaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{<}{\accdasiavaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{\accpsili}{\accpsilivaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{\>}{\accpsilivaria}
\DeclareTextCompositeCommand{\accvaria}{\LastDeclaredEncoding}{>}{\accpsilivaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{\>}{\accpsilivaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{>}{\accpsilivaria}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{\`}{\textquoteleft}
\DeclareTextCompositeCommand{\`}{\LastDeclaredEncoding}{`}{\textquoteleft}

\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{\accdialytika}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{\"}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{"}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\~}{\LastDeclaredEncoding}{\"}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\~}{\LastDeclaredEncoding}{"}{\accdialytikaperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{\accdasia}{\accdasiaperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{\<}{\accdasiaperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{<}{\accdasiaperispomeni}
\DeclareTextCompositeCommand{\~}{\LastDeclaredEncoding}{\<}{\accdasiaperispomeni}
\DeclareTextCompositeCommand{\~}{\LastDeclaredEncoding}{<}{\accdasiaperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{\accpsili}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{\>}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\accperispomeni}{\LastDeclaredEncoding}{>}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\~}{\LastDeclaredEncoding}{\>}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\~}{\LastDeclaredEncoding}{>}{\accpsiliperispomeni}

\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{\acctonos}{\accpsilioxia}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{\'}{\accpsilioxia}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{'}{\accpsilioxia}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{\accvaria}{\accpsilivaria}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{\`}{\accpsilivaria}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{`}{\accpsilivaria}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{\accperispomeni}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{\~}{\accpsiliperispomeni}
\DeclareTextCompositeCommand{\accpsili}{\LastDeclaredEncoding}{~}{\accpsiliperispomeni}

\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\acctonos}{\accdasiaoxia}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\'}{\accdasiaoxia}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{'}{\accdasiaoxia}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\accvaria}{\accdasiavaria}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\`}{\accdasiavaria}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{`}{\accdasiavaria}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\accperispomeni}{\accdasiaperispomeni}
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\~}{\accdasiaperispomeni}

UPPERCASE

If UPPERCASE (all-caps) is generated with \MakeUppercase, macro substitutions in the \@uclclist apply. This can be used to drop the diacritics (except dialytika and iota subscript). Different conventions exist for the treatment of the iota subscript with uppercase letters. In the CB Fonts, a small capital adscript iota is used.

@uclclist extension

Based on the babel patch and fontenc.sty.

The definition of an auxiliary, self-resetting macro makes this idempotent (only the first use of this function will expand the @uclclist). The second and third lines are TeX’ way of writing uclclist += …:

\providecommand*\update@uclc@with@greek{%
  \expandafter\def\expandafter\@uclclist\expandafter{%
    \@uclclist
    \accdasia\LGR@accdropped
    \accdasiaoxia\LGR@hiatus
    \accdasiavaria\LGR@accdropped
    \accdasiaperispomeni\LGR@accdropped
    \accpsili\LGR@hiatus
    \accpsilioxia\LGR@hiatus
    \accpsilivaria\LGR@hiatus
    \accpsiliperispomeni\LGR@accdropped
    \acctonos\LGR@hiatus
    \accvaria\LGR@accdropped
    \accdialytikatonos\LGR@accDialytika
    \accdialytikavaria\LGR@accDialytika
    \accdialytikaperispomeni\LGR@accDialytika
    \accperispomeni\LGR@accdropped
    \LGR@ypogegrammeni\prosgegrammeni
    \textalpha      \textAlpha
    \textbeta       \textBeta
    \textgamma      \textGamma
    \textdelta      \textDelta
    \textepsilon    \textEpsilon
    \textzeta       \textZeta
    \texteta        \textEta
    \texttheta      \textTheta
    \textiota       \textIota
    \textkappa      \textKappa
    \textlambda     \textLambda
    \textmu         \textMu
    \textnu         \textNu
    \textxi         \textXi
    \textomicron    \textOmicron
    \textpi         \textPi
    \textrho        \textRho
    \textfinalsigma \textSigma
    \textsigma      \textSigma
    \textautosigma  \textSigma
    \texttau        \textTau
    \textupsilon    \textUpsilon
    \textphi        \textPhi
    \textchi        \textChi
    \textpsi        \textPsi
    \textomega      \textOmega
    \textkoppa      \textKoppa
    \textqoppa      \textQoppa
    \textvarstigma  \textStigma
    \textstigma     \textStigma
    \textsampi      \textSampi
    \textdigamma    \textDigamma
  }%
  \let\update@uclc@with@greek\relax
}

Expand the uclc list using the just defined macro:

\update@uclc@with@greek

Substitution macros

Drop diacritics (The argument passing ensures that kerning is preserved)

\DeclareTextCommand{\LGR@accdropped}{\LastDeclaredEncoding}[1]{#1}

Keep dialytika: Define a dummy alias so that downcasing with \MakeLowercase does not convert a simple dialytika to a composite accent:

\DeclareTextCommand{\LGR@accDialytika}{\LastDeclaredEncoding}{\accdialytika}
\DeclareTextCompositeCommand{\accdialytika}{\LastDeclaredEncoding}{\LGR@hiatus}{\accdialytika}

Convert \prosgegrammeni (adscript iota) to \ypogegrammeni (subscript iota) but not vice versa:

\DeclareTextCommand{\LGR@ypogegrammeni}{\LastDeclaredEncoding}{\ypogegrammeni}

Mark hiatus

Tonos and dasia mark a hiatus if placed on the first vowel of a diphthong (ΑΙ, ΑΥ, ΕΙ). A dialytika must be placed on the second vowel if they are dropped (άυλος → ΑΫΛΟΣ, μάινα → ΜΑΪΝΑ, κέικ → ΚΕΪΚ, ἀυπνία → ΑΫΠΝΙΑ):

\DeclareTextCommand{\LGR@hiatus}{\LastDeclaredEncoding}[1]{#1}
\DeclareTextCompositeCommand{\LGR@hiatus}{\LastDeclaredEncoding}{>}{\LGR@hiatus}
\DeclareTextCompositeCommand{\LGR@hiatus}{\LastDeclaredEncoding}{<}{\LGR@accdropped}
\DeclareTextCompositeCommand{\LGR@hiatus}{\LastDeclaredEncoding}{\textAlpha}{\LGR@A@hiatus}
\DeclareTextCompositeCommand{\LGR@hiatus}{\LastDeclaredEncoding}{\textEpsilon}{\LGR@E@hiatus}

The font encoding file must define the \LGR@hiatus TextCommand. See lgrenc.def for an example.

The following macro can be used to test if the next character is an Alpha or Epsilon. As \@ifnextchar gobbles spaces the lookahead macro definition from amsgen.sty is used:

This macro is a variant of LaTeX’s \@ifnextchar, macro that does not skip over spaces.

\providecommand*{\LGR@ifnextchar}[3]{%
  \let\reserved@d= #1%
  \def\reserved@a{#2}\def\reserved@b{#3}%
  \futurelet\@let@token\LGR@ifnch
}
\providecommand*{\LGR@ifnch}{%
  \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi
  \reserved@b
}