summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/babel/greek.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/babel/greek.dtx')
-rw-r--r--Master/texmf-dist/source/generic/babel/greek.dtx864
1 files changed, 864 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/babel/greek.dtx b/Master/texmf-dist/source/generic/babel/greek.dtx
new file mode 100644
index 00000000000..4f198cdee56
--- /dev/null
+++ b/Master/texmf-dist/source/generic/babel/greek.dtx
@@ -0,0 +1,864 @@
+% \iffalse meta-comment
+%
+% Copyright 1989-2005 Johannes L. Braams and any individual authors
+% listed elsewhere in this file. All rights reserved.
+%
+% This file is part of the Babel system.
+% --------------------------------------
+%
+% 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 Johannes Braams.
+%
+% The list of all files belonging to the Babel system is
+% given in the file `manifest.bbl. See also `legal.bbl' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+% \fi
+% \CheckSum{636}
+%
+% \iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{greek.dtx}
+%</dtx>
+%<code>\ProvidesLanguage{greek}
+%\fi
+%\ProvidesFile{greek.dtx}
+ [2005/03/30 v1.3l Greek support from the babel system]
+%\iffalse
+%% File `greek.dtx'
+%% Babel package for LaTeX version 2e
+%% Copyright (C) 1989 -- 2005
+%% by Johannes Braams, TeXniek
+%
+%% Greek language Definition File
+%% Copyright (C) 1997, 2005
+%% by Apostolos Syropoulos
+%% Johannes Braams, TeXniek
+%
+%% Please report errors to: Apostolos Syropoulos
+%% apostolo at platon.ee.duth.gr or
+%% apostolo at obelix.ee.duth.gr
+%% (or J.L. Braams <babel at braams.cistron.nl)
+%
+% This file is part of the babel system, 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}
+\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{greek.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{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'}
+%
+% \section{The Greek language}
+%
+% 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
+% $\pi o\lambda\upsilon\tau o\nu\kappa\acute{o}$ (``Polutoniko'')
+% for typesetting greek text with all accents. This separation
+% arose out of the need to simplify things, for only very few
+% people will be really interested to typeset polytonic Greek
+% text.
+%
+% \DescribeMacro\greektext
+% \DescribeMacro\latintext
+% The commands |\greektext| and |\latintext| can be used to switch
+% to greek or latin fonts. These are declarations.
+%
+% \DescribeMacro\textgreek
+% \DescribeMacro\textlatin
+% The commands |\textgreek| and |\textlatin| both take one argument
+% which is then typeset using the requested font encoding.
+% \DescribeMacro\textol
+% The command |\greekol| switches to the greek outline font family,
+% while the command |\textol| typests a short text in outline font.
+% A number of extra greek characters are made available through the
+% added text commands |\stigma|, |\qoppa|, |\sampi|, |\ddigamma|,
+% |\Digamma|, |\euro|, |\permill|, and |\vardigamma|.
+%
+% \subsection{Typing conventions}
+%
+% Entering greek text can be quite difficult because of the many
+% diacritical signs that need to be added for various purposes.
+% The fonts that are used to typeset Greek make this a lot
+% easier by offering a lot of ligatures. But 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.
+%
+% \subsection{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{}
+%
+% 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}
+%
+% Typesetting Greek texts implies that a special set of fonts needs
+% to be used. The current support for greek uses the |cb| fonts
+% created by Claudio Beccari\footnote{Apostolos Syropoulos wishes
+% to thank him for his patience, collaboration, cooments and
+% suggestions.}. The |cb| fonts provide all sorts of \textit{font
+% combinations}. In order to use these fonts we define the Local
+% GReek encoding (LGR, see the file \file{greek.fdd}). We make sure
+% that this encoding is known to \LaTeX, and if it isn't we abort.
+% \changes{greek-1.2a}{1997/10/31}{filename \file{lgrenc.def} now
+% lowercase}
+% \begin{macrocode}
+\InputIfFileExists{lgrenc.def}{%
+ \message{Loading the definitions for the Greek font encoding}}{%
+ \errhelp{I can't find the lgrenc.def file for the Greek fonts}%
+ \errmessage{Since I do not know what the LGR encoding means^^J
+ I can't typeset Greek.^^J
+ I stop here, while you get a suitable lgrenc.def file}\@@end
+ }
+% \end{macrocode}
+%
+% Now we define two commands that offer the possibility to switch
+% between Greek and Roman encodings.
+%
+% \begin{macro}{\greektext}
+% The command |\greektext| will switch from Latin font encoding to
+% the Greek font encoding. This assumes that the `normal' font
+% encoding is a Latin one. This command is a \emph{declaration},
+% for shorter pieces of text the command |\textgreek| 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
+% requested 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}
+% A last aspect of the set of fonts provided with this version of
+% support for typesetting Greek texts is that it contains an
+% outline family. In order to make it available we define the command
+% |\textol|.
+% \begin{macrocode}
+\def\outlfamily{\usefont{LGR}{cmro}{m}{n}}
+\DeclareTextFontCommand{\textol}{\outlfamily}
+% \end{macrocode}
+% \end{macro}
+%
+% 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{Pr'ologos}%
+ \def\refname{Anafor'es}%
+ \def\abstractname{Per'ilhyh}%
+ \def\bibname{Bibliograf'ia}%
+ \def\chaptername{Kef'alaio}%
+ \def\appendixname{Par'arthma}%
+ \def\contentsname{Perieq'omena}%
+ \def\listfigurename{Kat'alogos Sqhm'atwn}%
+ \def\listtablename{Kat'alogos Pin'akwn}%
+ \def\indexname{Euret'hrio}%
+ \def\figurename{Sq'hma}%
+ \def\tablename{P'inakas}%
+ \def\partname{M'eros}%
+ \def\enclname{Sunhmm'ena}%
+ \def\ccname{Koinopo'ihsh}%
+ \def\headtoname{Pros}%
+ \def\pagename{Sel'ida}%
+ \def\seename{bl'epe}%
+ \def\alsoname{bl'epe ep'ishs}%
+ \def\proofname{Ap'odeixh}%
+ \def\glossaryname{Glwss'ari}%
+ }
+% \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{>Anafor`es}%
+ \def\indexname{E<uret'hrio}%
+ \def\figurename{Sq~hma}%
+ \def\headtoname{Pr`os}%
+ \def\alsoname{bl'epe >ep'ishs}%
+ \def\proofname{>Ap'odeixh}%
+}
+% \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
+ Ianouar'iou\or Febrouar'iou\or Mart'iou\or April'iou\or
+ Ma'"iou\or Ioun'iou\or Ioul'iou\or Augo'ustou\or
+ Septembr'iou\or Oktwbr'iou\or Noembr'iou\or Dekembr'iou\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 >Ianouar'iou\or
+ Febrouar'iou\or Mart'iou\or >April'iou\or Ma"'iou\or
+ >Ioun'iou\or >Ioul'iou\or A>ugo'ustou\or Septembr'iou\or
+ >Oktwbr'iou\or Noembr'iou\or Dekembr'iou\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 used and the definition of the
+% internal macros |\@alph| and |\@Alph| because in Greek we do use
+% the Greek numerals.
+%
+% \begin{macrocode}
+\addto\extrasgreek{\greektext}
+\addto\noextrasgreek{\latintext}
+% \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{%
+ \PackageWarning{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{\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}
+%
+% \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}}
+%
+% To prevent roman numerals being typeset in greek letters we need
+% to adopt the internal \LaTeX\ commands |\@roman| and
+% |\@Roman|. \textbf{Note that this may cause errors where
+% |\@roman| ends up in a situation where it needs to be expanded;
+% problems are known to exist with the AMS document classes.}
+% \begin{macrocode}
+\let\latin@roman\@roman
+\let\latin@Roman\@Roman
+\def\greek@roman#1{\textlatin{\latin@roman{#1}}}
+\def\greek@Roman#1{\textlatin{\latin@Roman{#1}}}
+\addto\extrasgreek{%
+ \let\@roman\greek@roman
+ \let\@Roman\greek@Roman}
+\addto\noextrasgreek{%
+ \let\@roman\latin@roman
+ \let\@Roman\latin@Roman}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\greek@amp}
+% \begin{macro}{\ltx@amp}
+% The greek fonts do not contain an ampersand, so the \LaTeX\
+% command |\&| dosn't give the expected result if we do not do
+% something about it.
+% \changes{greek-1.2f}{1999/04/25}{Now switch the definition of
+% \cs{\&} from \cs{extrasgreek}}
+% \changes{greek-1.3c}{1999/05/17}{Added a missing opening brace}
+% \begin{macrocode}
+\let\ltx@amp\&
+\def\greek@amp{\textlatin{\ltx@amp}}
+\addto\extrasgreek{\let\&\greek@amp}
+\addto\noextrasgreek{\let\&\ltx@amp}
+% \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 a\or b\or g\or d\or e\or \stigma\or z\or h\or j\fi
+ \ifnum#1=\z@\else\anw@true\fi\anw@print}
+\def\gr@num@ii#1{%
+ \ifcase#1\or i\or k\or l\or m\or n\or x\or o\or p\or \qoppa\fi
+ \ifnum#1=\z@\else\anw@true\fi\gr@num@i}
+\def\gr@num@iii#1{%
+ \ifcase#1\or r\or sv\or t\or u\or f\or q\or y\or w\or \sampi\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\katwtonos\fi
+ \ifcase#1\or a\or b\or g\or d\or e\or \stigma\or z\or h\or j\fi
+ \gr@num@iii}
+\def\gr@num@v#1{%
+ \ifnum#1=\z@\else\katwtonos\fi
+ \ifcase#1\or i\or k\or l\or m\or n\or x\or o\or p\or \qoppa\fi
+ \gr@num@iv}
+\def\gr@num@vi#1{%
+ \katwtonos
+ \ifcase#1\or r\or sv\or t\or u\or f\or q\or y\or w\or \sampi\fi
+ \gr@num@v}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\greek@tilde}
+% \changes{greek-1.0c}{1997/02/19}{Added command}
+% In greek typesetting we need a number of characters with more
+% than one accent. In the underlying family of fonts (the
+% |cb| fonts) this is solved using Knuth's ligature
+% mechanism.
+% 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 normaly used to produce an
+% unbreakable space. The command |\~| normally produces a tilde
+% accent. For polytonic Greek we change the definition of |\~|
+% to produce the tilde character itself, making sure it has category
+% code 12.
+% \changes{greek-1.3k}{2003/04/10}{Make sure the character `!' is not
+% active during the definition of \cs{greek@tilde}}
+% \begin{macrocode}
+\begingroup
+ \@ifundefined{active@char\string!}{}{\catcode`!=12\relax}
+ \catcode`\~=12
+ \lccode`\!=`\~
+ \lowercase{\def\x{\endgroup
+ \def\greek@tilde{!}}\x}
+\addto\extraspolutonikogreek{%
+ \babel@save\~\let\~\greek@tilde}
+% \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 tile |~| 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}{Ues 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}
+% 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}}
+% \begin{macrocode}
+\addto\extraspolutonikogreek{\languageshorthands{greek}}%
+\declare@shorthand{greek}{~}{\greek@tilde}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \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}
+% We now define a few symbols which are used in the typesetting of
+% greek numerals, as well as some other symbols which are usefull,
+% such as the $\epsilon\upsilon\rho\omega$ symbol, etc.
+% \begin{macrocode}
+\DeclareTextCommand{\anwtonos}{LGR}{\char"FE\relax}
+\DeclareTextCommand{\katwtonos}{LGR}{\char"FF\relax}
+\DeclareTextCommand{\qoppa}{LGR}{\char"12\relax}
+\DeclareTextCommand{\stigma}{LGR}{\char"06\relax}
+\DeclareTextCommand{\sampi}{LGR}{\char"1B\relax}
+\DeclareTextCommand{\Digamma}{LGR}{\char"C3\relax}
+\DeclareTextCommand{\ddigamma}{LGR}{\char"93\relax}
+\DeclareTextCommand{\vardigamma}{LGR}{\char"07\relax}
+\DeclareTextCommand{\euro}{LGR}{\char"18\relax}
+\DeclareTextCommand{\permill}{LGR}{\char"19\relax}
+% \end{macrocode}
+%
+% Since the |~| cannot be used to produce an unbreakable white
+% space we must redefine at least the commands |\fnum@figure| and
+% |\fnum@table| so they do not produce a |~| instead of white
+% space.
+% \changes{greek-1.3l}{2004/02/19}{Commented these lines out as this
+% change has made it into \LaTeX{} itself.}
+% \begin{macrocode}
+%\def\fnum@figure{\figurename\nobreakspace\thefigure}
+%\def\fnum@table{\tablename\nobreakspace\thetable}
+% \end{macrocode}
+%
+% 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 \~}
+%%