lgrenc.def

LGR 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.

Abstract

The LGR font encoding is the de-facto standard for Greek typesetting with LaTeX. This file provides a comprehensive set of macros to typeset Greek with LGR encoded fonts. It works for both, monotonic and polytonic Greek, independent of the babel package.

Contents

Changelog

Development of this file started under the name “lgrxenc.def” as part of the lgrx bundle. With version 0.8, it moved to greek-fontenc/lgrx.def.

0.1

2010-03-31

initial attempt

0.2

2010-04-20

diacritics dropped in UPPERCASE.

0.3

2010-06-08

handle Titlecase and UPPERCASE extending \@uclclist.

0.4

2010-06-15

more text symbols.

0.5

2010-08-27

support \textalpha\textOmega.

0.5.1

2012-05-08

upload to CTAN.

0.6

2012-06-29

\TextGreek wrapper command,

 

aliases for puenc.def compatibility.

0.6.1

2013-02-12

\@uclclist entries for PU aliases.

0.7

2013-05-13

documentation update, new accent macros names,

 

\TextGreek renamed to \ensuregreek.

0.8

2013-05-13

rename to lgrenc.def (superseding the babel version),

 

move to greek-fontenc,

 

drop the old (<0.7) internal accent macros names.

0.8.1

2013-05-22

auxiliary macro update@uclc@with@greek,

 

conservative naming: “text” prefix for archaic letters,

 

“LGR@” prefix for internal commands,

 

remove not required alias macros.

0.8.2

2013-05-23

fix name: \textpentehkaton -> \textpentehekaton,

 

fix \textperiodcentered,

 

add composite command for Ῥ (Rho with Dasia).

Usage

Load this file by calling fontenc with the LGR option or indirectly via the babel, textalpha or alphabeta packages.

Example:

Select font encodings T1 (as default) and LGR (for Greek):

\usepackage[LGR,T1]{fontenc}

preliminary considerations: LICR macro names

This file provides LaTeX internal character representations (LICR macros) for all non-ASCII characters present in the LGR font encoding. For Greek letters and diacritics, LICR macro names were selected based on the following considerations:

The fntguide (section 6.4 Naming conventions) recommends:

Where possible, text symbols should be named as \text followed by the Adobe glyph name: for example \textonequarter or \textsterling. Similarly, math symbols should be named as \math followed by the glyph name, for example \mathonequarter or \mathsterling.

The Adobe Glyph List For New Fonts has names for many glyphs in the Greek and Coptic Unicode block, but not for Greek extended. The Adobe Glyph List (for existing fonts) lists additional glyph names used in older fonts.

Proposals

  • If there exists a math-mode macro for a symbol, form the corresponding text macro by prepending text?

    Example:

    The glyph name for the GREEK SMALL LETTER FINAL SIGMA is sigma1, the corresponding math-macro is \varsigma. The text symbol could be made available as \textvarsigma.

    Problems:

    \varepsilon and \varphi math macros map to characters named “GREEK SMALL LETTER …”, while \\vartheta, \\varkappa, \\varrho, and \\varpi math macros map to “GREEK … SYMBOL” Unicode characters.

    In Greek text, these variants are interchangeable. The LGR font encoding does not contain slots for “symbol” glyph variants. In some Greek fonts, GREEK SMALL LETTERS use glyph variants resembling the corresponding GREEK SYMBOL Unicode character’s reference glyph.

  • Derive macro names from Unicode names?

    The Unicode names list provides standardized descriptive names for all Unicode characters that use only capital letters of the Latin alphabet. While not suited for direct use in a LICR macros, they can be either

    1. used as inspiration for new LICR macro names or

    2. converted to LICR macro names via a defined set of transformation rules.

    Example:

    \textfinalsigma or just \finalsigma as a more descriptive name for GREEK SMALL LETTER FINAL SIGMA derived via the rules:

    • drop “LETTER” if the name remains unique,

    • drop “GREEK” if the name remains unique,

    • use capitalized name for capital letters, lowercase for “SMALL” letters and drop “SMALL”,

    • concatenate

  • Omit the “text” prefix for macros that do not have a math counterpart?

    Pro:
    • Simpler,

    • ease of use (less typing, better readability of source text),

    • many established text macro names without “text”,

    • there are examples of encoding-specific macros without the text-prefix, especially for letters,

      T1

      \AE \DH \DJ \L \NG \OE \O \SS \TH \ae \dh \dj \guillemotleft \guillemotright \guilsinglleft \guilsinglright \i \j \l \ng \oe \o \quotedblbase \quotesinglbase \ss \th (also in OT1)

      T2*

      \CYR* and \cyr*

      HE8

      \heb* or no prefix

      PU

      short descriptive names in the arabic part (puarenc.def)

    • text prefix does not mark a macro as encoding-specific or “inserting a glyph”. There are e.g. font-changing macros (\textbf, \textit) and encoding-changing macros (\textgreek, \textcyr).

    Contra:
    • Less consistent.

    • text prefix marks a macro as confined to text mode.

    Conclusion:

    To avoid name clashes, the font encoding file uses the text prefix for symbols. Aliases (short forms, compatibility defs, etc.) can be defined in packages.

