summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/babel-greek/babel-greek.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/babel-greek/babel-greek.dtx')
-rw-r--r--Master/texmf-dist/source/generic/babel-greek/babel-greek.dtx1172
1 files changed, 1172 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/babel-greek/babel-greek.dtx b/Master/texmf-dist/source/generic/babel-greek/babel-greek.dtx
new file mode 100644
index 00000000000..aaacb299664
--- /dev/null
+++ b/Master/texmf-dist/source/generic/babel-greek/babel-greek.dtx
@@ -0,0 +1,1172 @@
+% \iffalse meta-comment
+%
+% Copyright 1989-2008 Apostolos Syropoulos, Johannes L. Braams
+% and the authors listed elsewhere in this file. All rights reserved.
+%
+% This file is part of the babel-greek 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 (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is Günter Milde <milde@users.sf.net>.
+%
+% Babel-greek is a contributed package providing support for the Greek
+% language and script via the Babel system (http://www.ctan.org/pkg/babel).
+%
+% The list of derived (unpacked) files belonging to this work
+% and covered by LPPL is defined by the unpacking script (babel-greek.ins)
+% which is part of the package.
+% \fi
+% \CheckSum{1218}
+%
+% \iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{babel-greek.dtx}
+%</dtx>
+%<code>\ProvidesLanguage{greek}
+%\fi
+%\ProvidesFile{babel-greek.dtx}
+ [2013/12/03 v1.8a Greek support for the babel system]
+%\iffalse
+%% File `babel-greek.dtx'
+%% Greek language Definition File
+%% Copyright © 1997, 2005 Apostolos Syropoulos, Johannes Braams
+%% Copyright © 2013 Günter Milde
+%
+%% Please report errors to: Günter Milde <milde@users.sf.net>
+%
+% This file is part of the babel-greek package, it provides the source
+% code for the greek language definition file. The original
+% version of this file was written by Apostolos Syropoulos.
+% It was then enhanced by adding code from kdgreek.sty from David
+% Kastrup <dak@neuroinformatik.ruhr-uni-bochum.de> with his
+% consent.
+%<*filedriver>
+\documentclass{ltxdoc}
+% \usepackage{lmodern}
+\usepackage[utf8]{inputenc}
+\usepackage{hyperref,bookmark}
+\hypersetup{colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=black}
+\newcommand*{\TeXhax}{\TeX hax}
+\newcommand*{\babel}{\textsf{babel}}
+\newcommand*{\langvar}{$\langle \mathit lang \rangle$}
+\newcommand*{\note}[1]{}
+\newcommand*{\Lopt}[1]{\textsf{#1}}
+\newcommand*{\file}[1]{\texttt{#1}}
+\newcommand*{\pkg}[1]{\texttt{#1}}
+\begin{document}
+ \DocInput{babel-greek.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{babel-greek.dtx}
+%
+% \changes{greek-1.0b}{1996/07/10}{Replaced \cs{undefined} with
+% \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
+% with \LaTeX}
+% \changes{greek-1.0b}{1996/10/10}{Moved the definition of
+% \cs{atcatcode} right to the beginning}
+% \changes{greek-1.2}{1997/10/28}{Classical Greek is now a dialect}
+% \changes{greek-1.2b}{1997/11/01}{Classical Greek is now called
+% ``Polutoniko'' Greek. The previous name was at least misleading}
+% \changes{greek-1.2c}{1998/06/26}{This version conforms to version
+% 2.0 of the CB fonts and consequently we added a few new
+% symbol-producing commands}
+% \changes{greek-1.3a}{1998/07/04}{polutoniko is now an attribute to
+% Greek, no longer a `dialect'}
+% \changes{greek-1.4}{2013/05/17}{new maintainer}
+% \changes{greek-1.5}{2013/06/21}{bugfixes,
+% change some symbol macros to aliases,
+% LGR fixes via DeclareTextCommand instead of
+% extrasgreek/noextrasgreek definitions,
+% LICR macros in string definitions,
+% LGR font encoding not used with XeTeX/LuaTeX.}
+% \changes{greek-1.5a}{2013/06/27}{``extraspolutonikogreek'' definition
+% was missing with Xe/LuaTeX.
+% Replaced non-printable literal character with ^^-notation.}
+% \changes{greek-1.6}{2013/07/18}{fix \cs{@roman} and \cs{@Roman}
+% redefinition (thanks to Enrico Gregorio and Claudio Beccari),
+% load LICR macro definitions for Xe/LuaTeX.}
+% \changes{greek-1.7}{2013/09/09}{Do not load euenc.def with XeTeX/LuaTeX.
+% Prevent re-loading lgrenc.def.}
+% \changes{greek-1.7a}{2013/09/13}{bugfix: remove spurious ``fi''.}
+% \changes{greek-1.7b}{2013/10/01}{bugfix: correct upcasing of babel strings
+% with Xe/LuaTeX.}
+% \changes{greek-1.8}{2013/11/27}{Rename to ``babel-greek.dtx''.
+% Restore compatibility with Xe/LuaTeX in 8-bit and Unicode mode.
+% Load ``euenc.def'' if EU1 or EU2 font encoding is detected.
+% New TextCommands ``greekscript'' and ``ensuregreek''.}
+% \changes{greek-1.8a}{2013/12/03}{Set `encodingdefault' in `greekscript'
+% to fix Greek in footnotes etc. with document language Greek.}
+%
+% \title{Babel support for the Greek language}
+% \author{Apostolos Syropoulos, Günter Milde}
+% \maketitle
+%
+% Babel-greek is a contributed package providing support for the Greek
+% language and script via the \href{http://www.ctan.org/pkg/babel}{Babel}
+% system. See the \href{README.html}{README} file for an overwiew of the
+% \pkg{babel-greek} package and links to requirements and related packages.
+%
+% The file \file{\filename}\footnote{The file described in this
+% section has version number \fileversion\ and was last revised on
+% \filedate. The original author is Apostolos Syropoulos
+% (\texttt{apostolo@platon.ee.duth.gr}), code from
+% \file{kdgreek.sty} by David Kastrup
+% \texttt{dak@neuroinformatik.ruhr-uni-bochum.de} was used to
+% enhance the support for typesetting greek texts.} defines all the
+% language definition macros for the Greek language, i.e.,
+% as it used today with only one accent, and the attribute
+% \Lopt{polutoniko} for typesetting greek text with all accents
+% (classical and polytonic Greek).
+%
+% \section{Requirements}
+%
+% Typesetting Greek with Babel requires (of course) the
+% \href{http://www.ctan.org/pkg/babel}{Babel core}, support for Greek font
+% encodings (\href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc})
+% and a font supporting the Greek script.
+%
+% The \href{http://www.ctan.org/pkg/cbgreek-complete}{CB Greek fonts}
+% created by \textsc{Claudio Beccari}\footnote{Apostolos Syropoulos
+% wishes to thank Claudio Beccari for his
+% patience, collaboration, comments and suggestions.}
+% are a complete set of 8-bit TeX fonts matching \textsc{Knuth}'s
+% Computer Modern.
+% The package \pkg{\href{http://www.ctan.org/pkg/cbfonts-fd}{cbfonts-fd}}
+% sets them up as Greek substitute for the Computer Modern and Latin Modern
+% font families.
+% The \pkg{\href{http://www.ctan.org/pkg/substitutefont}{substitutefont}}
+% package can be used to set up Greek supplements for other
+% font families (like Times or Palatino).
+%
+% The \href{http://ctan.org/pkg/lm}{Latin Modern} OpenType font that is the
+% default font for XeTeX/LuaTeX does not support the Greek script. The user
+% needs to set up an alternative font like Linux Libertine or DejaVu with
+% \pkg{\href{http://www.ctan.org/pkg/fontspec}{fontspec}}.
+
+% \section{Usage}
+%
+% To activate Greek support with babel, specify the option
+% \Lopt{greek}, either as global option or as option to the
+% \pkg{babel} package. Remember, that the \emph{last} language
+% option determines the document language, e.g.
+% \begin{verbatim}
+% \usepackage[greek,english]{babel}\end{verbatim}
+% activates support for Greek in an English document while
+% \begin{verbatim}
+% \usepackage[english,greek]{babel}
+% \languageattribute{greek}{polutoniko}\end{verbatim}
+% sets the document language to Greek with ``polytonic''
+% spelling of auto-generated strings.
+%
+% \DescribeMacro\selectlanguage
+% \DescribeMacro\foreignlanguage
+% The Babel core provides two commands to switch the active language:
+% The declaration \verb|\selectlanguage{greek}| switches to the Greek languages.
+% The macro \verb|\foreignlanguage{greek}{<some text>}| sets its second argument
+% in the Greek language. This is intended for short text parts.
+% For details see the \href{http://www.ctan.org/pkg/babel}{Babel} documentation.
+%
+% For backwards compatibility, ``polytonic'' spelling can also be
+% selected via the dummy language \Lopt{polutonikogreek}. In this
+% case, the language name \Lopt{polutonikogreek} must also be
+% used for language switches with |\selectlanguage| or
+% |\foreignlanguage|. However, it is not possible to use
+% both options, \Lopt{greek} and \Lopt{polutonikogreek} in one document.
+%
+% \subsection{Input of Greek text}
+%
+% There are several alternatives for input of Greek text.
+% \begin{itemize}
+% \item With the packages \pkg{inputenc} and
+% \pkg{\href{http://www.ctan.org/pkg/greek-inputenc}{greek-inputenc}},
+% literal Greek characters can be input using the utf-8, iso-8859-7,
+% or macgreek encoding.
+%
+% Literal input using the utf-8 encoding is also the standard input
+% method if compiling with the XeTeX and LuaTeX engines.
+%
+% \item The Latin transliteration defined by the LGR font encoding
+% is explained in the file \file{\href{usage.pdf}{usage.pdf}}.
+%
+% \item The package
+% \pkg{\href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc}}
+% defines \emph{LaTeX internal character representation} (LICR) macros
+% for Greek letters and text symbols. It is required by \pkg{babel-greek},
+% so the |\textAlpha| \ldots |\textomega|
+% macros are a save but cumbersome method to input Greek characters.
+%
+% \item The \pkg{alphabeta} package bundled with
+% \href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc} makes the
+% short macro names |\Alpha| \ldots |\omega| available in text mode, too.
+% \end{itemize}
+% The \href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc} bundle
+% has details and examples for all these input methods.
+%
+% \subsection{Greek vs. Latin script}
+% When switching the language to Greek, \pkg{babel-greek} ensures that the
+% Greek script is supported.
+% With 8-bit LaTeX, Greek text fonts use a non-standard
+% font encoding\footnote{LaTeX font encodings are described in
+% the \emph{LaTeX font guide} (fntguide.pdf).}
+% (LGR) that misses Latin letters. Latin characters in the source are
+% instead interpreted as a transcription for Greek symbols.
+% The following macros allow the use of Greek vs. Latin script without
+% changing the active language.
+% \DescribeMacro\greekscript
+% \DescribeMacro\greektext
+% The \emph{TextCommand}\footnote{For a discussion of TextCommands, see
+% the \emph{LaTeX font guide} (fntguide.pdf), too.}
+% |\greekscript| switches to a font encoding
+% supporting the Greek script.
+% The declaration |\greektext| always switches the font encoding
+% to LGR. Both declarations do not change the active language.
+% \DescribeMacro\latintext
+% |\latintext| (defined by the Babel
+% core) can be used to switch back to an encoding supporting the Latin
+% script.
+%
+% \DescribeMacro\ensuregreek
+% \DescribeMacro\textgreek
+% The macros |\ensuregreek| and |\textgreek| take one argument
+% which is typeset using a font encoding supporting the Greek
+% script. While |\ensuregreek| only switches the
+% font encoding if required, |\textgreek| always uses the LGR font
+% encoding.
+% \DescribeMacro\textlatin
+% The Babel core defines a corresponding |\textlatin| macro.
+%
+% \section{Greek numbering}
+%
+% The Greek alphabetical numbering system, like the Roman one, is
+% still used in everyday life for short enumerations. Unfortunately
+% most Greeks don't know how to write Greek numbers bigger than 20 or
+% 30. Nevertheless, in official editions of the last century and
+% beginning of this century this numbering system was also used for
+% dates and numbers in the range of several thousands. Nowadays
+% this numbering system is primary used by the Eastern Orthodox
+% Church and by certain scholars. It is hence necessary to be able
+% to typeset any Greek numeral up to \hbox{999\,999}. Here are the
+% conventions:
+% \begin{itemize}
+% \item There is no Greek numeral for any number less than or equal
+% to $0$.
+% \item Numbers from $1$ to $9$ are denoted by letters alpha, beta,
+% gamma, delta, epsilon, stigma, zeta, eta, theta, followed by a
+% mark similar to the mathematical symbol ``prime''. (Nowadays
+% instead of letter stigma the digraph sigma tau is used for number
+% $6$. Mainly because the letter stigma is not always available, so
+% people opt to write down the first two letters of its name as an
+% alternative. In our implementation we produce the letter stigma,
+% not the digraph sigma tau.)
+% \item Decades from $10$ to $90$ are denoted by letters iota,
+% kappa, lambda, mu, nu, xi, omikron, pi, qoppa, again followed by
+% the numeric mark. The qoppa used for this purpose has a special
+% zig-zag form, which doesn't resemble at all the original
+% `q'-like qoppa.
+% \item Hundreds from $100$ to $900$ are denoted by letters rho,
+% sigma, tau, upsilon, phi, chi, psi, omega, sampi, followed by the
+% numeric mark.
+% \item Any number between $1$ and $999$ is obtained by a group of
+% letters denoting the hundreds decades and units, followed by a
+% numeric mark.
+% \item To denote thousands one uses the same method, but this time
+% the mark is placed in front of the letter, and under the baseline
+% (it is inverted by 180 degrees). When a group of letters denoting
+% thousands is followed by a group of letters denoting a number
+% under $1000$, then both marks are used.
+% \end{itemize}
+%
+% Using these conventions one obtains numbers up to \hbox{999\,999}.
+% \DescribeMacro{\greeknumeral}
+% The command |\greeknumeral| makes it possible to typeset Greek
+% numerals. There is also an
+% \DescribeMacro{\Greeknumeral}
+% ``uppercase'' version of this macro: |\Greeknumeral|.
+%
+% Another system which was in wide use only in Athens, could
+% express any positive number. This system is implemented in
+% package |athnum|.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once, checking the category code of the
+% \texttt{@} sign, etc.
+% \changes{greek-1.0b}{1996/11/02}{Now use \cs{LdfInit} to perform
+% initial checks}
+% \begin{macrocode}
+%<*code>
+\LdfInit\CurrentOption{captions\CurrentOption}
+% \end{macrocode}
+% When the option \Lopt{polutonikogreek} was used, redefine
+% |\CurrentOption| to prevent problems later on.
+% \begin{macrocode}
+\gdef\CurrentOption{greek}%
+% \end{macrocode}
+%
+% When this file is read as an option, i.e. by the |\usepackage|
+% command, \texttt{greek} could be an `unknown' language in
+% which case we have to make it known. So we check for the
+% existence of |\l@greek| to see whether we have to do
+% something here.
+%
+% \begin{macrocode}
+\ifx\l@greek\@undefined
+ \@nopatterns{greek}
+ \adddialect\l@greek0\fi
+% \end{macrocode}
+%
+% Now we declare the |polutoniko| language attribute.
+% \begin{macrocode}
+\bbl@declare@ttribute{greek}{polutoniko}{%
+% \end{macrocode}
+% This code adds the expansion of |\extraspolutonikogreek| to
+% |\extrasgreek| and changes the definition of |\today| for Greek
+% to produce polytonic month names.
+% \begin{macrocode}
+ \expandafter\addto\expandafter\extrasgreek
+ \expandafter{\extraspolutonikogreek}%
+ \let\captionsgreek\captionspolutonikogreek
+ \let\gr@month\gr@c@month
+% \end{macrocode}
+% We need to take some extra precautions in order not to break
+% older documents which still use the old \Lopt{polutonikogreek}
+% option.
+% \changes{greek-1.3f}{1999/09/29}{Added some code to make older
+% documents work}
+% \changes{greek-1.3g}{2000/02/04}{\cs{noextraspolutonikogreek} was
+% missing}
+% \begin{macrocode}
+ \let\l@polutonikogreek\l@greek
+ \let\datepolutonikogreek\dategreek
+ \let\extraspolutonikogreek\extrasgreek
+ \let\noextraspolutonikogreek\noextrasgreek
+ }
+% \end{macrocode}
+%
+% \section{Font setup}
+%
+% Typesetting Greek texts requires a font with Greek characters:
+%
+% For 8-bit LaTeX, this package uses fonts with the
+% \href{http://www.ctan.org/pkg/greek-fontenc}{LGR font encoding}.
+% With the XeTeX or LuaTeX engines and Unicode fonts, the user must ensure
+% that the selected font contains the required glyphs.
+% LGR-encoded fonts can also be used alongside Unicode fonts with XeTeX/LuaTeX
+% to enable the input of Greek letters via the Latin transcription provided by
+% this font encoding.
+%
+% \changes{greek-1.2a}{1997/10/31}{filename \file{lgrenc.def} now
+% lowercase}
+% \changes{greek-1.4}{2013/05/17}{\file{lgrenc.def} moved to the
+% separate package `greek-fontenc'}
+% \changes{greek-1.5}{2013/06/21}{LGR setup skipped with XeTeX/LuaTeX}
+% \changes{greek-1.7}{2013/09/09}{Do not load euenc.def with XeTeX/LuaTeX
+% (too complicated to get it right).}
+% \changes{greek-1.8}{2013/11/30}{Check for EU1/EU2 font encoding
+% instead of engine}
+%
+% \DescribeMacro\greekfontencoding
+% We test for available font encodings and set |\greekfontencoding|
+% and the internal macro |\bbl@greek@fontencdef| with the name of the
+% font definition file with Greek LICR macros. The fallback is LGR.
+% \begin{macrocode}
+\@ifl@aded{def}{eu1enc}{
+ \providecommand*{\greekfontencoding}{EU1}
+ \providecommand*{\bbl@greek@fontencdef}{greek-euenc}
+ \renewcommand*{\LastDeclaredEncoding}{EU1}
+}{}
+\@ifl@aded{def}{eu2enc}{
+ \providecommand*{\greekfontencoding}{EU2}
+ \providecommand*{\bbl@greek@fontencdef}{greek-euenc}
+ \renewcommand{\LastDeclaredEncoding}{EU2}
+}{}
+\providecommand*{\greekfontencoding}{LGR}
+\providecommand*{\bbl@greek@fontencdef}{lgrenc}
+% \end{macrocode}
+% Ensure that the Greek LICR macros are available:
+% \begin{macrocode}
+\@ifl@aded{def}{\bbl@greek@fontencdef}{}{
+ \InputIfFileExists{\bbl@greek@fontencdef .def}{}{
+ \errhelp{I can't find the \bbl@greek@fontencdef .def file
+ for the Greek fonts}%
+ \errmessage{Font support for the Greek script missing.^^J
+ babel-greek can't typeset Greek.^^J
+ Install the "greek-fontenc" package^^J
+ or use XeTeX/LuaTeX with polyglossia.}%
+ \@@end
+ }
+}
+% \end{macrocode}
+% \begin{macro}{\greekscript}
+% The TextCommand |\greekscript| is a declaration that switches the font
+% encoding to |\greekfontencoding| if the current font encoding does not
+% provide a (typically empty) local variant.
+% \changes{greek-1.8.1}{2013/12/03}{Set `encodingdefault' in `greekscript'
+% to fix Greek in footnotes etc. with document language Greek.
+% TODO: This is from `greektext' but are there side effects?}
+% \begin{macrocode}
+\ProvideTextCommandDefault{\greekscript}{%
+ \fontencoding{\greekfontencoding}\selectfont
+ \def\encodingdefault{\greekfontencoding}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ensuregreek}
+% The TextCommand |\ensuregreek| sets it argument in |\greekfontencoding|
+% if the current font encoding does not provide a (typically empty) local
+% variant.
+% \begin{macrocode}
+\ProvideTextCommandDefault{\ensuregreek}[1]{%
+ \leavevmode{\greekscript #1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\latinencoding}
+% The babel core defines the macro |\latinencoding| and sets it to either
+% OT1 or (if available) T1. We extend the choice with the Unicode encodings
+% EU1 and EU2 so that |\latintext| under XeTeX/LuaTeX does not prevent the
+% use of Unicode fonts.
+% \begin{macrocode}
+\AtBeginDocument{
+ \@ifl@aded{def}{eu1enc}{\xdef\latinencoding{EU1}}{}% XeTeX
+ \@ifl@aded{def}{eu2enc}{\xdef\latinencoding{EU2}}{}% LuaTeX
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Fixes for the LGR font encoding}
+%
+% \begin{macrocode}
+\@ifl@aded{def}{lgrenc}{%
+% \end{macrocode}
+%
+% We redefine a few commands in the LGR encoding to work around problems
+% because LGR is no \emph{standard text encoding} but has Greek letters in
+% the places of Latin ones.
+% \changes{greekfdd-2.2c}{1999/04/05}{Fixed typos, \cs{textrademark}
+% misses a `t', \cs{copyright} should be \cs{textcopyright}}
+% \changes{greekfdd-2.2d}{1999/04/25}{removed redefinition of \cs{\&}}
+% \changes{greek-1.4}{2013/05/17}{moved here from \file{lgrenc.def} because
+% the definitions require the \texttt{\textbackslash latintext} macro
+% defined by Babel.}
+% \changes{greek-1.5}{2013/05/27}{enable use of "textcomp" characters
+% for "textcopyright" and "textregistered" macros}
+% \changes{greek-1.5}{2013/06/15}{\textbackslash & made TextCommand}
+%
+% \begin{macrocode}
+ \ProvideTextCommand{\textcopyright}{LGR}{\textlatin{\textcopyright}}
+ \ProvideTextCommand{\textregistered}{LGR}{\textlatin{\textregistered}}
+ \ProvideTextCommand{\texttrademark}{LGR}{\textlatin{\texttrademark}}
+ \let\ltx@amp\&
+ \DeclareTextCommandDefault{\&}{\ltx@amp}
+ \DeclareTextCommand{\&}{LGR}{\textlatin{\ltx@amp}}
+ \ProvideTextCommand{\SS}{LGR}{\textlatin{\SS}}
+% \end{macrocode}
+%
+% \begin{macro}{\greek@roman}
+% \begin{macro}{\greek@Roman}
+% \changes{greek-1.2e}{1999/04/16}{Moved redefinition of \cs{@roman}
+% back to the language specific file}
+% \changes{greek-1.3d}{1999/08/27}{\cs{@roman} and \cs{@Roman} need to
+% be added to \cs{extraspolutonikogreek}}
+% \changes{greek-1.3e}{1999/09/24}{\cs{@roman} and \cs{@Roman} need
+% \emph{not} be in \cs{extraspolutonikogreek} when they are already
+% in \cs{extrasgreek}}
+% \changes{greek-1.5}{2013/06/15}{\cs{@roman} and \cs{@Roman} as TextCommands
+% (BUG: this extended the expansion problem to all languages!)}
+% \changes{greek-1.6}{2013/07/19}{apply a patch by Enrico Gregorio.
+% Thanks to Claudio Beccari for testing and reporting.}
+%
+% To prevent roman numerals being typeset in greek letters we need
+% to adopt the internal \LaTeX\ commands |\@roman| and
+% |\@Roman|. \emph{Up to version 1.5, the definition caused errors where
+% |\@roman| ends up in a situation where the argument needs to be expanded
+% (e.g. Roman page numbers in the ToC).}
+% \begin{macrocode}
+ \def\@roman#1{\expandafter\textlatin\expandafter{\romannumeral#1}}
+ \def\@Roman#1{\expandafter\textlatin\expandafter{%
+ \expandafter\@slowromancap\romannumeral#1@}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now we define two commands that switch
+% to the LGR font encoding. The Babel core defines corresponding commands
+% to switch to a Latin font encoding.
+%
+% \begin{macro}{\greektext}
+% The declaration |\greektext| switches to LGR.
+% For shorter pieces of text the |\textgreek| macro should be
+% used.
+% \begin{macrocode}
+ \DeclareRobustCommand{\greektext}{%
+ \fontencoding{LGR}\selectfont
+ \def\encodingdefault{LGR}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textgreek}
+% This command takes an argument which is then typeset using the
+% LGR font encoding. In order to avoid many encoding switches
+% it operates in a local scope.
+% \changes{greek-1.0b}{1996/09/23}{Added a level of braces to keep
+% encoding change local}
+% \changes{greek-1.3k}{2003/03/19}{Added \cs{leavevmode} as was done
+% with \cs{latintext}}
+% \begin{macrocode}
+ \DeclareRobustCommand{\textgreek}[1]{\leavevmode{\greektext #1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textol}
+% The \href{http://www.ctan.org/pkg/cbgreek-complete}{CB Greek fonts}
+% contain an outline family. In order to make it available,
+% we define the command |\textol|. (This font-specific macro does not
+% fit in a language defintion file is and only kept for backwards
+% compatibility.)
+% \begin{macrocode}
+ \def\outlfamily{\usefont{LGR}{cmro}{m}{n}}
+ \DeclareTextFontCommand{\textol}{\outlfamily}
+}{} % End of LGR fixes.
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Definitions for the Greek language}
+%
+% The next step consists in defining commands to switch to (and
+% from) the Greek language.
+%
+% \begin{macro}{\greekhyphenmins}
+% This macro is used to store the correct values of the hyphenation
+% parameters |\lefthyphenmin| and |\righthyphenmin|.
+% \changes{greek-1.3h}{2000/09/22}{Now use \cs{providehyphenmins} to
+% provide a default value}
+% \begin{macrocode}
+% Yannis Haralambous has suggested this value
+\providehyphenmins{\CurrentOption}{\@ne\@ne}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{greek-1.1e}{1997/10/12}{Added caption name for proof}
+% \changes{greek-1.3d}{1999/08/28}{Fixed typo, \texttt{bl'epe ep'ishc}
+% instead of \texttt{bl'pe ep'ishc}}
+%
+% \begin{macro}{\captionsgreek}
+% The macro |\captionsgreek| defines all strings used in the
+% four standard document classes provided with \LaTeX.
+% \changes{greek-1.3h}{2000/09/20}{Added \cs{glossaryname}}
+% \changes{greek-1.3i}{2000/10/02}{The final sigma in all names appears
+% as `s' instead of `c'.}
+% \begin{macrocode}
+\addto\captionsgreek{%
+ \def\prefacename{\textPi\textrho\acctonos\textomicron\textlambda
+ \textomicron\textgamma\textomicron\textfinalsigma}%
+ \def\refname{\textAlpha\textnu\textalpha
+ \textphi\textomicron\textrho\acctonos\textepsilon\textfinalsigma}%
+ \def\abstractname{\textPi\textepsilon\textrho\acctonos\textiota
+ \textlambda\texteta\textpsi\texteta}%
+ \def\bibname{\textBeta\textiota\textbeta\textlambda\textiota\textomicron
+ \textgamma\textrho\textalpha\textphi\acctonos\textiota\textalpha}%
+ \def\chaptername{\textKappa\textepsilon\textphi\acctonos\textalpha
+ \textlambda\textalpha\textiota\textomicron}%
+ \def\appendixname{\textPi\textalpha\textrho\acctonos\textalpha\textrho
+ \texttau\texteta\textmu\textalpha}%
+ \def\contentsname{\textPi\textepsilon\textrho\textiota
+ \textepsilon\textchi\acctonos\textomicron\textmu\textepsilon
+ \textnu\textalpha}%
+ \def\listfigurename{\textKappa\textalpha\texttau\acctonos\textalpha
+ \textlambda\textomicron\textgamma\textomicron\textfinalsigma{}
+ \textSigma\textchi\texteta\textmu\acctonos\textalpha\texttau
+ \textomega\textnu}%
+ \def\listtablename{\textKappa\textalpha\texttau\acctonos\textalpha
+ \textlambda\textomicron\textgamma\textomicron\textfinalsigma{}
+ \textPi\textiota\textnu\acctonos\textalpha\textkappa\textomega\textnu}%
+ \def\indexname{\textEpsilon\textupsilon\textrho\textepsilon
+ \texttau\acctonos\texteta\textrho\textiota\textomicron}%
+ \def\figurename{\textSigma\textchi\acctonos\texteta\textmu\textalpha}%
+ \def\tablename{\textPi\acctonos\textiota\textnu\textalpha
+ \textkappa\textalpha\textfinalsigma}%
+ \def\partname{\textMu\acctonos\textepsilon\textrho\textomicron
+ \textfinalsigma}%
+ \def\enclname{\textSigma\textupsilon\textnu\texteta\textmu
+ \textmu\acctonos\textepsilon\textnu\textalpha}%
+ \def\ccname{\textKappa\textomicron\textiota\textnu\textomicron
+ \textpi\textomicron\acctonos\textiota\texteta\textsigma\texteta}%
+ \def\headtoname{\textPi\textrho\textomicron\textfinalsigma}%
+ \def\pagename{\textSigma\textepsilon\textlambda\acctonos\textiota
+ \textdelta\textalpha}%
+ \def\seename{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon}%
+ \def\alsoname{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon{}
+ \textepsilon\textpi\acctonos\textiota\textsigma\texteta\textfinalsigma}%
+ \def\proofname{\textAlpha\textpi\acctonos\textomicron
+ \textdelta\textepsilon\textiota\textxi\texteta}%
+ \def\glossaryname{\textGamma\textlambda\textomega\textsigma
+ \textsigma\acctonos\textalpha\textrho\textiota}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \changes{greek-1.2}{1997/10/28}{Added caption names for
+% \cs{polutonikogreek}}
+% \changes{greek-1.3d}{1999/08/28}{Fixed typo, \texttt{bl'epe >ep'ishc}
+% instead of \texttt{bl'pe >ep'ishc}}
+%
+% \begin{macro}{\captionspolutonikogreek}
+% For texts written in the $\pi o\lambda\upsilon\tau
+% o\nu\kappa\acute{o}$ (polytonic greek) the translations are
+% the same as above, but some words are spelled differently. For
+% now we just add extra definitions to |\captionsgreek| in order to
+% override the earlier definitions.
+% \begin{macrocode}
+\let\captionspolutonikogreek\captionsgreek
+\addto\captionspolutonikogreek{%
+ \def\refname{\>\textAlpha\textnu\textalpha
+ \textphi\textomicron\textrho\accvaria\textepsilon\textfinalsigma}%
+ \def\indexname{\textEpsilon\<\textupsilon\textrho\textepsilon
+ \texttau\acctonos\texteta\textrho\textiota\textomicron}%
+ \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu\textalpha}%
+ \def\headtoname{\textPi\textrho\accvaria\textomicron\textfinalsigma}%
+ \def\alsoname{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon{}
+ \>\textepsilon\textpi\acctonos\textiota\textsigma\texteta\textfinalsigma}%
+ \def\proofname{\>\textAlpha\textpi\acctonos\textomicron
+ \textdelta\textepsilon\textiota\textxi\texteta}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gr@month}
+% \changes{greek-1.1e}{1997/10/12}{Macro added}
+% \begin{macro}{\dategreek}
+% The macro |\dategreek| redefines the command |\today| to
+% produce greek dates. The name of the month is now produced
+% by the macro |\gr@month| since it is needed in the definition
+% of the macro |\Grtoday|.
+% \changes{greek-1.1a}{1997/03/03}{Fixed typo, \texttt{Oktwbr'iou}
+% instead of \texttt{Oktobr'iou}}
+% \changes{greek-1.1d}{1997/10/12}{Macro \cs{gr@month} now produces
+% the name of the month}
+% \changes{greek-1.2a}{1997/10/31}{Use \cs{edef} to define \cs{today}}
+% \changes{greek-1.2b}{1998/03/28}{use \cs{def} instead of \cs{edef}}
+% \begin{macrocode}
+\def\gr@month{%
+ \ifcase\month\or
+ \textIota\textalpha\textnu\textomicron\textupsilon\textalpha
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textPhi\textepsilon\textbeta\textrho\textomicron\textupsilon
+ \textalpha\textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textMu\textalpha\textrho\texttau\acctonos\textiota\textomicron\textupsilon
+ \or \textAlpha\textpi\textrho\textiota\textlambda\acctonos\textiota
+ \textomicron\textupsilon \or
+ \textMu\textalpha\'"\textiota\textomicron\textupsilon \or
+ \textIota\textomicron\textupsilon\textnu\acctonos\textiota
+ \textomicron\textupsilon \or
+ \textIota\textomicron\textupsilon\textlambda\acctonos\textiota
+ \textomicron\textupsilon \or
+ \textAlpha\textupsilon\textgamma\textomicron\acctonos\textupsilon
+ \textsigma\texttau\textomicron\textupsilon \or
+ \textSigma\textepsilon\textpi\texttau\textepsilon\textmu
+ \textbeta\textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textOmicron\textkappa\texttau\textomega\textbeta
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textNu\textomicron\textepsilon\textmu\textbeta
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textDelta\textepsilon\textkappa\textepsilon\textmu\textbeta
+ \textrho\acctonos\textiota\textomicron\textupsilon
+ \fi
+}
+\def\dategreek{%
+ \def\today{\number\day \space \gr@month\space \number\year}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gr@c@greek}
+% \changes{greek-1.2}{1997/10/28}{Added macro \cs{gr@cl@month}}
+% \changes{greek-1.2}{1997/10/28}{Added macro
+% \cs{datepolutonikogreek}}
+% \changes{greek-1.3a}{1997/10/28}{removed macro
+% \cs{datepolutonikogreek}}
+% \begin{macrocode}
+\def\gr@c@month{%
+ \ifcase\month\or
+ \>\textIota\textalpha\textnu\textomicron\textupsilon\textalpha
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textPhi\textepsilon\textbeta\textrho\textomicron\textupsilon
+ \textalpha\textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textMu\textalpha\textrho\texttau\acctonos\textiota\textomicron
+ \textupsilon \or
+ \>\textAlpha\textpi\textrho\textiota\textlambda
+ \acctonos\textiota\textomicron\textupsilon \or
+ \textMu\textalpha\"'\textiota\textomicron\textupsilon \or
+ \>\textIota\textomicron\textupsilon\textnu
+ \acctonos\textiota\textomicron\textupsilon \or
+ \>\textIota\textomicron\textupsilon\textlambda
+ \acctonos\textiota\textomicron\textupsilon \or
+ \textAlpha\>\textupsilon\textgamma\textomicron\acctonos
+ \textupsilon\textsigma\texttau\textomicron\textupsilon \or
+ \textSigma\textepsilon\textpi\texttau\textepsilon\textmu\textbeta
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \>\textOmicron\textkappa\texttau\textomega\textbeta
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textNu\textomicron\textepsilon\textmu\textbeta
+ \textrho\acctonos\textiota\textomicron\textupsilon \or
+ \textDelta\textepsilon\textkappa\textepsilon\textmu
+ \textbeta\textrho\acctonos\textiota\textomicron\textupsilon
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Grtoday}
+% \changes{greek-1.1}{1996/10/28}{Added macro \cs{Grtoday}}
+% The macro |\Grtoday| produces the current date, only that the
+% month and the day are shown as greek numerals instead of arabic
+% as it is usually the case.
+% \begin{macrocode}
+\def\Grtoday{%
+ \expandafter\Greeknumeral\expandafter{\the\day}\space
+ \gr@c@month \space
+ \expandafter\Greeknumeral\expandafter{\the\year}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\extrasgreek}
+% \begin{macro}{\noextrasgreek}
+% The macro |\extrasgreek| will perform all the extra definitions
+% needed for the Greek language. The macro |\noextrasgreek| is used
+% to cancel the actions of |\extrasgreek|. For the moment these
+% macros switch the fontencoding (with 8-bit TeX) and the definition of
+% the internal macros |\@alph| and |\@Alph| because in Greek we do use
+% the Greek numerals.
+% \changes{greek-1.5}{2013/06/21}{LGR not used with XeTeX/LuaTeX.}
+% \changes{greek-1.8}{2013/11/27}{use font-encoding specific TextCommands.
+% Use EU1 or EU2 for Latin script if available}
+% \begin{macrocode}
+\addto\extrasgreek{\greekscript}
+\addto\noextrasgreek{\latintext}
+% \addto\noextrasgreek{\RestoreFontEncoding}
+% \end{macrocode}
+%
+% \begin{macro}{\gr@ill@value}
+% When the argument of |\greeknumeral| has a value outside of the
+% acceptable bounds ($0 < x < 999999$) a warning will be issued
+% (and nothing will be printed).
+% \begin{macrocode}
+\def\gr@ill@value#1{%
+ \PackageWarningNoLine{babel}{Illegal value (#1) for greeknumeral}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\anw@true}
+% \begin{macro}{\anw@false}
+% \begin{macro}{\anw@print}
+% When a a large number with three \emph{trailing} zero's is to be
+% printed those zeros \emph{and} the numeric mark need to be
+% discarded. As each `digit' is processed by a separate macro
+% \emph{and} because the processing needs to be expandable we need
+% some helper macros that help remember to \emph{not} print the
+% numeric mark (|\anwtonos|).
+%
+% The command |\anw@false| switches the printing of the numeric
+% mark off by making |\anw@print| expand to nothing. The command
+% |\anw@true| (re)enables the printing of the numeric marc. These
+% macro's need to be robust in order to prevent improper expansion
+% during writing to files or during |\uppercase|.
+% \begin{macrocode}
+\DeclareRobustCommand\anw@false{%
+ \DeclareRobustCommand\anw@print{}}
+\DeclareRobustCommand\anw@true{%
+ \DeclareRobustCommand\anw@print{\textdexiakeraia}} % \anwtonos
+\anw@true
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\greeknumeral}
+% The command |\greeknumeral| needs to be \emph{fully} expandable
+% in order to get the right information in auxiliary
+% files. Therefore we use a big |\if|-construction to check the
+% value of the argument and start the parsing at the right level.
+% \begin{macrocode}
+\def\greeknumeral#1{%
+% \end{macrocode}
+% If the value is negative or zero nothing is printed and a warning
+% is issued.
+% \changes{greek-1.3b}{1999/04/03}{Added \cs{expandafter} and
+% \cs{number} (PR3000) in order to make a counter an acceptable
+% argument}
+% \begin{macrocode}
+ \ifnum#1<\@ne\space\gr@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\gr@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\gr@num@ii\number#1%
+ \else
+% \end{macrocode}
+% We use the available shorthands for 1.000 (|\@m|) and 10.000
+% (|\@M|) to save a few tokens.
+% \begin{macrocode}
+ \ifnum#1<\@m\expandafter\gr@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\gr@num@iv\number#1%
+ \else
+ \ifnum#1<100000\expandafter\gr@num@v\number#1%
+ \else
+ \ifnum#1<1000000\expandafter\gr@num@vi\number#1%
+ \else
+% \end{macrocode}
+% If the value is too large, nothing is printed and a warning
+% is issued.
+% \begin{macrocode}
+ \space\gr@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Greeknumeral}
+% The command |\Greeknumeral| prints uppercase greek numerals.
+% The parsing is performed by the macro |\greeknumeral|.
+% \begin{macrocode}
+\def\Greeknumeral#1{%
+ \expandafter\MakeUppercase\expandafter{\greeknumeral{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\greek@alph}
+% \begin{macro}{\greek@Alph}
+% In the previous release of this language definition the
+% commands |\greek@aplh| and |\greek@Alph| were kept just for
+% reasons of compatibility. Here again they become meaningful macros.
+% They are definited in a way that even page numbering with greek
+% numerals is possible. Since the macros |\@alph| and |\@Alph| will
+% lose their original meaning while the Greek option is active, we
+% must save their original value.
+% macros |\@alph|
+% \begin{macrocode}
+\let\latin@alph\@alph
+\let\latin@Alph\@Alph
+% \end{macrocode}
+% Then we define the Greek versions; the additional |\expandafter|s
+% are needed in order to make sure the table of contents will be
+% correct, e.g., when we have appendixes.
+% \begin{macrocode}
+\def\greek@alph#1{\expandafter\greeknumeral\expandafter{\the#1}}
+\def\greek@Alph#1{\expandafter\Greeknumeral\expandafter{\the#1}}
+% \end{macrocode}
+%
+% Now we can set up the switching.
+% \changes{greek-1.1a}{1997/03/03}{removed two superfluous @'s which
+% made \cs{@alph} undefined}
+% \begin{macrocode}
+\addto\extrasgreek{%
+ \let\@alph\greek@alph
+ \let\@Alph\greek@Alph}
+\addto\noextrasgreek{%
+ \let\@alph\latin@alph
+ \let\@Alph\latin@Alph}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% What is left now is the definition of a set of macros to produce
+% the various digits.
+% \begin{macro}{\gr@num@i}
+% \begin{macro}{\gr@num@ii}
+% \begin{macro}{\gr@num@iii}
+% \changes{greek-1.2b}{1997/11/13}{No longer use \cs{\let} in the
+% expansion of the \cs{gr@num@x} macros as they ned to be
+% expandable}
+% As there is no representation for $0$ in this system the zeros
+% are simply discarded. When we have a large number with three
+% \emph{trailing} zero's also the numeric mark is discarded.
+% Therefore these macros need to pass the information to each other
+% about the (non-)translation of a zero.
+% \begin{macrocode}
+\def\gr@num@i#1{%
+ \ifcase#1\or \textalpha\or \textbeta\or \textgamma\or \textdelta\or
+ \textepsilon\or \textstigma\or \textzeta\or \texteta\or \texttheta\fi
+ \ifnum#1=\z@\else\anw@true\fi\anw@print}
+\def\gr@num@ii#1{%
+ \ifcase#1\or \textiota\or \textkappa\or \textlambda\or \textmu\or
+ \textnu\or \textxi\or \textomicron\or \textpi\or \textqoppa\fi
+ \ifnum#1=\z@\else\anw@true\fi\gr@num@i}
+\def\gr@num@iii#1{%
+ \ifcase#1\or \textrho\or \textsigma\or \texttau\or \textupsilon\or
+ \textphi\or \textchi\or \textpsi\or \textomega\or \textsampi\fi
+ \ifnum#1=\z@\anw@false\else\anw@true\fi\gr@num@ii}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\gr@num@iv}
+% \begin{macro}{\gr@num@v}
+% \begin{macro}{\gr@num@vi}
+% The first three `digits' always have the numeric mark, except
+% when one is discarded because it's value is zero.
+% \begin{macrocode}
+\def\gr@num@iv#1{%
+ \ifnum#1=\z@\else\textaristerikeraia\fi
+ \ifcase#1\or \textalpha\or \textbeta\or \textgamma\or \textdelta\or
+ \textepsilon\or \stigma\or \textzeta\or \texteta\or \texttheta\fi
+ \gr@num@iii}
+\def\gr@num@v#1{%
+ \ifnum#1=\z@\else\textaristerikeraia\fi
+ \ifcase#1\or \textiota\or \textkappa\or \textlambda\or \textmu\or
+ \textnu\or \textxi\or \textomicron\or \textpi\or \textqoppa\fi
+ \gr@num@iv}
+\def\gr@num@vi#1{%
+ \textaristerikeraia
+ \ifcase#1\or \textrho\or \textsigma\or \texttau\or \textupsilon\or
+ \textphi\or \textchi\or \textpsi\or \textomega\or \textsampi\fi
+ \gr@num@v}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Character codes}
+%
+% Greek letters drop diacritics (eccept dialytika and sub-iota) in
+% UPPERCASE. This is not cared for by the Unicode standard.
+% The file \file{xgreek-fixes.def} from \pkg{polyglossia}
+% contains the required |\lccode| and |\uccode| corrections from the
+% \pkg{xgreek} package by Apostolos Syropoulos.
+% \changes{greek-1.5}{2013/06/21}{Support XeTeX/LuaTeX.}
+% \begin{macrocode}
+\@ifl@aded{def}{greek-euenc}{
+ \InputIfFileExists{xgreek-fixes.def}{}{\PackageWarningNoLine{babel}{%
+ Can't find the file "xgreek-fixes.def".\MessageBreak
+ For correct up/down-casing of Greek text,\MessageBreak
+ install the "polyglossia" package}%
+ }
+ \addto\extraspolutonikogreek{} % prevent command missing error.
+}{}
+% \end{macrocode}
+%
+% The LGR encoded fonts that are used to typeset Greek with 8-bit TeX
+% define ligatures for characters with diacritics. In order for this to
+% work, some characters need to be considered as letters. These
+% characters are |<|, |>|, |~|, |`|, |'|, |"| and
+% \verb=|=. Therefore their |\lccode| is changed when Greek is in
+% effect. In order to let |\uppercase| give correct results, the
+% |\uccode| of these characters is set to a non-existing character
+% to make them disappear. Of course not all characters are needed
+% when typesetting ``modern'' $\mu o\nu o\tau o\nu
+% \iota\kappa\acute{o}$. In that case we only need the |'| and |"|
+% symbols which are treated in the proper way.
+%
+% \begin{macro}{\greek@tilde}
+% \changes{greek-1.0c}{1997/02/19}{Added command}
+% The Greek script uses a number of characters with more
+% than one accent. In LGR encoded fonts combined diacritics can be
+% obtained using Knuth's ligature mechanism (see usage.pdf).
+% Characters we need to have ligatures with are the tilde, the
+% acute and grave accent characters, the rough and smooth breathings,
+% the subscript, and the double quote character.
+% In text input the |~| is normally used to produce an
+% unbreakable space.
+% \changes{greek-1.3k}{2003/04/10}{Make sure the character `!' is not
+% active during the definition of \cs{greek@tilde}}
+% \changes{greek-1.4}{2013/05/17}{do not re-define the tilde accent macro:
+% it works as expected with \file{lgrenc.def} from \pkg{greek-fontenc}.}
+% \begin{macrocode}
+\@ifl@aded{def}{lgrenc}{%
+ \begingroup
+ \@ifundefined{active@char\string!}{}{\catcode`!=12\relax}
+ \catcode`\~=12
+ \lccode`\!=`\~
+ \lowercase{\def\x{\endgroup
+ \def\greek@tilde{!}}\x}
+% \end{macrocode}
+% \end{macro}
+% In order to get correct hyphenation we need to set the lower case
+% code of a number of characters. The `v' character has a special
+% usage for the |cb| fonts: in fact this ligature mechanism detects
+% the end of a word and assures that a final sigma is typeset with
+% the proper sign wich is different from that of an initial or
+% medial sigma; the `v 'after an \textit{isolated} sigma fools
+% the ligature mechanism in order to typeset $\sigma$ in place of
+% $\varsigma$. Because of this we make sure its lowercase code is
+% not changed. For ``modern'' greek we have to deal only with |'|
+% and |"| and so things are easy.
+% \changes{greek-1.1c}{1997/04/30}{fixed two typos}
+% \changes{greek-1.1e}{1997/10/12}{Added lowercase code for v}
+% \changes{greek-1.2}{1997/10/28}{Definitions for ``modern'' Greek are
+% now the definitions of ``Polutoniko'' Greek}
+% \changes{greek-1.2}{1997/10/28}{Added lowercase codes for ``modern''
+% greek}
+% \changes{greek-1.3e}{1999/09/24}{\cs{extrasgreek} and
+% \cs{extraspolutonikogreek} should be complementary}
+% \begin{macrocode}
+ \addto\extrasgreek{%
+ \babel@savevariable{\lccode`v}\lccode`v=`v%
+ \babel@savevariable{\lccode`\'}\lccode`\'=`\'%
+ \babel@savevariable{\lccode`\"}\lccode`\"=`\"}
+ \addto\extraspolutonikogreek{%
+ \babel@savevariable{\lccode`\<}\lccode`\<=`\<%
+ \babel@savevariable{\lccode`\>}\lccode`\>=`\>%
+ \babel@savevariable{\lccode`\~}\lccode`\~=`\~%
+ \babel@savevariable{\lccode`\|}\lccode`\|=`\|%
+ \babel@savevariable{\lccode`\`}\lccode`\`=`\`}
+% \end{macrocode}
+% And in order to get rid of all accents and breathings when a
+% string is |\uppercase|d we also change a number of uppercase
+% codes.
+% \changes{greek-1.1b}{1997/03/06}{Added setting of \cs{uccode}s
+% (after \file{kdgreek.sty})}
+% \changes{greek-1.1e}{1997/10/12}{Added uppercase code for special
+% letter ``v''. Uppercase code for accents is now \texttt{9f},
+% instead of \texttt{ff}}
+% \changes{greek-1.2}{1997/10/28}{Added uppercase codes for ``modern''
+% Greek. The old codes are now for ``Polutoniko'' Greek}
+% \changes{greek-1.3e}{1999/09/24}{\cs{extrasgreek} and
+% \cs{extraspolutonikogreek} should be complementary}
+% {\catcode`|=12\relax\gdef\indexbar{\cs{|}}}
+% \changes{greek-1.3g}{1999/11/17}{uc code of \indexbar{} is now just
+% \indexbar{} to reflect recent changes in the cb fonts}
+% \changes{greek-1.3i}{2000/10/02}{uc code of `v' is switched to V
+% so that mixed text appears correctly in headers.}
+% \changes{greek-1.3j}{2001/02/03}{Because other languages might
+% make the caret active, we can't use the double caret notation
+% here}
+% \begin{macrocode}
+ \addto\extrasgreek{%
+ \babel@savevariable{\uccode`\"}\uccode`\"=`\"%
+ \babel@savevariable{\uccode`\'}\uccode`\'=159} %% 159 == ^^9f
+ \addto\extraspolutonikogreek{%
+ \babel@savevariable{\uccode`\~}\uccode`\~=159%
+ \babel@savevariable{\uccode`\>}\uccode`\>=159%
+ \babel@savevariable{\uccode`\<}\uccode`\<=159%
+ \babel@savevariable{\uccode`\|}\uccode`\|=`\|%
+ \babel@savevariable{\uccode`\`}\uccode`\`=159}
+% \end{macrocode}
+% For this to work we make the character |^^9f| a shorthand that
+% expands to nothing. In order for this to work we need to make a
+% character look like |^^9f| in \TeX's eyes. The trick is to have
+% another character and assign it a different lowercase code. The
+% execute the macros needed in a |\lowercase| environment. Usually
+% the tilde |~| character is used for such purposes. Before we do
+% this we save it's original lowercase code to restore it once
+% we're done.
+% \changes{greek-1.1b}{1997/03/06}{Added shorthand for \cs{char255}}
+% \changes{greek-1.1e}{1997/10/12}{Shorthand is changed. Active
+% character is now \cs{char159}}
+% \changes{greek-1.2a}{1997/10/31}{Need shorthand to exist for
+% ``monotoniko'' Greek, not ``polutoniko'' Greek}
+% \changes{greek-1.3j}{2001/02/03}{Use the tilde as an alias for
+% character 159}
+% \begin{macrocode}
+ \@tempcnta=\lccode`\~
+ \lccode`\~=159
+ \lowercase{%
+ \initiate@active@char{~}%
+ \declare@shorthand{greek}{~}{}}
+ \lccode`\~=\@tempcnta
+% \end{macrocode}
+% Add composite commands, so that the dialytika is kept or put on the
+% following character of a diphthong with |\MakeUppercase|
+% (see lgrdef.enc from the the greek-fontenc package for details).
+% \changes{greek-1.4}{2013/05/17}{Add TextCompositeCommands for
+% ``uppercase diacritics''.}
+% \changes{greek-1.5}{2013/05/27}{Bugfix: @hiatus->LGR@hiatus}
+% \changes{greek-1.5a}{2013/07/02}{Replaced non-printable literal character
+% with ^^-notation (thanks to Heiko Oberdiek for the hint).}
+% \begin{macrocode}
+ \DeclareTextCompositeCommand{\"}{LGR}{^^9F}{\accdialytika}
+ \DeclareTextCompositeCommand{\'}{LGR}{^^9F}{\LGR@hiatus}
+ \DeclareTextCompositeCommand{\`}{LGR}{^^9F}{\LGR@hiatus}
+ \DeclareTextCompositeCommand{\<}{LGR}{^^9F}{\LGR@hiatus}
+ \DeclareTextCompositeCommand{\>}{LGR}{^^9F}{\LGR@hiatus}
+% \end{macrocode}
+%
+% We can also make the tilde character itself expand to a tilde with
+% category code 12 to make the typing of texts easier.
+% \changes{greek-1.1b}{1997/03/06}{Made tilde expand to a tilde with
+% \cs{catcode 12}.}
+% \changes{greek-1.5a}{2013/06/27}{provide ``extraspolutonikogreek'' also
+% for Xe/LuaTeX.}
+% \begin{macrocode}
+ \addto\extraspolutonikogreek{\languageshorthands{greek}}%
+ \declare@shorthand{greek}{~}{\greek@tilde}
+}{} % End of LGR-specific code.
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{symbol name aliases}
+% For backwards compatibility, we keep aliases for a few symbols.
+% \changes{greek-1.1c}{1997/03/10}{Added a couple of symbols, needed
+% for \cs{greeknumeral}}
+% \changes{greek-1.1e}{1997/10/12}{Most symbols are removed and are
+% now defined in package grsymb}
+% \changes{greek-1.2c}{1998/06/26}{Package grsymb has been eliminated
+% because the CB fonts v2.0 do not inlcude certain symbols and so
+% the remaining symbol definitions have been moved here}
+% \changes{greek-1.5}{2013/06/11}{change symbol macros to aliases}
+% \begin{macrocode}
+\providecommand*{\anwtonos}{\textdexiakeraia}
+\providecommand*{\katwtonos}{\textaristerikeraia}
+\providecommand*{\qoppa}{\textqoppa}
+\providecommand*{\stigma}{\textstigma}
+\providecommand*{\sampi}{\textsampi}
+\providecommand*{\Digamma}{\textDigamma}
+\providecommand*{\ddigamma}{\textdigamma}
+\providecommand*{\vardigamma}{\textvardigamma}
+\providecommand*{\euro}{\texteuro}
+\providecommand*{\permill}{\textperthousand}
+% \end{macrocode}
+%
+% \changes{greek-1.3l}{2004/02/19}{Commented these lines out as this
+% change has made it into \LaTeX{} itself.}
+% \changes{greek-1.8}{2013/11/27}{Remove the redefintion of fnum@figure
+% and fnum@table.}
+%
+% The macro |\ldf@finish| takes care of looking for a
+% configuration file, setting the main language to be switched on
+% at |\begin{document}| and resetting the category code of
+% \texttt{@} to its original value.
+% \changes{greek-1.0b}{1996/11/02}{Now use \cs{ldf@finish} to wrap up}
+% \begin{macrocode}
+\ldf@finish{\CurrentOption}
+%</code>
+% \end{macrocode}
+%
+% \Finale
+%\endinput
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%