How to name accent macros?

  • standard accent macros (\DeclareTextAccent definitions in latex/base/...) are one-symbol macros (\' \" ... \u \v ...) .

  • tipa.sty and ucs use the “text” prefix also for accents.

    However, the Adobe Glyph List For New Fonts maps, e.g., “tonos” and “dieresistonos” to 0384 GREEK TONOS and 0385 GREEK DIALYTIKA TONOS, hence texttonos and textdiaresistonos should be spacing characters.

  • textcomp (ts1enc.def) defines \capital... accents (i.e. without text prefix).

  • Use a common prefix \textaccent..., \accent..., or just \acc... (cf \@tabacckludge)?

Currently, lgrx uses for diacritics:

  • Greek names like in Unicode, and ucsencs.def

  • The prefix “acc” to distinguish the macros as TextAaccent and reduce the risc of name clashes.

  • For the end-user “symbol macros” (\~ \' \` \" \< \>) are provided.

References

An alternative, more complete set of short mnemonic character names is the XML Entity Definitions for Characters W3C Recommendation from 01 April 2010.

For glyph names of the LGR encoding see e.g. CB.enc by Apostolos Syropoulos and xl-lgr.enc from the libertine (legacy) package. lgr.cmap provides a mapping to Unicode characters.

A full set of \text* symbol macros is defined in ucsencs.def from the ucs package.

Aliases from puenc.def ensure that the hyperref package can convert Greek symbols to a PDF-string.

Implementation

Read this file only once

Note

The use of \@ifundefined has the side-effect that the tested macro becomes defined and set to \relax (polluting the namespace and interfering with test via eTeX’s \ifdefined). However, in this case no harm is done as the macro is defined by the identification below anyway.

% read this file only once
\@ifundefined{ver@lgrenc.def}
  {}
  {\message{LGR font encoding definitions already loaded}
   \expandafter\endinput % "return"
  }

Identification

\ProvidesFile{lgrenc.def}
[2013/05/24 v0.8.2 LGR Greek font encoding definitions]
% Copyright © 2010 Günter Milde
% This file is part of the "greek-fontenc" package.
% It 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.

You can test the version date using

\@ifl@ter {extension}{filename}{date}{YES}{NO}

or using ltxcmds\@iffilelater

Base setup

Declare the font encoding and base substitutions:

\DeclareFontEncoding{LGR}{}{}
\DeclareFontSubstitution{LGR}{cmr}{m}{n}
\DeclareErrorFont{LGR}{cmr}{m}{n}{10}

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

\DeclareTextCommand{\ensuregreek}{LGR}[1]{#1}

Text symbols

Greek Alphabet

Greek letters are accessible by the Latin transcription, but the mapping is specific to the LGR font encoding.

The LICR macros provide a way to access the symbols independent of the specific font encoding, in any font encoding supporting Greek. An alternative Greek font encodings is LGI (ibycus). Greek script is also supported by the Unicode-based font encodings PU (PDF Unicode used by hyperref for PDF metadata), EU1 (XeTeX) and EU2 (LuaTeX). The textalpha package makes these macros available independent of the current font encoding.

\DeclareTextSymbol{\textAlpha}{LGR}{65}
\DeclareTextSymbol{\textBeta}{LGR}{66}
\DeclareTextSymbol{\textGamma}{LGR}{71}
\DeclareTextSymbol{\textDelta}{LGR}{68}
\DeclareTextSymbol{\textEpsilon}{LGR}{69}
\DeclareTextSymbol{\textZeta}{LGR}{90}
\DeclareTextSymbol{\textEta}{LGR}{72}
\DeclareTextSymbol{\textTheta}{LGR}{74}
\DeclareTextSymbol{\textIota}{LGR}{73}
\DeclareTextSymbol{\textKappa}{LGR}{75}
\DeclareTextSymbol{\textLambda}{LGR}{76}
\DeclareTextSymbol{\textMu}{LGR}{77}
\DeclareTextSymbol{\textNu}{LGR}{78}
\DeclareTextSymbol{\textXi}{LGR}{88}
\DeclareTextSymbol{\textOmicron}{LGR}{79}
\DeclareTextSymbol{\textPi}{LGR}{80}
\DeclareTextSymbol{\textRho}{LGR}{82}
\DeclareTextSymbol{\textSigma}{LGR}{83}
\DeclareTextSymbol{\textTau}{LGR}{84}
\DeclareTextSymbol{\textUpsilon}{LGR}{85}
\DeclareTextSymbol{\textPhi}{LGR}{70}
\DeclareTextSymbol{\textChi}{LGR}{81}
\DeclareTextSymbol{\textPsi}{LGR}{89}
\DeclareTextSymbol{\textOmega}{LGR}{87}
%
\DeclareTextSymbol{\textalpha}{LGR}{97}
\DeclareTextSymbol{\textbeta}{LGR}{98}
\DeclareTextSymbol{\textgamma}{LGR}{103}
\DeclareTextSymbol{\textdelta}{LGR}{100}
\DeclareTextSymbol{\textepsilon}{LGR}{101}
\DeclareTextSymbol{\textzeta}{LGR}{122}
\DeclareTextSymbol{\texteta}{LGR}{104}
\DeclareTextSymbol{\texttheta}{LGR}{106}
\DeclareTextSymbol{\textiota}{LGR}{105}
\DeclareTextSymbol{\textkappa}{LGR}{107}
\DeclareTextSymbol{\textlambda}{LGR}{108}
\DeclareTextSymbol{\textmu}{LGR}{109}
\DeclareTextSymbol{\textnu}{LGR}{110}
\DeclareTextSymbol{\textxi}{LGR}{120}
\DeclareTextSymbol{\textomicron}{LGR}{111}
\DeclareTextSymbol{\textpi}{LGR}{112}
\DeclareTextSymbol{\textrho}{LGR}{114}
\DeclareTextCommand{\textsigma}{LGR}{s\noboundary} % σ
\DeclareTextSymbol{\textvarsigma}{LGR}{99}         % ς final sigma
\DeclareTextCommand{\textfinalsigma}{LGR}{\textvarsigma} % ς final sigma
\DeclareTextSymbol{\textautosigma}{LGR}{115}       % σ (ς at end of word)
\DeclareTextSymbol{\texttau}{LGR}{116}
\DeclareTextSymbol{\textupsilon}{LGR}{117}
\DeclareTextSymbol{\textphi}{LGR}{102}
\DeclareTextSymbol{\textchi}{LGR}{113}
\DeclareTextSymbol{\textpsi}{LGR}{121}
\DeclareTextSymbol{\textomega}{LGR}{119}

Additional Greek symbols

Ancient Greek Numbers (Athenian Numerals)

Names from ucs (ucsencs.def) (In ucs, five hundred is (wrongly?) named textpentehkaton.)

\DeclareTextSymbol{\textpentedeka}{LGR}{2}    % GREEK ACROPHONIC ATTIC FIFTY
\DeclareTextSymbol{\textpentehekaton}{LGR}{3} % GREEK ACROPHONIC ATTIC FIVE HUNDRED
\DeclareTextSymbol{\textpenteqilioi}{LGR}{4}  % GREEK ACROPHONIC ATTIC FIVE THOUSAND
\DeclareTextSymbol{\textpentemuria}{LGR}{5}  % GREEK ACROPHONIC ATTIC FIFTY THOUSAND

Archaic letters

Names after teubner and ucs:

\DeclareTextSymbol{\textstigma}{LGR}{6}       % ϛ
\DeclareTextSymbol{\textvarstigma}{LGR}{7}    % stigma variant (CB.enc, teubner)
\DeclareTextSymbol{\textkoppa}{LGR}{18}       % ϟ (greek small letter koppa)
\DeclareTextSymbol{\textqoppa}{LGR}{19}       % ϙ (archaic koppa)
\DeclareTextSymbol{\textQoppa}{LGR}{21}       % Ϙ (archaic Koppa)
\DeclareTextSymbol{\textStigma}{LGR}{22}      % Ϛ in some fonts ϹΤ ligature
\DeclareTextSymbol{\textSampi}{LGR}{23}       % Ϡ
\DeclareTextSymbol{\textsampi}{LGR}{27}       % ϡ
\DeclareTextSymbol{\textanoteleia}{LGR}{38}   % ·
\DeclareTextSymbol{\texterotimatiko}{LGR}{63} % ;
\DeclareTextSymbol{\textdigamma}{LGR}{147}    % ϝ (ucs) \digamma used by amsmath for math-macro
\DeclareTextSymbol{\textDigamma}{LGR}{195}    % Ϝ (ucs)

Compatibility aliases for hyperref’s puenc.def, defined via DeclareTextCommand so that up/downcasing works without the need for additional uclclist entries:

\DeclareTextCommand{\textstigmagreek}{LGR}{\textstigma}   % puenc.def
\DeclareTextCommand{\textkoppagreek}{LGR}{\textkoppa}     % puenc.def
\DeclareTextCommand{\textStigmagreek}{LGR}{\textStigma}   % puenc.def
\DeclareTextCommand{\textSampigreek}{LGR}{\textSampi}     % puenc.def
\DeclareTextCommand{\textsampigreek}{LGR}{\textsampi}     % puenc.def
\DeclareTextCommand{\textdigammagreek}{LGR}{\textdigamma} % puenc.def
\DeclareTextCommand{\textDigammagreek}{LGR}{\textDigamma} % puenc.def

Compatibility aliases for babel’s greek.ldf (will be moved to the babel package). :

% \digamma used by amsmath for math-macro
\DeclareTextCommand{\ddigamma}{LGR}{\textdigamma}         % greek.ldf
\DeclareTextCommand{\vardigamma}{LGR}{\textvarstigma}     % greek.ldf
\DeclareTextCommand{\Digamma}{LGR}{\textDigamma}          % greek.ldf

Numeral signs

See also http://en.wikipedia.org/wiki/Greek_numerals Names from hyperref’s puenc.def:

\DeclareTextSymbol{\textnumeralsigngreek}{LGR}{254} % ʹ (puenc.def)
\DeclareTextSymbol{\textnumeralsignlowergreek}{LGR}{255} % ͵ (puenc.def)

Names from babel and teubner

\DeclareTextSymbol{\anwtonos}{LGR}{254}             % ʹ (Dexia keraia)
\DeclareTextSymbol{\katwtonos}{LGR}{255}            % ͵ (Aristeri keraia)

Names from ucs

\DeclareTextSymbol{\textdexiakeraia}{LGR}{254}      % ʹ (Dexia keraia)
\DeclareTextSymbol{\textaristerikeraia}{LGR}{255}   % ͵ (Aristeri keraia)

Other

Characters that also exist in other font encodings:

  • define them for LGR if there is a matching glyph,

  • use established macro names that match with other *enc.def files and textcomp.sty.

All encodings: See usrguide.pdf, chapter 3.14 ff:

\DeclareTextSymbol{\textendash}{LGR}{0}          % EN DASH
\DeclareTextSymbol{\textquoteleft}{LGR}{28}      % ‘
\DeclareTextSymbol{\textquoteright}{LGR}{29}     % ’
\DeclareTextSymbol{\textperiodcentered}{LGR}{38} % · = \textanoteleia
\DeclareTextSymbol{\textcompwordmark}{LGR}{118}  % ZERO WIDTH NO JOINER
\DeclareTextSymbol{\textemdash}{LGR}{127}        % EM DASH

T1:

\DeclareTextSymbol{\guillemotleft}{LGR}{123}     % «
\DeclareTextSymbol{\guillemotright}{LGR}{125}    % »

TS1:

\ProvideTextCommand{\textasciibreve}{LGR}{\char30\textcompwordmark}    % ˘
\ProvideTextCommand{\textasciimacron}{LGR}{\char31\textcompwordmark}   % ¯
\ProvideTextCommand{\textasciidieresis}{LGR}{\char34\textcompwordmark} % "
\ProvideTextCommand{\textasciiacute}{LGR}{\char39\textcompwordmark}    % '
\ProvideTextCommand{\textasciigrave}{LGR}{\char96\textcompwordmark}    % `
\DeclareTextCommand{\textasciitilde}{LGR}{\char126\textcompwordmark}   % ~
\DeclareTextSymbol{\textohm}{LGR}{87}            % Ω (Ohm sign -> Omega)
\DeclareTextSymbol{\texteuro}{LGR}{24}           % € \euro in greek.ldf
\DeclareTextSymbol{\textpercent}{LGR}{37}        % %
\DeclareTextSymbol{\textperthousand}{LGR}{25}    % ‰ \permille in greek.ldf

T3:

\DeclareTextSymbol{\textschwa}{LGR}{26}          % ə

Not implemented

The characters at position 16 and 17 are used in the \nexus macro of the teubner package to form an extensible, hat-like bracket. In CB.enc, they are mapped to

16–MODIFIER LETTER LOW ACUTE ACCENT 17–MODIFIER LETTER LOW GRAVE ACCENT

but according to the documentation of Werner Lemberg’s babel patch, they rather represent the left and right part of U+23E0 TOP TORTOISE SHELL BRACKET.

Babel’s lgrenc.def has some definitions to prevent surprises with macros that expect a Latin script. These definitions are problematic in a font-encoding definition file as they

  • require \textlatin which is defined in babel.def,

  • prevent use of TS1 symbols set as default by textcomp.sty.

\ProvideTextCommand{\textcopyright}{LGR}{\textcircled{\textlatin{c}}}
\ProvideTextCommand{\textregistered}{LGR}{\textcircled{\textlatin{\textsc r}}}
\ProvideTextCommand{\texttrademark}{LGR}{\textsuperscript{\textlatin{TM}}}
\ProvideTextCommand{\SS}{LGR}{\textlatin{SS}}

They were moved to greek.ldf.

Diacritics

This section defines named macros for Greek diacritics and standard symbol macros as alias for simple diacritics. Convenient input conventions for composite diacritics are defined as composite definitions.

Advantages:

  • input convention similar to LGR input encodings (just prepend a \).

  • Access pre-composed characters without resorting to the ligature mechanism (allows proper kerning, cf. teubner-doc).

  • Named macros can be used to ensure a font encoding supporting Greek is used. However, substitution with pre-composed characters works only for the active font encoding (cf. textalpha). Named accent macros can also be used instead of the \@tabacckludge by to-LaTeX converters to ensure working also inside the tabbing environment.

  • Named macros are required for upcasing according to Greek typesetting conventions (cf. UPPERCASE below) and for composite diacritics.

Named macros

Definitions are based on the teubner package by Claudio Beccari, the ucs package, and the babel patch by Werner Lemberg. Names are derived from the Unicode name with the prefix “acc” (cf. How to name accent macros? above) reducing the probability of incompatibilities compared to the two-letter teubner diacritic macros or the “text” prefix used by ucs.

Simple Greek diacritics:

\DeclareTextAccent{\accdialytika}{LGR}{34} % διαλυτικά (diaeresis/trema)
\DeclareTextAccent{\acctonos}{LGR}{39} % τόνος/ὀξεῖα tonos/oxia (acute)
\DeclareTextAccent{\accdasia}{LGR}{60} % δασεῖα spiritus asper (rough breathing)
\DeclareTextAccent{\accpsili}{LGR}{62} % ψιλή spiritus lenis (smooth breathing)
\DeclareTextAccent{\accvaria}{LGR}{96} % βαρεῖα (grave)
\DeclareTextAccent{\accperispomeni}{LGR}{126} % περισπωμένη (circonflex/tilde)

The sub-iota is input after the base character. In LGR fonts, ligatures are defined for pre-composed characters, the postfix ligature does not interfere with kerning:

\DeclareTextSymbol{\prosgegrammeni}{LGR}{8}  % ι "capital" sub-iota
\DeclareTextSymbol{\ypogegrammeni}{LGR}{124} % ͺ "small" sub-iota

Composite diacritics:

%                                                       Teubner name
\DeclareTextAccent{\accdialytikaperispomeni}{LGR}{32} % Cd
\DeclareTextAccent{\accdialytikatonos}{LGR}{35}       % Ad
\DeclareTextAccent{\accdialytikavaria}{LGR}{36}       % Gd

\DeclareTextAccent{\accdasiaperispomeni}{LGR}{64}     % Cr
\DeclareTextAccent{\accdasiavaria}{LGR}{67}           % Gr
\DeclareTextAccent{\accdasiaoxia}{LGR}{86}            % Ar

\DeclareTextAccent{\accpsiliperispomeni}{LGR}{92}     % Cs
\DeclareTextAccent{\accpsilioxia}{LGR}{94}            % As
\DeclareTextAccent{\accpsilivaria}{LGR}{95}           % Gs

For classical Greek and linguistics, the LGR font encoding contains a number of additional diacritic symbols:

\DeclareTextAccent{\accinvertedbrevebelow}{LGR}{1} % INVERTED BREVE BELOW
\DeclareTextAccent{\textsubarch}{LGR}{1}      % (tipa)
\DeclareTextAccent{\accbrevebelow}{LGR}{20}   % BREVE BELOW
\DeclareTextAccent{\u}{LGR}{30}               % BREVE
\DeclareTextAccent{\=}{LGR}{31}               % MACRON

Aliases

Symbol macros:

\DeclareTextCommand{\"}{LGR}{\accdialytika}
\DeclareTextCommand{\'}{LGR}{\acctonos}
\DeclareTextCommand{\`}{LGR}{\accvaria}
\DeclareTextCommand{\~}{LGR}{\accperispomeni}
\DeclareTextCommand{\<}{LGR}{\accdasia}
\DeclareTextCommand{\>}{LGR}{\accpsili}

TODO: do we also want alternative symbols for the breathings (cf. X compose table, LCI encoding)?

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

Two Unicode names for one character:

\DeclareTextCommand{\accoxia}{LGR}{\acctonos}
\DeclareTextCommand{\acckoronis}{LGR}{\accpsili}

Composite definitions

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. \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):

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

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

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

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

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

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

Pre-composed letters

Small letters with diacritics

(from teubner with changed names of the composite accents):

\DeclareTextComposite{\accvaria}{LGR}{a}{128}
\DeclareTextComposite{\accdasia}{LGR}{a}{129}
\DeclareTextComposite{\accpsili}{LGR}{a}{130}
\DeclareTextComposite{\accdasiavaria}{LGR}{a}{131}
\DeclareTextComposite{\acctonos}{LGR}{a}{136}
\DeclareTextComposite{\accdasiaoxia}{LGR}{a}{137}
\DeclareTextComposite{\accpsilioxia}{LGR}{a}{138}
\DeclareTextComposite{\accpsilivaria}{LGR}{a}{139}
\DeclareTextComposite{\accperispomeni}{LGR}{a}{144}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{a}{145}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{a}{146}
\DeclareTextComposite{\accvaria}{LGR}{h}{152}
\DeclareTextComposite{\accdasia}{LGR}{h}{153}
\DeclareTextComposite{\accpsili}{LGR}{h}{154}
\DeclareTextComposite{\acctonos}{LGR}{h}{160}
\DeclareTextComposite{\accdasiaoxia}{LGR}{h}{161}
\DeclareTextComposite{\accpsilioxia}{LGR}{h}{162}
\DeclareTextComposite{\accdasiavaria}{LGR}{h}{163}
\DeclareTextComposite{\accperispomeni}{LGR}{h}{168}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{h}{169}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{h}{170}
\DeclareTextComposite{\accpsilivaria}{LGR}{h}{171}
\DeclareTextComposite{\accvaria}{LGR}{w}{176}
\DeclareTextComposite{\accdasia}{LGR}{w}{177}
\DeclareTextComposite{\accpsili}{LGR}{w}{178}
\DeclareTextComposite{\accdasiavaria}{LGR}{w}{179}
\DeclareTextComposite{\acctonos}{LGR}{w}{184}
\DeclareTextComposite{\accdasiaoxia}{LGR}{w}{185}
\DeclareTextComposite{\accpsilioxia}{LGR}{w}{186}
\DeclareTextComposite{\accpsilivaria}{LGR}{w}{187}
\DeclareTextComposite{\accperispomeni}{LGR}{w}{192}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{w}{193}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{w}{194}
\DeclareTextComposite{\accvaria}{LGR}{i}{200}
\DeclareTextComposite{\accdasia}{LGR}{i}{201}
\DeclareTextComposite{\accpsili}{LGR}{i}{202}
\DeclareTextComposite{\accdasiavaria}{LGR}{i}{203}
\DeclareTextComposite{\acctonos}{LGR}{i}{208}
\DeclareTextComposite{\accdasiaoxia}{LGR}{i}{209}
\DeclareTextComposite{\accpsilioxia}{LGR}{i}{210}
\DeclareTextComposite{\accpsilivaria}{LGR}{i}{211}
\DeclareTextComposite{\accperispomeni}{LGR}{i}{216}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{i}{217}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{i}{218}
\DeclareTextComposite{\accdialytika}{LGR}{i}{240}
\DeclareTextComposite{\accdialytikavaria}{LGR}{i}{241}
\DeclareTextComposite{\accdialytikatonos}{LGR}{i}{242}
\DeclareTextComposite{\accdialytikaperispomeni}{LGR}{i}{243}
\DeclareTextComposite{\accvaria}{LGR}{u}{204}
\DeclareTextComposite{\accdasia}{LGR}{u}{205}
\DeclareTextComposite{\accpsili}{LGR}{u}{206}
\DeclareTextComposite{\accdasiavaria}{LGR}{u}{207}
\DeclareTextComposite{\acctonos}{LGR}{u}{212}
\DeclareTextComposite{\accdasiaoxia}{LGR}{u}{213}
\DeclareTextComposite{\accpsilioxia}{LGR}{u}{214}
\DeclareTextComposite{\accpsilivaria}{LGR}{u}{215}
\DeclareTextComposite{\accperispomeni}{LGR}{u}{220}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{u}{221}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{u}{222}
\DeclareTextComposite{\accdialytika}{LGR}{u}{244}
\DeclareTextComposite{\accdialytikavaria}{LGR}{u}{245}
\DeclareTextComposite{\accdialytikatonos}{LGR}{u}{246}
\DeclareTextComposite{\accdialytikaperispomeni}{LGR}{u}{247}
\DeclareTextComposite{\accvaria}{LGR}{e}{224}
\DeclareTextComposite{\accdasia}{LGR}{e}{225}
\DeclareTextComposite{\accpsili}{LGR}{e}{226}
\DeclareTextComposite{\accdasiavaria}{LGR}{e}{227}
\DeclareTextComposite{\acctonos}{LGR}{e}{232}
\DeclareTextComposite{\accdasiaoxia}{LGR}{e}{233}
\DeclareTextComposite{\accpsilioxia}{LGR}{e}{234}
\DeclareTextComposite{\accpsilivaria}{LGR}{e}{235}
\DeclareTextComposite{\accvaria}{LGR}{o}{228}
\DeclareTextComposite{\accdasia}{LGR}{o}{229}
\DeclareTextComposite{\accpsili}{LGR}{o}{230}
\DeclareTextComposite{\accdasiavaria}{LGR}{o}{231}
\DeclareTextComposite{\acctonos}{LGR}{o}{236}
\DeclareTextComposite{\accdasiaoxia}{LGR}{o}{237}
\DeclareTextComposite{\accpsilioxia}{LGR}{o}{238}
\DeclareTextComposite{\accpsilivaria}{LGR}{o}{239}
\DeclareTextComposite{\accdasia}{LGR}{r}{251}
\DeclareTextComposite{\accpsili}{LGR}{r}{252}

Pre-composed letters with diacritics + LICR macros:

\DeclareTextComposite{\accvaria}{LGR}{\textalpha}{128}
\DeclareTextComposite{\accdasia}{LGR}{\textalpha}{129}
\DeclareTextComposite{\accpsili}{LGR}{\textalpha}{130}
\DeclareTextComposite{\accdasiavaria}{LGR}{\textalpha}{131}
\DeclareTextComposite{\acctonos}{LGR}{\textalpha}{136}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\textalpha}{137}
\DeclareTextComposite{\accpsilioxia}{LGR}{\textalpha}{138}
\DeclareTextComposite{\accpsilivaria}{LGR}{\textalpha}{139}
\DeclareTextComposite{\accperispomeni}{LGR}{\textalpha}{144}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{\textalpha}{145}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{\textalpha}{146}
\DeclareTextComposite{\accvaria}{LGR}{\texteta}{152}
\DeclareTextComposite{\accdasia}{LGR}{\texteta}{153}
\DeclareTextComposite{\accpsili}{LGR}{\texteta}{154}
\DeclareTextComposite{\acctonos}{LGR}{\texteta}{160}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\texteta}{161}
\DeclareTextComposite{\accpsilioxia}{LGR}{\texteta}{162}
\DeclareTextComposite{\accdasiavaria}{LGR}{\texteta}{163}
\DeclareTextComposite{\accperispomeni}{LGR}{\texteta}{168}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{\texteta}{169}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{\texteta}{170}
\DeclareTextComposite{\accpsilivaria}{LGR}{\texteta}{171}
\DeclareTextComposite{\accvaria}{LGR}{\textomega}{176}
\DeclareTextComposite{\accdasia}{LGR}{\textomega}{177}
\DeclareTextComposite{\accpsili}{LGR}{\textomega}{178}
\DeclareTextComposite{\accdasiavaria}{LGR}{\textomega}{179}
\DeclareTextComposite{\acctonos}{LGR}{\textomega}{184}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\textomega}{185}
\DeclareTextComposite{\accpsilioxia}{LGR}{\textomega}{186}
\DeclareTextComposite{\accpsilivaria}{LGR}{\textomega}{187}
\DeclareTextComposite{\accperispomeni}{LGR}{\textomega}{192}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{\textomega}{193}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{\textomega}{194}
\DeclareTextComposite{\accvaria}{LGR}{\textiota}{200}
\DeclareTextComposite{\accdasia}{LGR}{\textiota}{201}
\DeclareTextComposite{\accpsili}{LGR}{\textiota}{202}
\DeclareTextComposite{\accdasiavaria}{LGR}{\textiota}{203}
\DeclareTextComposite{\acctonos}{LGR}{\textiota}{208}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\textiota}{209}
\DeclareTextComposite{\accpsilioxia}{LGR}{\textiota}{210}
\DeclareTextComposite{\accpsilivaria}{LGR}{\textiota}{211}
\DeclareTextComposite{\accperispomeni}{LGR}{\textiota}{216}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{\textiota}{217}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{\textiota}{218}
\DeclareTextComposite{\accdialytika}{LGR}{\textiota}{240}
\DeclareTextComposite{\accdialytikavaria}{LGR}{\textiota}{241}
\DeclareTextComposite{\accdialytikatonos}{LGR}{\textiota}{242}
\DeclareTextComposite{\accdialytikaperispomeni}{LGR}{\textiota}{243}
\DeclareTextComposite{\accvaria}{LGR}{\textupsilon}{204}
\DeclareTextComposite{\accdasia}{LGR}{\textupsilon}{205}
\DeclareTextComposite{\accpsili}{LGR}{\textupsilon}{206}
\DeclareTextComposite{\accdasiavaria}{LGR}{\textupsilon}{207}
\DeclareTextComposite{\acctonos}{LGR}{\textupsilon}{212}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\textupsilon}{213}
\DeclareTextComposite{\accpsilioxia}{LGR}{\textupsilon}{214}
\DeclareTextComposite{\accpsilivaria}{LGR}{\textupsilon}{215}
\DeclareTextComposite{\accperispomeni}{LGR}{\textupsilon}{220}
\DeclareTextComposite{\accdasiaperispomeni}{LGR}{\textupsilon}{221}
\DeclareTextComposite{\accpsiliperispomeni}{LGR}{\textupsilon}{222}
\DeclareTextComposite{\accdialytika}{LGR}{\textupsilon}{244}
\DeclareTextComposite{\accdialytikavaria}{LGR}{\textupsilon}{245}
\DeclareTextComposite{\accdialytikatonos}{LGR}{\textupsilon}{246}
\DeclareTextComposite{\accdialytikaperispomeni}{LGR}{\textupsilon}{247}
\DeclareTextComposite{\accvaria}{LGR}{\textepsilon}{224}
\DeclareTextComposite{\accdasia}{LGR}{\textepsilon}{225}
\DeclareTextComposite{\accpsili}{LGR}{\textepsilon}{226}
\DeclareTextComposite{\accdasiavaria}{LGR}{\textepsilon}{227}
\DeclareTextComposite{\acctonos}{LGR}{\textepsilon}{232}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\textepsilon}{233}
\DeclareTextComposite{\accpsilioxia}{LGR}{\textepsilon}{234}
\DeclareTextComposite{\accpsilivaria}{LGR}{\textepsilon}{235}
\DeclareTextComposite{\accvaria}{LGR}{\textomicron}{228}
\DeclareTextComposite{\accdasia}{LGR}{\textomicron}{229}
\DeclareTextComposite{\accpsili}{LGR}{\textomicron}{230}
\DeclareTextComposite{\accdasiavaria}{LGR}{\textomicron}{231}
\DeclareTextComposite{\acctonos}{LGR}{\textomicron}{236}
\DeclareTextComposite{\accdasiaoxia}{LGR}{\textomicron}{237}
\DeclareTextComposite{\accpsilioxia}{LGR}{\textomicron}{238}
\DeclareTextComposite{\accpsilivaria}{LGR}{\textomicron}{239}
\DeclareTextComposite{\accdasia}{LGR}{r}{251}
\DeclareTextComposite{\accpsili}{LGR}{r}{252}

Capital letters with diacritics

In Greek, diacritics are omitted in all-uppercase words, but kept as part of an uppercase initial (written before rather than above the letter).

The diaytika should also always be used in all-uppercase words (even in cases where they are not needed when writing in lowercase)

http://en.wikipedia.org/wiki/Capitalization

In Title Case, place diacritics before instead of above the base character:

\DeclareTextCompositeCommand{\accdasia}{LGR}{A}{<A}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{A}{<`A}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{A}{<'A}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{A}{<\char126A}
\DeclareTextCompositeCommand{\accpsili}{LGR}{A}{>A}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{A}{>`A}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{A}{>'A}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{A}{>\char126A}
\DeclareTextCompositeCommand{\acctonos}{LGR}{A}{'A}
\DeclareTextCompositeCommand{\accvaria}{LGR}{A}{`A}

\DeclareTextCompositeCommand{\accdasia}{LGR}{E}{<E}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{E}{<'E}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{E}{<`E}
\DeclareTextCompositeCommand{\accpsili}{LGR}{E}{>E}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{E}{>'E}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{E}{>`E}
\DeclareTextCompositeCommand{\acctonos}{LGR}{E}{'E}
\DeclareTextCompositeCommand{\accvaria}{LGR}{E}{`E}

\DeclareTextCompositeCommand{\accdasia}{LGR}{H}{<H}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{H}{<`H}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{H}{<'H}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{H}{<\char126H}
\DeclareTextCompositeCommand{\accpsili}{LGR}{H}{>H}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{H}{>`H}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{H}{>'H}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{H}{>\char126H}
\DeclareTextCompositeCommand{\acctonos}{LGR}{H}{'H}
\DeclareTextCompositeCommand{\accvaria}{LGR}{H}{`H}

\DeclareTextCompositeCommand{\accdasia}{LGR}{I}{<I}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{I}{<`I}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{I}{<'I}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{I}{<\char126I}
\DeclareTextCompositeCommand{\accpsili}{LGR}{I}{>I}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{I}{>`I}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{I}{>'I}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{I}{>\char126I}
\DeclareTextCompositeCommand{\acctonos}{LGR}{I}{'I}
\DeclareTextCompositeCommand{\accvaria}{LGR}{I}{`I}

\DeclareTextCompositeCommand{\accdasia}{LGR}{O}{<O}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{O}{<`O}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{O}{<'O}
\DeclareTextCompositeCommand{\accpsili}{LGR}{O}{>O}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{O}{>`O}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{O}{>'O}
\DeclareTextCompositeCommand{\acctonos}{LGR}{O}{'O}
\DeclareTextCompositeCommand{\accvaria}{LGR}{O}{`O}

\DeclareTextCompositeCommand{\accdasia}{LGR}{R}{<R}

\DeclareTextCompositeCommand{\accdasia}{LGR}{U}{<U}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{U}{<`U}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{U}{<'U}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{U}{<\char126U}
\DeclareTextCompositeCommand{\acctonos}{LGR}{U}{'U}
\DeclareTextCompositeCommand{\accvaria}{LGR}{U}{`U}

\DeclareTextCompositeCommand{\accdasia}{LGR}{W}{<W}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{W}{<`W}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{W}{<'W}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{W}{<\char126W}
\DeclareTextCompositeCommand{\accpsili}{LGR}{W}{>W}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{W}{>`W}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{W}{>'W}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{W}{>\char126W}
\DeclareTextCompositeCommand{\acctonos}{LGR}{W}{'W}
\DeclareTextCompositeCommand{\accvaria}{LGR}{W}{`W}

Except for the dialytika:

\DeclareTextComposite{\accdialytika}{LGR}{I}{219}
\DeclareTextComposite{\accdialytika}{LGR}{U}{223}

Do the same for the LICR macros:

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textAlpha}{<A}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textAlpha}{<`A}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textAlpha}{<'A}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{\textAlpha}{<\char126A}
\DeclareTextCompositeCommand{\accpsili}{LGR}{\textAlpha}{>A}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{\textAlpha}{>`A}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{\textAlpha}{>'A}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{\textAlpha}{>\char126A}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textAlpha}{'A}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textAlpha}{`A}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textEpsilon}{<E}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textEpsilon}{<'E}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textEpsilon}{<`E}
\DeclareTextCompositeCommand{\accpsili}{LGR}{\textEpsilon}{>E}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{\textEpsilon}{>'E}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{\textEpsilon}{>`E}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textEpsilon}{'E}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textEpsilon}{`E}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textEta}{<H}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textEta}{<`H}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textEta}{<'H}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{\textEta}{<\char126H}
\DeclareTextCompositeCommand{\accpsili}{LGR}{\textEta}{>H}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{\textEta}{>`H}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{\textEta}{>'H}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{\textEta}{>\char126H}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textEta}{'H}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textEta}{`H}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textIota}{<I}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textIota}{<`I}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textIota}{<'I}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{\textIota}{<\char126I}
\DeclareTextCompositeCommand{\accpsili}{LGR}{\textIota}{>I}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{\textIota}{>`I}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{\textIota}{>'I}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{\textIota}{>\char126I}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textIota}{'I}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textIota}{`I}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textOmicron}{<O}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textOmicron}{<`O}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textOmicron}{<'O}
\DeclareTextCompositeCommand{\accpsili}{LGR}{\textOmicron}{>O}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{\textOmicron}{>`O}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{\textOmicron}{>'O}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textOmicron}{'O}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textOmicron}{`O}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textRho}{<R}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textUpsilon}{<U}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textUpsilon}{<`U}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textUpsilon}{<'U}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{\textUpsilon}{<\char126U}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textUpsilon}{'U}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textUpsilon}{`U}

\DeclareTextCompositeCommand{\accdasia}{LGR}{\textOmega}{<W}
\DeclareTextCompositeCommand{\accdasiavaria}{LGR}{\textOmega}{<`W}
\DeclareTextCompositeCommand{\accdasiaoxia}{LGR}{\textOmega}{<'W}
\DeclareTextCompositeCommand{\accdasiaperispomeni}{LGR}{\textOmega}{<\char126W}
\DeclareTextCompositeCommand{\accpsili}{LGR}{\textOmega}{>W}
\DeclareTextCompositeCommand{\accpsilivaria}{LGR}{\textOmega}{>`W}
\DeclareTextCompositeCommand{\accpsilioxia}{LGR}{\textOmega}{>'W}
\DeclareTextCompositeCommand{\accpsiliperispomeni}{LGR}{\textOmega}{>\char126W}
\DeclareTextCompositeCommand{\acctonos}{LGR}{\textOmega}{'W}
\DeclareTextCompositeCommand{\accvaria}{LGR}{\textOmega}{`W}

Except for the dialytika:

\DeclareTextComposite{\accdialytika}{LGR}{\textIota}{219}
\DeclareTextComposite{\accdialytika}{LGR}{\textUpsilon}{223}

UPPERCASE

@uclclist extension

If UPPERCASE (all-caps) is generated with \MakeUppercase, macro substitutions in the \@uclclist apply. This can be used to drop the diacritics (except dialytika).

Based on the babel patch and fontenc.sty.

The definition or an auxiliary, self-restting 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
    \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
    \textvarsigma  \textSigma
    \textsigma     \textSigma
    \textautosigma \textSigma
    \texttau    \textTau
    \textupsilon\textUpsilon
    \textphi    \textPhi
    \textchi    \textChi
    \textpsi    \textPsi
    \textomega  \textOmega
    %
    \textqoppa     \textQoppa
    \textvarstigma \textStigma
    \textstigma    \textStigma
    \textsampi     \textSampi
    \textdigamma   \textDigamma
  }%
  \let\update@uclc@with@greek\relax
}

Expand the uclc list with the just defined macro:

\update@uclc@with@greek

Substitution macros

Drop diacritics

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

(The argument processing ensures that kerning is preserved)

Keep dialytika.

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

\DeclareTextCommand{\LGR@accDialytika}{LGR}{\accdialytika}

\DeclareTextCompositeCommand{\accdialytika}{LGR}{\LGR@hiatus}{\accdialytika}

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}{LGR}[1]{#1}
\DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{>}{\LGR@hiatus}
\DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{<}{\LGR@accdropped}
\DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{A}{\LGR@A@hiatus}
\DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{\textAlpha}{\LGR@A@hiatus}
\DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{E}{\LGR@E@hiatus}
\DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{\textEpsilon}{\LGR@E@hiatus}

TODO: What does the LGR@hiatus command “see” if an unicode literal follows?

% \DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{\symbol{"ce}}{bluff}
% \DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{"cf}{blaff}
% \DeclareTextCompositeCommand{\LGR@hiatus}{LGR}{ι}{blaff}

Look ahead and place a diaeresis on Ι or Υ:

\DeclareTextCommand{\LGR@A@hiatus}{LGR}{%
  \LGR@ifnextchar{I}{A\"}{%
    \LGR@ifnextchar{U}{A\"}{%
      \LGR@ifnextchar{\textIota}{A\"}{%
        \LGR@ifnextchar{\textUpsilon}{A\"}{A}%
      }%
    }%
  }%
}
\DeclareTextCommand{\LGR@E@hiatus}{LGR}{%
  \LGR@ifnextchar{I}{E\"}{%
    \LGR@ifnextchar{U}{E\"}{%
      \LGR@ifnextchar{\textIota}{E\"}{%
        \LGR@ifnextchar{\textUpsilon}{E\"}{E}%
      }%
    }%
  }%
}

As \@ifnextchar gobbles spaces the lookahead macro definition from amsgen.sty is used:

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

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

Unfortunately, the lookahead breaks kerning.

Alternatives tried:

  • CompositeCommands fail at the end of a macro, e.g. \emph{\'a}

    \DeclareTextCommand{\LGR@A@hiatus}{LGR}{A}
    \DeclareTextCommand{\LGR@E@hiatus}{LGR}{E}
    
    \DeclareTextCompositeCommand{\LGR@A@hiatus}{LGR}{}{A}
    \DeclareTextCompositeCommand{\LGR@A@hiatus}{LGR}{I}{A\"I}
    \DeclareTextCompositeCommand{\LGR@A@hiatus}{LGR}{U}{A\"U}
    
  • The glyph No 12 is a special “Upcase Alpha” that in ligature with Y and I adds a diaresis to them. However, it seems that it has only kerning definitions for I and Y (as it is not intended for direct use)

    \DeclareTextComposite{\LGR@hiatus}{LGR}{A}{12}
    

    No such glyph exists for E but this is no problem as E does not require kerning anyway.