diff options
Diffstat (limited to 'macros/latex/contrib/babel-contrib/greek/babel-greek.dtx')
-rw-r--r-- | macros/latex/contrib/babel-contrib/greek/babel-greek.dtx | 1600 |
1 files changed, 968 insertions, 632 deletions
diff --git a/macros/latex/contrib/babel-contrib/greek/babel-greek.dtx b/macros/latex/contrib/babel-contrib/greek/babel-greek.dtx index 9224df9769..328aee6de2 100644 --- a/macros/latex/contrib/babel-contrib/greek/babel-greek.dtx +++ b/macros/latex/contrib/babel-contrib/greek/babel-greek.dtx @@ -20,13 +20,13 @@ % 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). +% language and script via the Babel system (https://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{1547} +% \CheckSum{1651} % % \iffalse % Tell the \LaTeX\ system who we are and write an entry on the @@ -37,12 +37,12 @@ %<code>\ProvidesLanguage{greek} %\fi %\ProvidesFile{babel-greek.dtx} - [2020/11/10 v1.10 Greek support for the babel system] + [2023/03/04 1.12 Greek support for the babel system] %\iffalse %% File `babel-greek.dtx' %% Greek language Definition File %% Copyright © 1997, 2005 Apostolos Syropoulos, Johannes Braams -%% Copyright © 2013, 2019 Günter Milde +%% Copyright © 2013 -- 2020 Günter Milde % %% Please report errors to: Günter Milde <milde@users.sf.net> % @@ -50,19 +50,17 @@ % 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@gnu.org> with his -% consent. +% Kastrup <dak@gnu.org> with his consent. %<*filedriver> \documentclass{ltxdoc} -% \usepackage{lmodern} -\usepackage[utf8]{inputenc} +\usepackage{lmodern} \usepackage{hyperref} \hypersetup{colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=black} -\newcommand*{\babel}{\textsf{babel}} -\newcommand*{\note}[1]{} \newcommand*{\Lopt}[1]{\textsf{#1}} \newcommand*{\file}[1]{\texttt{#1}} -\newcommand*{\pkg}[1]{\texttt{#1}} +\newcommand*{\pkg}[1]{\textsf{#1}} +\newcommand*{\pkgref}[1]{\textsf{\href{https://ctan.org/pkg/#1}{#1}}} +\RecordChanges % Write index file with \changes entries \begin{document} \DocInput{babel-greek.dtx} \end{document} @@ -98,56 +96,31 @@ % 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 +% \changes{greek-1.7a}{2013/09/13}{Remove spurious ``fi''.} +% \changes{greek-1.7b}{2013/10/01}{Correct upcasing of babel strings % with Xe/LuaTeX.} -% \changes{babel-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{babel-greek-1.8a}{2013/12/03}{Set `encodingdefault' in `greekscript' -% to fix Greek in footnotes etc. with document language Greek.} -% \changes{babel-greek-1.9}{2014/07/20}{Added attribute for ancient Greek. -% Load correct hyphenation patterns. Patch by Claudio Beccari.} -% \changes{babel-greek-1.9b}{2014/09/18}{Remove spurious whitespace from -% `extrasgreek' definition (report Eike Schmidt). -% Use named macros instead of non-standard short accent macros for -% psili and dasia.} -% \changes{babel-greek-1.9c}{2014/10/21}{Fix dummy hyphenation language names -% (report/patch Ulrike Fischer).} -% \changes{babel-greek-1.9d}{2015/07/06}{uc-/lccode corrections from xgreek are now -% in greek-euenc.def (the polyglossia version has bugs).} -% \changes{babel-greek-1.9e}{2015/11/27}{Fix bug in lccode-setting loop -% (patch by Enrico Gregorio).} -% \changes{babel-greek-1.9f}{2016/02/04}{Support for standard -% Unicode text encoding ``TU'' (new in fontspec v2.5a).} -% \changes{babel-greek-1.9g}{2016/09/07}{Babel 3.9i deprecated textlatin -% and fixed latinencoding.} -% \changes{babel-greek-1.9h}{2019/07/11}{Move breathing composite commands -% to textalpha.} -% \changes{babel-greek-1.9i}{2020/02/28}{Update test for Unicode fonts. -% Fix accent in seename and alsoname.} -% \changes{babel-greek-1.9j}{2020/03/17}{Fix ampersand in math mode.} -% \changes{babel-greek-1.10}{2020/11/10}{Use TU as \cs{greekfontencoding} -% for Xe/LuaTeX. TU is the default font encoding there since 2017/01/01. -% PDF-string secure implementation of \cs{greeknumeral} -% (taken from ``hyperref''). -% Use zig-zagy \cs{textkoppa} for \cs{greeknumeral{90}}. -% This is what it looked originally and what it looks -% in current (not classical or medieval) Greek typography. -% Load ``puenc-greek.def`` (from greek-fontenc_) if used with hyperref.} +% \changes{greek-1.8}{2013/11/27}{Renamed to `babel-greek'.} +% \changes{babel-greek-1.08}{2013/11/27}{\file{greek.dtx} renamed to +% \file{babel-greek.dtx} (but still generates \file{greek.ldf}).} +% \changes{babel-greek-1.08}{2013/11/27}{ +% Restore compatibility with Xe/LuaTeX in 8-bit and Unicode mode.} +% \changes{babel-greek-1.09g}{2016/09/07}{Babel 3.9i deprecated +% \cs{textlatin} and fixed \cs{latinencoding}.} +% \changes{babel-greek-1.09i}{2020/02/28}{ +% Fix accent in \cs{seename} and \cs{alsoname}.} +% \changes{babel-greek-1.12}{2023/03/04}{ +% Update and restructure documentation.} % % \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 +% language and script via the \pkgref{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 \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, code from \file{kdgreek.sty} @@ -155,212 +128,289 @@ % is the literate source for the Babel language definition file % \file{greek.ldf}. % +% \tableofcontents +% % \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}) +% Typesetting Greek with Babel requires (of course) the \pkgref{babel} +% package, support for Greek font encodings (\pkgref{greek-fontenc}) % and a \href{README.html#greek-text-fonts}{text font supporting the % Greek script}. % -% The \href{http://www.ctan.org/pkg/cbgreek-complete}{CB Greek fonts} +% The \href{https://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 +% 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 CM Unicode, Linux Libertine or -% DejaVu with \pkg{\href{http://www.ctan.org/pkg/fontspec}{fontspec}}. +% The package \pkgref{cbfonts-fd} sets them up as Greek substitute +% for the Computer Modern and Latin Modern font families. +% The standard |\DeclareFontFamilySubstitution| macro can be used to set up +% Greek supplements for other \TeX{} font families (like Times or Palatino). +% +% Unicode fonts (used with XeTeX or LuaTeX) provide slots for all Unicode +% characters in one font but commonly only a subset of the actual glyphs. +% \textbf{Many Unicode fonts, including the default +% \href{https://ctan.org/pkg/lm}{Latin Modern}, +% do not support the Greek script!} +% Authors need to set up an alternative font like CM Unicode, Linux Libertine, +% or DejaVu with \pkgref{fontspec} or the \pkgref{babel} font configuration +% system. +% +% With 8-bit TeX and XeTeX, hyphenation patterns must be +% pre-loaded in the format file. +% This is a limitation by TeX, common to all languages. +% The LuaTeX engine loads hyphenation patterns dynamically. +% % % \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. -% The default is modern ``monotonic'' Greek, while -% \begin{verbatim} -% \usepackage[english,greek]{babel} -% \languageattribute{greek}{polutoniko} -% \end{verbatim} -% sets the document language to modern Greek with ``polytonic'' -% spelling and -% \begin{verbatim} -% \usepackage[english,greek]{babel} -% \languageattribute{greek}{ancient} -% \end{verbatim} -% sets the document language to ancient Greek. +% To activate Greek language 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 text parts in an English document. % -% Both attributes may also be used as modifiers as in -% \begin{verbatim} -% \usepackage[greek.polutoniko,english]{babel} -% \end{verbatim} -% and similarly -% \begin{verbatim} -% \usepackage[greek.ancient,english]{babel} -% \end{verbatim} -% -% By default, -% \pkg{babel-greek} activates the modern Greek monotonic hyphenation; -% the attribute/modifier |polutoniko| activates the modern Greek -% polytonic hyphenation and the attribute/modifier |ancient| activates -% the ancient Greek hyphenation. 8-bit TeX and XeTeX require the -% hyphenation patterns to be pre-loaded in the format file. -% This is a limitation by TeX, common to all languages. -% The LuaTeX engine loads hyphenation patterns on demand. -% -% \DescribeMacro\selectlanguage -% \DescribeMacro\foreignlanguage +% \DescribeMacro\selectlanguage % The Babel core provides two commands to switch the active language: % The declaration |\selectlanguage{greek}| switches to the Greek language. +% \DescribeMacro\foreignlanguage % 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 details see the \pkgref{babel} documentation. +% +% +% \subsection{Language attributes} +% +% The attributes \Lopt{monotoniko}, \Lopt{polutoniko}^^A +% \footnote{with the alias \Lopt{polytonic}}, +% and \Lopt{ancient} allow the specification of the used orthography. +% The language variant affects automatic hyphenation, spelling of +% auto-generated strings and support for multi-accented letters. +% +% The default is modern \emph{monotonic} Greek, while +% \begin{verbatim} +% \usepackage[english,greek]{babel} +% \languageattribute{greek}{polutoniko}\end{verbatim} +% sets the document language to modern Greek with +% \emph{\href{https://en.wikipedia.org/wiki/Greek_diacritics}{polytonic}} +% spelling and +% \begin{verbatim} +% \usepackage[english,greek]{babel} +% \languageattribute{greek}{ancient}\end{verbatim} +% sets the document language to \emph{ancient} Greek. +% +% Both attributes may also be used as modifiers as in +% \begin{verbatim} +% \usepackage[greek.polutoniko,english]{babel}\end{verbatim} +% and similarly +% \begin{verbatim} +% \usepackage[greek.ancient,english]{babel}\end{verbatim} +% +% +% \subsection{Modifiers \label{sec:modifiers}} +% +% \changes{babel-greek-1.12}{2023/03/04}{ +% New modifiers \Lopt{local-LGR-fixes} and \Lopt{no-LGR-fixes}.} +% +% The following modifiers cannot be set with |\languageattribute|. +% Misspelled modifiers are ignored without warning! +% \medskip +% +% Some workarounds for the non-standard LGR font encoding may have +% serious side-effects. +% The \texttt{local-LGR-fixes} \emph{modifier} restricts the re-definitions +% in section~\ref{sec:lgr-redefinitions} to text parts using the Greek +% language. +% The \texttt{no-LGR-fixes} \emph{modifier} disables them completely. +% You may try, e.g., +% \begin{verbatim} +% \usepackage[greek.local-LGR-fixes,english]{babel}\end{verbatim} +% as a last ressort if the workarounds make a document uncompilable +% and using Xe/LuaTeX with Unicode fonts is not an option. +% Check for problems with enumerations in Greek text parts and with +% Roman and Greek numerals everywhere (especially in the ToC). +% +% These modifiers are provisional, naming and behaviour may change. +% +% \subsection{Language hooks \label{sec:language-hooks}} +% +% \DescribeMacro\extrasgreek +% The macro |\extrasgreek| is called by \pkgref{babel} on every switch +% of the active language to Greek. +% \DescribeMacro\noextrasgreek +% The macro |\noextrasgreek| is called when switching away from Greek. +% Package and document authors can add setup and tear-down code +% to the hooks with the help of the |\addto| command provided by \pkg{babel}. +% The first call of |\addto\<hookname>{<code>}| initializes the hook, +% subsequent calls append |<code>| to its definition. +% +% \pkg{Babel-greek} uses these hooks to, e.g, select correct hyphenation +% patterns (cf.\ section~\ref{sec:hyphenation-patterns}) or ensure a font +% encoding supporting the Greek script is used for Greek text parts +% (cf.\ section~\ref{sec:font-setup}). % -% 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 to write 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. +% \item Literal input using the UTF-8 encoding is the standard input +% method. With 8-bit TeX, this requires the package +% \pkgref{greek-inputenc}. % -% Literal input using the utf-8 encoding is also the standard input -% method if compiling with the XeTeX and LuaTeX engines. +% With the packages \pkgref{inputenc} and \pkgref{greek-inputenc}, +% literal Greek characters can also be input using the legacy encodings +% \emph{iso-8859-7} and \emph{macgreek}. % % \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}} +% \item The package \pkgref{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 safe but cumbersome method to input Greek characters. +% for Greek letters and text symbols. It is required by \pkg{babel-greek}. +% The LICR macros |\textAlpha| \ldots |\textomega| +% are a safe 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. +% \item The \pkg{alphabeta} package, bundled with \pkgref{greek-fontenc}, +% makes the short macro names |\Alpha| \ldots |\omega| available +% in both, text and math mode. % \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 characters. -% The following macros allow the use of Greek vs. Latin script without -% changing the active language. +% 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.} +% the \emph{LaTeX font guide}, too.} % |\greekscript| switches to a font encoding % supporting the Greek script. +% \DescribeMacro\greektext % 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 (deprecated since Babel 3.9i from March 2014). +% |\latintext| (defined by the Babel core, deprecated since March 2014) +% 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 -% (deprecated in favour of |\ensureascii| in Babel 3.9i from March 2014). -% -% \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: +% The function |\ensuregreek| takes one argument which +% is typeset using a font encoding supporting the Greek script. +% It only switches the font encoding if required (i.e. if the current +% font encoding does not support Greek letters and symbols). +% +% \DescribeMacro\lgrfont +% The function |\lgrfont|^^A +% \footnote{The legacy name \cs{textgreek} is available as alias.} +% switches to the non-standard Greek 8-bit font encoding LGR. +% Hint: Use |\lgrfont|, if you want to use the +% \emph{Latin transliteration} input method and |\ensuregreek| else. +% +% \DescribeMacro\ensureascii +% The Babel core defines |\ensureascii| that typesets its +% argument using an ASCII-compatible ``standard text font encoding''. +% It is the recommended way for text parts requiring Latin letters +% but no language switch. +% +% +% \subsection{Greek numbering \label{sec:greek-numbering}} +% The \href{https://en.wikipedia.org/wiki/Greek_numerals} +% {Greek (Milesian) alphabetical numbering system}\footnote{ +% Attic numerals, which predate the Milesian numerals +% are implemented in package |athnum|.} +% is still used in everyday life for short enumerations. +% It was used for dates and numbers in the range of several thousands +% in official editions up to the beginning of the 20th century and +% is still used by the Eastern Orthodox Church and certain scholars. +% Unfortunately, most Greeks don't know how to write Greek numbers +% bigger than 20 or 30. +% +% \DescribeMacro{\greeknumeral} +% The command |\greeknumeral| makes it possible to typeset Greek +% numerals for numbers up to \hbox{999\,999}. +% \DescribeMacro{\Greeknumeral} +% |\Greeknumeral| is the ``uppercase'' version of this macro. +% 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 +% \item Numbers from $1$ to $9$ are denoted by letters +% \emph{alpha}, \emph{beta}, \emph{gamma}, \emph{delta}, \emph{epsilon}, +% \emph{stigma}\footnote{ +% cf.\ \hyperref[greeknumeralsix]{\cs{greeknumeralsix}}}, +% \emph{zeta}, \emph{eta}, \emph{theta}, followed by a \emph{keraia}, +% a mark similar to the mathematical symbol ``prime''. +% \item Decades from $10$ to $90$ are denoted by letters \emph{iota}, +% \emph{kappa}, \emph{lambda}, \emph{mu}, \emph{nu}, \emph{xi}, +% \emph{omikron}, \emph{pi}, \emph{koppa}\footnote{ +% cf.\ \hyperref[greeknumeralninety]{\cs{greeknumeralninety}}}, +% again followed by the numeric mark. +% \item Hundreds from $100$ to $900$ are denoted by letters \emph{rho}, +% \emph{sigma}, \emph{tau}, \emph{upsilon}, \emph{phi}, \emph{chi}, +% \emph{psi}, \emph{omega}, \emph{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. +% the mark is an \emph{aristeri keraia}, a prime inverted by 180 degrees +% and placed in front of the letter, under the baseline. +% When a group of letters denoting thousands is followed by a group of +% letters denoting a number under $1000$, 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|. +% The shape of the obsolete characters used for number 6 +% (\emph{digamma}/\emph{stigma}) and 90 (\emph{koppa}) evolved over time +% and different characters are in use for them today. +% The following four macros can be re-defined to configure +% |\greeknumeral| and |\Greeknumeral| respectively: +% +% \DescribeMacro\greeknumeralsix +% \phantomsection\label{greeknumeralsix} +% Originally, the sixth letter of the alphabet, standing for 6, was the +% \emph{digamma} -- just as its Latin equivalent F is the sixth letter of +% the Latin alphabet. +% As Greek script turned to uncial and then lowercase, digamma changed its +% shape – it became similar to the ligature for sigma-tau (\emph{stigma}). +% People started using the stigma or the digraph sigma tau\footnote{ +% Mainly because the letter stigma is not always available, so people +% opted to write down the first two letters of its name instead.}. +% The macro |\greeknumeralsix| allows configuring the symbol for the +% number 6 in |\greeknumeral|, +% \DescribeMacro\greeknumeralSix +% the macro |\greeknumeralSix| does the same for |\Greeknumeral|. +% The default values are |\textstigma| and |\textStigma|. +% +% \DescribeMacro\greeknumeralninety +% \phantomsection\label{greeknumeralninety} +% Three symbols are in use for the number 90: +% Classicists prefer the q-like ``archaic'' \emph{koppa} +% and, more rarely, its uncial form\footnote{ +% resembling CYRILLIC LETTER KOPPA or GOTHIC LETTER NINETY}, +% modern Greek uses the zig-zag shaped ``modern'' \emph{koppa} +% exclusively. The macro |\greeknumeralninety| allows configuring +% the symbol for the number 90 in |\greeknumeral|, +% \DescribeMacro\greeknumeralNinety +% the macro |\greeknumeralNinety| does the same for |\Greeknumeral|. +% The default values are |\textkoppa| and |\textKoppa| for modern Greek +% and |\textqoppa| and |\textqoppa| for ancient Greek. +% +% There is no such variation in the shape of the \emph{sampi} +% used for the number 900. % % \StopEventually{} % -% \section{Implementation} % +% \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} +% \changes{greek-1.0b}{1996/11/02}{ +% Use \cs{LdfInit} to perform initial checks.} % \begin{macrocode} %<*code> \LdfInit\CurrentOption{captions\CurrentOption} @@ -371,134 +421,221 @@ \gdef\CurrentOption{greek} % \end{macrocode} % -% Hyphenation patterns: +% +% \subsection{Hyphenation patterns \label{sec:hyphenation-patterns}} +% % 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 the three variants of the Greek language -% |\l@greek|, |\l@monogreek|, and |l@ancientgreek| to see whether -% we have to do something here. -% \changes{greek-1.9}{2014/07/20}{Support all 3 language (hyphenation) -% variants.} +% |\l@greek|, |\l@monogreek|, and |l@ancientgreek| +% and set the hyphenation to |\language0| for the missing ones. +% \changes{babel-greek-1.09}{2014/07/20}{ +% Load correct hyphenation patterns (patch by Claudio Beccari).} +% \changes{babel-greek-1.09c}{2014/10/21}{ +% Fix dummy hyphenation language names (patch Ulrike Fischer).} % \begin{macrocode} \ifx\l@greek\@undefined \@nopatterns{greek} - \adddialect\l@greek 0\fi + \adddialect\l@greek 0 +\fi \ifx\l@monogreek\@undefined - \adddialect\l@monogreek 0\fi + \@nopatterns{greek} + \adddialect\l@monogreek 0 +\fi \ifx\l@ancientgreek\@undefined - \adddialect\l@ancientgreek 0\fi + \@nopatterns{greek} + \adddialect\l@ancientgreek 0 +\fi \newcount\bbl@monogreek \bbl@monogreek=\l@monogreek \newcount\bbl@polygreek \bbl@polygreek=\l@greek -\newcount\bbl@ancientgreek \bbl@ancientgreek=\l@ancientgreek +\newcount\bbl@ancientgreek \bbl@ancientgreek=\l@ancientgreek % \end{macrocode} -% The |\extrasgreek| macro is called when switching the language to Greek. -% We collect code for polytonic and ancient greek in the macros -% |extraspolutonikogreek| and |extrasancientgreek| and add it later to -% |extrasgreek|. +% Use the \emph{language hooks} (cf.\ section~\ref{sec:language-hooks}) +% to set the correct hyphenation patterns. +% (We collect setup code for the language variants \Lopt{polutoniko} and +% \Lopt{ancient} in |\extraspolutonikogreek| and |\extrasancientgreek|; +% \DescribeMacro\extraspolutonikogreek +% their content is added to |\extrasgreek| by the respective language +% attributes, cf.\ section~\ref{sec:language-variants}). +% \DescribeMacro\extrasancientgreek +% ^^A TODO: Move the |\let\l@greek=...| definitions to the language +% ^^A attribute functions (as we only have one language variant per document) +% ^^A or use the hooks to allow more than one language variant? +% \changes{greek-1.5a}{2013/06/27}{provide ``extraspolutonikogreek'' also +% for Xe/LuaTeX.} % \begin{macrocode} -\addto\extrasgreek{\let\l@greek\bbl@monogreek\relax} +\addto\extrasgreek{\let\l@greek=\bbl@monogreek} \addto\extraspolutonikogreek{\l@greek=\bbl@polygreek} \addto\extrasancientgreek{\l@greek=\bbl@ancientgreek} % \end{macrocode} % -% Now we declare the |polutoniko| language attribute. +% \begin{macro}{\providehyphenmins} +% \changes{greek-1.3h}{2000/09/22}{Now use \cs{providehyphenmins} to +% provide a default value} +% The macro |\providehyphenmins| is used to set the correct values of +% the hyphenation parameters |\lefthyphenmin| and |\righthyphenmin|. +% Yannis Haralambous has suggested the value 1. % \begin{macrocode} -\bbl@declare@ttribute{greek}{polutoniko}{% +\providehyphenmins{\CurrentOption}{\@ne\@ne} % \end{macrocode} +% \end{macro} +% +% +% \subsection{Language variants \label{sec:language-variants}} +% +% The Babel core provides the command |\bbl@declare@ttribute| for the +% declaration of language attributes in language definition files. +% It takes three arguments: +% the name of the language, the attribute to be defined, +% and the code to be executed when the attribute is to be used. +% If the language attribute is selected, the third argument is executed +% after reading the *.ldf file. +% +% \subsubsection{\Lopt{polutoniko}} +% The |polutoniko| language attribute selects the ``polytonic'' spelling. % This code adds the expansion of |\extraspolutonikogreek| to -% |\extrasgreek| and changes the definition of |\today| for Greek -% to produce polytonic month names (by re-defining |\gr@month|). +% |\extrasgreek| to set up support for multi-accented characters +% and hyphenation patterns for the polytonic orthography. % \begin{macrocode} +\bbl@declare@ttribute{greek}{polutoniko}{% \expandafter\addto\expandafter\extrasgreek \expandafter{\extraspolutonikogreek}% +% \end{macrocode} +% It also uses polytonic spelling for auto-strings +% (captions and month names). +% \begin{macrocode} \let\captionsgreek\captionspolutonikogreek - \let\gr@month\gr@c@month + \let\gr@month\gr@polutoniko@month % \end{macrocode} -% We need to take some extra precautions in order not to break -% older documents which still use the old \Lopt{polutonikogreek} -% pseuso-language option: language switching commands like -% |\selectlanguage{polutonikogreek}|, call the -% |extraspolutonikogreek| macro, set the language to |\l@polutonikogreek| -% and use |\datepolutonikogreek| for |\today|. We define aliases: -% \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} +% +% For backwards compatibility, ``polytonic'' spelling can also be +% selected via the dummy language \Lopt{polutonikogreek}. +% However, it is not possible to use both options, +% \Lopt{greek} and \Lopt{polutonikogreek} in one document. +% We also define aliases to allow language switching commands using +% the language name |polutonikogreek|: +% \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} -% The |ancient| language attribute is used for classical Greek. -% \changes{greek-1.9}{2014/07/20}{Add support for ancient Greek.} +% +% \subsubsection{\Lopt{polytonic}} +% +% \changes{babel-greek-1.12}{2023/03/04}{ +% New language attribute \Lopt{polytonic} (alias for \Lopt{polutoniko}).} +% +% The |polytonic| language attribute is an alias for the +% attribute |polutoniko| matching the spelling for this orthography +% variant in \pkg{polyglossia} and Babel |*.ini| files. % \begin{macrocode} -\bbl@declare@ttribute{greek}{ancient}{% +\bbl@declare@ttribute{greek}{polytonic}{% + \expandafter\addto\expandafter\extrasgreek + \expandafter{\extraspolutonikogreek}% + \let\captionsgreek\captionspolutonikogreek + \let\gr@month\gr@polutoniko@month +} % \end{macrocode} -% This attribute adds the expansion of |\extraspolutonikogreek| and -% |\extrasancientgreek| to |\extrasgreek| to set up support for -% multi-accented characters and ancient hyphenation patterns. -% Auto-strings (captions) are specific to ancient Greek while |\today| -% uses modern polytonic month names (as there existed incompatible -% sets of month names and no common calendar in ancient Greece. +% +% \subsubsection{\Lopt{ancient}} +% +% \changes{babel-greek-1.09}{2014/07/20}{Add support for ancient Greek.} +% +% The \Lopt{ancient} language attribute is used for classical Greek. +% This attribute adds the expansion of |\extraspolutonikogreek| and +% |\extrasancientgreek| to |\extrasgreek| to set up support for +% multi-accented characters and ancient hyphenation patterns. % \begin{macrocode} +\bbl@declare@ttribute{greek}{ancient}{% \expandafter\addto\expandafter\extrasgreek \expandafter{\extraspolutonikogreek}% multi-accented letters \expandafter\addto\expandafter\extrasgreek \expandafter{\extrasancientgreek}% +% \end{macrocode} +% Auto-strings (captions) are specific to ancient Greek while |\today| +% uses modern polytonic month names (as there existed incompatible +% sets of month names and no common calendar in ancient Greece). +% \begin{macrocode} \let\captionsgreek\captionsancientgreek - \let\gr@month\gr@c@month % (modern) polytonic month names - } + \let\gr@month\gr@polutoniko@month % (modern) polytonic month names +% \end{macrocode} +% Classicists tend to use the Q-like ``archaic'' koppa for the number 90. +% Thus, for classical Greek, we set the default to the ``archaic'' koppa +% (cf.\ section~\ref{sec:greek-numbering}). +% \begin{macrocode} + \renewcommand{\greeknumeralninety}{\textqoppa}% + \renewcommand{\greeknumeralNinety}{\textQoppa}% +} % \end{macrocode} % -% \section{Font setup} % -% Typesetting Greek texts requires a font with Greek characters: +% \subsection{Font setup \label{sec:font-setup}} % -% 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. +% \subsubsection{Greek font encoding \label{sec:greekfontencoding}} % -% \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{babel-greek-1.08}{2013/11/27}{ +% Load \file{euenc.def} if EU1 or EU2 font encoding is detected.} +% \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} -% \changes{babel-greek-1.9f}{2016/02/04}{Check also for TU font encoding.} -% \changes{babel-greek-1.9i}{2020/02/27}{Update check for Unicode fonts.} +% (too complicated to get it right).} +% \changes{babel-greek-1.08}{2013/11/30}{ +% Check for EU1/EU2 font encoding instead of engine} +% \changes{babel-greek-1.09f}{2016/02/04}{Check also for standard +% Unicode text encoding ``TU'' (new in fontspec v2.5a).} +% \changes{babel-greek-1.09i}{2020/02/27}{Update check for Unicode fonts.} % \changes{babel-greek-1.10}{2020/11/10}{Use TU with Xe/LuaTeX.} -% -% \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 default is LGR for 8-bit TeX engines and TU for Xe/LuaTeX. -% (TODO: The font encoding definition file was renamed to tuenc-greek.def -% in \emph{greek-fontenc} 0.14 (2020-02-28).) +% \begin{macro}{\greekfontencoding} +% The macro |\greekfontencoding| holds the name of the font +% encoding\footnote{cf.\ +% \href{https://mirrors.ctan.org/macros/latex/base/encguide.pdf} +% {encguide.pdf}} +% used to ensure support of the Greek script. +% The default is LGR for 8-bit TeX and TU for Xe/LuaTeX.\footnote{ +% Document authors must ensure that the selected font actually contains +% the required glyphs. +% +% LGR-encoded fonts can be used alongside Unicode fonts with +% XeTeX/LuaTeX to enable the input of Greek letters via the Latin +% transliteration (with some limitations, see \file{test-greek.tex}).} +% It can be overridden defining |\greekfontencoding| with a custom value +% before loading \pkg{babel}. +% +% Also store the name of the \emph{encoding definition file}\footnote{ +% see \href{https://www.latex-project.org/help/documentation/fntguide.pdf} +% {fntguide.pdf}} +% with the extended Greek setup for the Greek font encoding. % \begin{macrocode} -\ifdefined \UnicodeEncodingName % set by LaTeX for Unicode-aware engines +\ifdefined\UnicodeEncodingName % set by XeTeX/LuaTeX \providecommand*{\greekfontencoding}{\UnicodeEncodingName} \providecommand*{\bbl@greek@fontencdef}{tuenc-greek} \else \providecommand*{\greekfontencoding}{LGR} \providecommand*{\bbl@greek@fontencdef}{lgrenc} + % TODO the more generic version fails :( + % \edef\bbl@greek@fontencdef{\lowercase{\greekfontencoding}enc} \fi % \end{macrocode} -% Ensure that the Greek LICR macros are available: +% \end{macro} +% +% \subsubsection{Ensure loading of Greek font encoding definitions. +% \label{load-greek-font-encoding-definitions}} +% +% If the \emph{encoding definition file} for |\greekfontencoding| is not yet +% loaded, do this now: % \begin{macrocode} \@ifl@aded{def}{\bbl@greek@fontencdef}{} {% else - \InputIfFileExists{\bbl@greek@fontencdef .def}{}{% else + \InputIfFileExists{\bbl@greek@fontencdef .def}{} + {% else \bbl@error{Font support for the Greek script missing.\\ babel-greek can't typeset Greek.\\ Install the "greek-fontenc" package\\ @@ -509,111 +646,117 @@ } } % \end{macrocode} +% If the PU font encoding is defined (by \pkgref{hyperref}), load extended +% Greek support for it. Do this in the |\AtBeginDocument| hook because +% documents may load \pkg{hyperref} after \pkg{babel}. +% We cannot rely on |@| being a letter when the hook is called and we must +% not use |\makeatother| in the hook +% (\href{https://tex.stackexchange.com/questions/62583/is-it-really-bad-to-use-makeatletter-and-makeatother-in-a-package-or-class-fil} +% {explanation at stackexchange}). +% We use a temporary function to save and restore the previous catcode. +% \changes{babel-greek-1.10}{2020/11/10}{Load \file{puenc-greek.def} +% from \pkg{greek-fontenc} if used with hyperref.} +% \changes{babel-greek-1.12}{2023/03/04}{ +% Don't use \cs{makeatother} in \cs{AtBeginDocument}.} +% \begin{macrocode} +\AtBeginDocument{% + \@ifl@aded{def}{puenc}% + {\@ifl@aded{def}{puenc-greek} + {}% + {\edef\RestoreAtCatcode{\catcode`@=\the\catcode`@\relax}% + \makeatletter + \InputIfFileExists{puenc-greek.def}% + {}% + {\bbl@warning{I cannot find the "puenc" Greek fixes + from "greek-fontenc".}% + }% + \RestoreAtCatcode + }% + }% end "puenc.def loaded" branch + {}% empty "puenc.def not loaded" branch +} +% \end{macrocode} +% +% \subsubsection{Font encoding switches \label{sec:font-encoding-switches}} % \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 titles, footnotes, etc. with document language Greek.} +% The TextCommand\footnote{See +% \href{https://www.latex-project.org/help/documentation/fntguide.pdf} +% {fntguide.pdf} for more info about \emph{TextCommands}.} +% |\greekscript| is a declaration that switches the font +% encoding to |\greekfontencoding|. +% The extended Greek font encoding definitions from \pkgref{greek-fontenc} +% define empty local variants for TU, LGR, and PU, so that the declaration +% does nothing if the active font encoding supports the Greek script. +% \changes{babel-greek-1.08}{2013/11/27}{ +% New TextCommands ``greekscript'' and ``ensuregreek''.} +% \changes{babel-greek-1.08a}{2013/12/03}{Set `encodingdefault' +% to fix Greek in footnotes etc. with document language Greek.} % \begin{macrocode} \ProvideTextCommandDefault{\greekscript}{% \fontencoding{\greekfontencoding}\selectfont - \def\encodingdefault{\greekfontencoding}} + \def\encodingdefault{\greekfontencoding}} % \end{macrocode} % \end{macro} % \begin{macro}{\ensuregreek} -% The TextCommand |\ensuregreek| sets it argument in |\greekfontencoding| +% The TextCommand |\ensuregreek| sets its argument in |\greekfontencoding| % if the current font encoding does not provide a (typically empty) local % variant. % \begin{macrocode} \ProvideTextCommandDefault{\ensuregreek}[1]{% - \leavevmode{\greekscript #1}} + \leavevmode {\greekscript #1}} % \end{macrocode} % \end{macro} -% -% The package hyperref defines the PU font encoding which supports -% monotonic Greek. Load support for polytonic greek, archaic symbols, -% and the |\greekscript| and |\ensuregreek| TextCommands: -% \begin{macrocode} -\AtBeginDocument{ - \@ifl@aded{def}{puenc}{ - \makeatletter % required inside \AtBeginDocument - \InputIfFileExists{puenc-greek.def}{}{% else - \bbl@warning{I can't find the file puenc-greek.def from "greek-fontenc".} - } - \makeatother - }{} +% \begin{macro}{\BabelGreekRestoreFontEncoding} +% The declaration |\BabelGreekRestoreFontEncoding| changes the font encoding +% to the value it had before the switch to the Greek language. It does +% nothing, if the language switch did not trigger a font encoding switch. +% \changes{babel-greek-1.12}{2023/03/04}{New macro.} +% \begin{macrocode} +\def\BabelGreekRestoreFontEncoding{% + \ifx\cf@encoding\BabelGreekPreviousFontEncoding + \else + \let\encodingdefault\BabelGreekPreviousFontEncoding + \fontencoding{\encodingdefault}\selectfont + \fi } -% \end{macrocode} -% -% \subsection{Fixes for the LGR font encoding} -% +% \end{macrocode} +% \end{macro} +% Add font encoding switches to the language hooks +% (cf.\ section~\ref{sec:language-hooks}) to ensure a font encoding +% supporting the Greek script is used in Greek text parts: +% \changes{greek-1.5}{2013/06/21}{LGR not used with XeTeX/LuaTeX.} +% \changes{babel-greek-1.08}{2013/11/27}{ +% Use EU1 or EU2 for Latin script if available} +% \changes{babel-greek-1.11}{2020/11/20}{Save/restore previous font encoding +% instead of switching to \cs{latinencoding} when leaving Greek.} +% \changes{babel-greek-1.12}{2023/03/04}{Save previous font encoding +% in \cs{BabelGreekPreviousFontEncoding}.} % \begin{macrocode} -\@ifl@aded{def}{lgrenc}{% +\addto\extrasgreek{% + \let\BabelGreekPreviousFontEncoding\cf@encoding + \greekscript} +\addto\noextrasgreek{\BabelGreekRestoreFontEncoding} % \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. -% The ampersand must work in text and math mode. We provide the text -% command |\textampersand| and re-define |\&| to use it in text mode. -% \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} -% \changes{babel-greek-1.9j}{2020/03/17}{Fix ampersand in math.} +% \subsubsection{Additional commands for the LGR font encoding} % -% \begin{macrocode} - \ProvideTextCommand{\textcopyright}{LGR}{\ensureascii{\textcopyright}} - \ProvideTextCommand{\textregistered}{LGR}{\ensureascii{\textregistered}} - \ProvideTextCommand{\texttrademark}{LGR}{\ensureascii{\texttrademark}} - \let\ltx@amp\& - \ProvideTextCommandDefault{\textampersand}{\ltx@amp} - \ProvideTextCommand{\textampersand}{LGR}{\ensureascii{\ltx@amp}} - \DeclareRobustCommand{\&}{\ifmmode\ltx@amp\else\textampersand\fi} - \ProvideTextCommand{\SS}{LGR}{\ensureascii{\SS}} -% \end{macrocode} +% The actions in this section add ``harmless'' setup steps for the LGR +% font encoding that cannot be done in the \file{lgrenc.def} +% encoding definition file. % -% \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).} +% We do this only, if the LGR font encoding is defined (either by \pkg{fontenc} +% or \pkg{babel-greek}), but also if it is not the |\greekfontencoding|: % \begin{macrocode} - \def\@roman#1{\expandafter\ensureascii\expandafter{\romannumeral#1}} - \def\@Roman#1{\expandafter\ensureascii\expandafter{% - \expandafter\@slowromancap\romannumeral#1@}} +\@ifl@aded{def}{lgrenc}{% % \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. +% The declaration |\greektext| switches to LGR. Use this if you explicitly +% require LGR (e.g. to use the Latin transliteration or special fonts). +% Use |\greekscript| instead, if you want to avoid a font encoding change +% if the current font encoding already supports the Greek script (e.g. TU). +% For shorter pieces of text, the |\lgrfont| (see below) or |\ensuregreek| +% commands should be used. Cf.\ section~\ref{sec:font-encoding-switches}. % \begin{macrocode} \DeclareRobustCommand{\greektext}{% \fontencoding{LGR}\selectfont @@ -621,59 +764,190 @@ % \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. +% \begin{macro}{\lgrfont} +% This command takes an argument which is typeset using the +% LGR font encoding. +% +% The original name |\textgreek| is deprecated because of its ambiguitiy: +% The command does not change the text \emph{language} but only the +% font encoding, which allows the use of the Greek \emph{script} +% but does not activate Greek hyphenation and case-changing rules. % \changes{greek-1.0b}{1996/09/23}{Added a level of braces to keep -% encoding change local} +% encoding change local} % \changes{greek-1.3k}{2003/03/19}{Added \cs{leavevmode} as was done -% with \cs{latintext}} +% with \cs{latintext}} +% \changes{babel-greek-1.12}{2023/03/04}{^^A +% Simplified implementation using \cs{\DeclareTextFontCommand}. +% Name changed from \cs{textgreek} to \cs{lgrfont}.} % \begin{macrocode} - \DeclareRobustCommand{\textgreek}[1]{\leavevmode{\greektext #1}} + \DeclareTextFontCommand{\lgrfont}{\greektext} + \let\textgreek\lgrfont % \end{macrocode} % \end{macro} % % \begin{macro}{\textol} -% The \href{http://www.ctan.org/pkg/cbgreek-complete}{CB Greek fonts} +% The \href{https://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 +% fit in a language definition file and is 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} +% Add LGR-specific variants to some \emph{TextCommands} +% that use Latin characters in their default definition. +% These definitions cannot be done in \file{lgrenc.def} because they rely +% on |\ensureascii| (defined by \pkg{babel}). +% \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 \cs{latintext} macro defined by Babel.} +% \changes{greek-1.5}{2013/05/27}{enable use of "textcomp" characters +% for "textcopyright" and "textregistered" macros} +% \changes{babel-greek-1.08}{2013/11/27}{ +% Use font-encoding specific TextCommands.} +% \changes{babel-greek-1.12}{2023/03/04}{Drop definition for \cs{\SS}.} +% \begin{macrocode} + \ProvideTextCommand{\textcopyright}{LGR}{\ensureascii{\textcopyright}} + \ProvideTextCommand{\textregistered}{LGR}{\ensureascii{% + \textregistered}} + \ProvideTextCommand{\texttrademark}{LGR}{\ensureascii{\texttrademark}} +% \end{macrocode} % -% \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{macro}{\textampersand} +% LGR has a ``middle dot'' glyph at the place of the ampersand. +% Provide the \emph{TextCommand} |\textampersand| and an LGR-specific +% version. It is used in the next section to define a version of |\&| +% that also works in LGR. +% \changes{greek-1.5}{2013/06/15}{Make \cs{\&} a TextCommand} +% \changes{babel-greek-1.09j}{2020/03/17}{Fix ampersand in math.} % \begin{macrocode} -% Yannis Haralambous has suggested this value -\providehyphenmins{\CurrentOption}{\@ne\@ne} + \let\bbl@greek@original@amp\& + \ProvideTextCommandDefault{\textampersand}{\bbl@greek@original@amp} + \ProvideTextCommand{\textampersand}{LGR}{% + \ensureascii{\bbl@greek@original@amp}} % \end{macrocode} % \end{macro} +% \begin{macro}{\EnsureStandardFontEncoding} +% The TextCommand |\EnsureStandardFontEncoding| can be used to make +% existing commands ``LGR-proof''. It makes sure its argument is typeset +% using a \href{https://mirrors.ctan.org/macros/latex/base/encguide.pdf} +% {standard text font encoding}. +% The default is an empty command: almost all commonly used font encodings +% are standard text encodings -- LGR is the notable exception. +% The local LGR variant uses |\ensureascii| from the Babel core that comes +% with elaborate heuristics to select a suitable standard font encoding. +% A special clause for \pkg{hyperref} avoids warnings from this package. +% \changes{babel-greek-1.12}{2023/03/04}{New TextCommand.} +% \begin{macrocode} + \ProvideTextCommandDefault{\EnsureStandardFontEncoding}{\@firstofone} + \ProvideTextCommand{\EnsureStandardFontEncoding}{LGR}[1]{% + \ensureascii{#1}} + \AtBeginDocument{\@ifpackageloaded{hyperref} + {\pdfstringdefDisableCommands{% + \let\EnsureStandardFontEncoding\@firstofone}} + {}} +% \end{macrocode} +% \end{macro} +% End the LGR additions block: +% \begin{macrocode} +}{} +% \end{macrocode} + +% \subsubsection{LGR workarounds \label{sec:lgr-redefinitions}} +% +% The following redefinitions work around problems with the +% non-standard LGR font encoding. +% As they may have serious side-effects, they are only done if LGR is the +% default Greek font encoding (cf.\ section~\ref{sec:greekfontencoding}). +% +% As an emergency measure, the \Lopt{local-LGR-fixes} or \Lopt{no-LGR-fixes} +% modifiers (cf.\ section \ref{sec:modifiers}) can be used to restrict +% the ``roman'' redefinitions to text parts using the Greek language or skip +% them completely. +% +% To prevent Roman numerals being typeset with Greek letters in text parts +% using the LGR font encoding, they must be wrapped in |\ensureascii|. +% However, Roman numerals are also auto generated by LaTeX and +% used in moving arguments.\footnote{ +% For example, Roman page numbers are generated at ``unpredictable'' +% positions and can move to the ToC, (hyper)references, or an index.} +% These ``moving'' Roman numbers must be LGR-proofed also if they originate +% from a text part using a standard font encoding. This can only be ensured by +% a global re-definition of the generating functions |\@roman| and |\@Roman|. +% On the other hand, the re-definition breaks the assumption by +% MakeIndex, that page numbers are plain character sequences. +% \pkg{Hyperref} assumes that |\thepage| is expandable and doesn't +% contain formatting instructions (cf.\ +% \href{https://github.com/latex3/babel/issues/170}{Babel issue \#170}). +% \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.} +% +% The ampersand macro |\&| is used in both, text and math mode. +% Let it use the new defined \emph{TextCommand} |\textampersand| +% in text mode. +% \begin{macrocode} +\def\bbl@tempa{LGR} +\ifx\greekfontencoding\bbl@tempa + \def\bbl@greek@roman#1{\expandafter\EnsureStandardFontEncoding% + \expandafter{\romannumeral#1}} + \def\bbl@greek@Roman#1{\expandafter\EnsureStandardFontEncoding% + \expandafter{\expandafter\@slowromancap\romannumeral#1@}} + \DeclareRobustCommand{\bbl@greek@ampersand}{% + \ifmmode\bbl@greek@original@amp\else\textampersand\fi} + \bbl@xin@{,no-LGR-fixes,}{,\BabelModifiers,}% + \ifin@ + % skip re-definitions + \else + \bbl@xin@{,local-LGR-fixes,}{,\BabelModifiers,}% + \ifin@ + \addto\extrasgreek{% + \babel@save\@roman + \babel@save\@Roman + \let\@roman\bbl@greek@roman + \let\@Roman\bbl@greek@Roman + \babel@save\&% + \let\&\bbl@greek@ampersand% + } + \else + \let\@roman\bbl@greek@roman + \let\@Roman\bbl@greek@Roman + \let\&\bbl@greek@ampersand + \fi + \fi +\fi +% \end{macrocode} % +% +% \subsection{Definitions for the Greek language} +% +% The next step consists in defining macros for the requirements of Greek +% typesetting which will later be added to the language switch hooks. +% +% \subsubsection{Auto-strings for Greek} % \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}} +% 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'.} -% \changes{babel-greek-1.9i}{2020/02/27}{Fix accent in seename and alsoname.} +% as `s' instead of `c'.} +% \changes{babel-greek-1.09i}{2020/02/27}{Fix accent in seename and alsoname.} % \begin{macrocode} \addto\captionsgreek{% \def\prefacename{\textPi\textrho\acctonos\textomicron\textlambda @@ -682,8 +956,9 @@ \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\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 @@ -697,7 +972,8 @@ \textomega\textnu}% \def\listtablename{\textKappa\textalpha\texttau\acctonos\textalpha \textlambda\textomicron\textgamma\textomicron\textfinalsigma{} - \textPi\textiota\textnu\acctonos\textalpha\textkappa\textomega\textnu}% + \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}% @@ -712,27 +988,31 @@ \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\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} +% +% \subsubsection{Auto-strings for polytonic Greek} % \changes{greek-1.2}{1997/10/28}{Added caption names for -% \cs{polutonikogreek}} +% \cs{polutonikogreek}} % \changes{greek-1.3d}{1999/08/28}{Fixed typo, \texttt{bl'epe >ep'ishc} -% instead of \texttt{bl'pe >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 +% For texts written in 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. +% \changes{babel-greek-1.09b}{2014/09/18}{Use named macros instead of +% non-standard short accent macros for psili and dasia.} % \begin{macrocode} \let\captionspolutonikogreek\captionsgreek \addto\captionspolutonikogreek{% @@ -740,82 +1020,85 @@ \textphi\textomicron\textrho\accvaria\textepsilon\textfinalsigma}% \def\indexname{\textEpsilon\accdasia\textupsilon\textrho\textepsilon \texttau\acctonos\texteta\textrho\textiota\textomicron}% - \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu\textalpha}% + \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu + \textalpha}% \def\headtoname{\textPi\textrho\accvaria\textomicron\textfinalsigma}% - \def\alsoname{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon{} - \accpsili\textepsilon\textpi\acctonos\textiota\textsigma\texteta\textfinalsigma}% + \def\alsoname{\textbeta\textlambda\acctonos\textepsilon\textpi + \textepsilon{} \accpsili\textepsilon\textpi\acctonos\textiota + \textsigma\texteta\textfinalsigma}% \def\proofname{\accpsili\textAlpha\textpi\acctonos\textomicron \textdelta\textepsilon\textiota\textxi\texteta}% } % \end{macrocode} % \end{macro} % -% \changes{babel-greek-1.9}{2014/07/20}{Added caption names for -% \cs{ancientgreek}} -% +% \subsubsection{Auto-strings for ancient Greek} +% \changes{babel-greek-1.09}{2014/07/20}{Added caption names for +% \cs{ancientgreek}} % \begin{macro}{\captionsancientgreek} -% For texts written in ancient Greek, we took -% the translations from Apostolos Syropoulos' |xgreek| package. For -% now we just add extra definitions to |\captionsgreek| in order to -% override the earlier definitions. +% For texts written in ancient Greek, we took the translations +% from Apostolos Syropoulos' \pkgref{xgreek} package. +% For now we just add extra definitions to |\captionsgreek| +% in order to override the earlier definitions. % \begin{macrocode} \let\captionsancientgreek\captionsgreek \addto\captionsancientgreek{% - \def\prefacename{\textPi\textrho\textomicron\textomicron\acctonos\textiota\textmu - \textiota\textomicron\textnu}% - \def\refname{\accpsili\textAlpha\textnu\textalpha\textphi\textomicron\textrho - \textalpha\accvaria\textiota}% - \def\abstractname{\textPi\textepsilon\textrho\acctonos\textiota\textlambda\texteta - \textpsi\textiota\textvarsigma}% - \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\textnu}% - \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\textvarsigma{} - \textsigma\textchi\texteta\textmu\acctonos\textalpha\texttau\textomega\textnu}% - \def\listtablename{\textKappa\textalpha\texttau\acctonos\textalpha\textlambda - \textomicron\textgamma\textomicron\textvarsigma{} - \textpi\textiota\textnu\acctonos\textalpha\textkappa\textomega\textnu}% - \def\indexname{\textEpsilon\accdasia\textupsilon\textrho\textepsilon\texttau - \acctonos\texteta\textrho\textiota\textomicron\textnu}% - \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu\textalpha}% + \def\prefacename{\textPi\textrho\textomicron\textomicron + \acctonos\textiota\textmu\textiota\textomicron\textnu}% + \def\refname{\accpsili\textAlpha\textnu\textalpha\textphi\textomicron + \textrho\textalpha\accvaria\textiota}% + \def\abstractname{\textPi\textepsilon\textrho\acctonos\textiota + \textlambda\texteta\textpsi\textiota\textvarsigma}% + \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\textnu}% + \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\textvarsigma{} + \textsigma\textchi\texteta\textmu\acctonos\textalpha\texttau + \textomega\textnu}% + \def\listtablename{\textKappa\textalpha\texttau\acctonos\textalpha + \textlambda\textomicron\textgamma\textomicron\textvarsigma{} + \textpi\textiota\textnu\acctonos\textalpha\textkappa + \textomega\textnu}% + \def\indexname{\textEpsilon\accdasia\textupsilon\textrho\textepsilon + \texttau\acctonos\texteta\textrho\textiota\textomicron\textnu}% + \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu + \textalpha}% \def\tablename{\textPi\acctonos\textiota\textnu\textalpha\textxi}% - \def\partname{\textMu\acctonos\textepsilon\textrho\textomicron\textvarsigma}% + \def\partname{\textMu\acctonos\textepsilon\textrho\textomicron + \textvarsigma}% \def\enclname{\textSigma\textupsilon\textnu\texteta\textmu\textmu \acctonos\textepsilon\textnu\textomega\textvarsigma}% \def\ccname{\textKappa\textomicron\textiota\textnu\textomicron\textpi - \textomicron\acctonos\textiota\texteta\textsigma\textiota\textvarsigma}% + \textomicron\acctonos\textiota\texteta\textsigma\textiota + \textvarsigma}% \def\headtoname{\textPi\textrho\accvaria\textomicron\textvarsigma}% - \def\pagename{\textSigma\textepsilon\textlambda\accvaria\textiota\textvarsigma}% + \def\pagename{\textSigma\textepsilon\textlambda\accvaria\textiota + \textvarsigma}% \def\seename{\accdasiaoxia\textomicron\textrho\textalpha}% - \def\alsoname{\accdasiaoxia\textomicron\textrho\textalpha{} \accdasia\textomega\textsigma - \textalpha\acctonos\textupsilon\texttau\textomega\textvarsigma}% - \def\proofname{\accpsili\textAlpha\textpi\acctonos\textomicron\textdelta\textepsilon - \textiota\textxi\textiota\textvarsigma}% + \def\alsoname{\accdasiaoxia\textomicron\textrho\textalpha{} + \accdasia\textomega\textsigma\textalpha\acctonos\textupsilon + \texttau\textomega\textvarsigma}% + \def\proofname{\accpsili\textAlpha\textpi\acctonos\textomicron + \textdelta\textepsilon\textiota\textxi\textiota\textvarsigma}% \def\glossaryname{\textGamma\textlambda\textomega\textsigma\textsigma \acctonos\textalpha\textrho\textiota\textomicron\textnu}% - } +} % \end{macrocode} % \end{macro} % +% \subsubsection{Date specification} +% % \begin{macro}{\gr@month} +% The auxiliary macro |\gr@month| returns Greek month names in +% monotonic spelling. % \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 @@ -823,8 +1106,9 @@ \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 + \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 @@ -843,30 +1127,28 @@ \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} +% \begin{macro}{\gr@polutoniko@month} +% The auxiliary macro |\gr@polutoniko@month| returns Greek month names in +% polytonic spelling. It is activated by the |polutoniko| language option. % \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}} +% \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{% +\def\gr@polutoniko@month{% \ifcase\month\or - \accpsili\textIota\textalpha\textnu\textomicron\textupsilon\textalpha - \textrho\acctonos\textiota\textomicron\textupsilon \or + \accpsili\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 \accpsili\textAlpha\textpi\textrho\textiota\textlambda \acctonos\textiota\textomicron\textupsilon \or - \textMu\textalpha\"'\textiota\textomicron\textupsilon \or + \textMu\textalpha\accdialytikatonos\textiota\textomicron + \textupsilon \or \accpsili\textIota\textomicron\textupsilon\textnu \acctonos\textiota\textomicron\textupsilon \or \accpsili\textIota\textomicron\textupsilon\textlambda @@ -886,49 +1168,79 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\dategreek} +% The macro |\dategreek| redefines the command |\today| to +% produce greek dates. The name of the month is produced +% by the macro |\gr@month| since it is also 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\dategreek{% + \def\today{\number\day \space \gr@month\space \number\year}} +% \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. +% 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 + \gr@polutoniko@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} +% \subsubsection{Greek numerals \label{sec:Greek numerals}} +% +% \begin{macro}{\greeknumeralsix} +% \begin{macro}{\greeknumeralSix} +% \begin{macro}{\greeknumeralninety} +% \begin{macro}{\greeknumeralNinety} +% The shape of the obsolete characters used for number 6 (digamma/stigma) +% and 90 (koppa) evolved over time and different characters are in use +% for them today. We define placeholders that allow configuration by +% the user or a package. +% \changes{babel-greek-1.10}{2020/11/10}{ +% Use zig-zagy \cs{textkoppa}. +% This is what it looks in current Greek typography.} % \begin{macrocode} -\addto\extrasgreek{\greekscript} -\addto\noextrasgreek{\latintext} +\providecommand*{\greeknumeralsix}{\textstigma} +\providecommand*{\greeknumeralSix}{\textStigma} +\providecommand*{\greeknumeralninety}{\textkoppa} +\providecommand*{\greeknumeralNinety}{\textKoppa} % \end{macrocode} -% TODO restore previous font encoding. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}{\greeknumeral} +% The commands |\greeknumeral| and |\Greeknumeral| produce the lowercase +% and uppercase \href{https://en.wikipedia.org/wiki/Greek_numerals}{Greek +% numerals} respectively. +% % The command |\greeknumeral| needs to be \emph{fully} expandable % in order to get the right information in auxiliary % files. It should also be usable in PDF-strings. % Therefore we use the implementation from the \cs{HyPsd@GreekPatch} -% in \href{https://ctan.org/pkg/hyperref}{hyperref} -% (version 7.00e 2020-05-15). +% in \pkgref{hyperref} (version 7.00e 2020-05-15). +% % \changes{babel-greek-1.10}{2020/11/10}{PDF-string secure implementation -% taken from ``hyperref'' (collaboration with Ulrike Fischer).} +% taken from ``hyperref'' (thanks to Ulrike Fischer).} +% \changes{babel-greek-1.11}{2020/11/20}{Configurable shapes for 6 and 90. +% 90 defaults to \cs{textqoppa} for ancient Greek.} % \begin{macrocode} \def\greeknumeral#1{% {\greekscript - \bbl@greek@GreekNum\@firstoftwo{#1}}% + \bbl@greek@GreekNum\@firstoftwo{#1}}% } % \end{macrocode} % \end{macro} @@ -937,7 +1249,7 @@ % \begin{macrocode} \def\Greeknumeral#1{% {\greekscript - \bbl@greek@GreekNum\@secondoftwo{#1}}% + \bbl@greek@GreekNum\@secondoftwo{#1}}% } % \end{macrocode} % \end{macro} @@ -1018,7 +1330,7 @@ \or\textgamma\textGamma \or\textdelta\textDelta \or\textepsilon\textEpsilon - \or\textstigmagreek\textStigmagreek + \or\greeknumeralsix\greeknumeralSix % stigma or digamma \or\textzeta\textZeta \or\texteta\textEta \or\texttheta\textTheta @@ -1043,7 +1355,7 @@ \or\textxi\textXi \or\textomicron\textOmicron \or\textpi\textPi - \or\textkoppa\textKoppa + \or\greeknumeralninety\greeknumeralNinety % koppa or qoppa \else {}{}% \fi @@ -1096,19 +1408,13 @@ % % \begin{macro}{\greek@alph} % \begin{macro}{\greek@Alph} -% In the previous release of this language definition the +% In the previous release of this language definition file 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 +% They are defined in a way that even page numbering with greek +% numerals is possible. +% +% 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} @@ -1116,100 +1422,103 @@ \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} +% Redefine the internal macros |\@alph| and |\@Alph| in the +% language hook, so that we use Greek numerals\footnote{ +% cf.\ section \ref{sec:Greek numerals}} +% instead of the Latin alphabet\footnote{ +% Eventually interpreted as Latin transliteration and converted +% to Greek letters in a ``strange'' order.} +% in Greek text parts. +% \changes{greek-1.1a}{1997/03/03}{ +% removed two superfluous @'s which made \cs{@alph} undefined} +% \changes{babel-greek-1.12}{2023/03/04}{ +% Save/restore previous expansion of \cs{\@alph} and \cs{\@Alph} +% with every switch to/from Greek.} % \begin{macrocode} \addto\extrasgreek{% + \babel@save\@alph + \babel@save\@Alph \let\@alph\greek@alph - \let\@Alph\greek@Alph} -\addto\noextrasgreek{% - \let\@alph\latin@alph - \let\@Alph\latin@Alph} + \let\@Alph\greek@Alph +} % \end{macrocode} % \end{macro} % \end{macro} % % -% \section{Character codes} +% \subsection{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{greek-euenc.def} from \pkg{greek-fontenc} +% contains the required |\lccode| and |\uccode| corrections from the +% \pkgref{xgreek} package by Apostolos Syropoulos. It is loaded if the +% Greek font encoding is TU (i.e. with XeTeX/LuaTeX), +% see section~\ref{load-greek-font-encoding-definitions}. % -% Greek letters drop diacritics (eccept dialytika and sub-iota) in -% UPPERCASE. This is not cared for by the Unicode standard. -% The file \file{greek-euenc.def} from \pkg{greek-fontenc} -% contains the required |\lccode| and |\uccode| corrections from the -% \pkg{xgreek} package by Apostolos Syropoulos. +% If the Greek font encoding is LGR, character code changes are done here +% because they must be restricted to text parts using the LGR encoding. % \changes{greek-1.5}{2013/06/21}{Support XeTeX/LuaTeX.} -% \changes{greek-1.9d}{2015/07/06}{uclc fixes not included in greek-euenc.def} -% -% 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}.} +% \changes{babel-greek-1.09d}{2015/07/06}{uc-/lccode corrections from xgreek +% are now in greek-euenc.def (the polyglossia version has bugs).} +% \changes{babel-greek-1.12}{2023/03/04}{% +% Only change uc/lccodes if LGR is the \cs{greekfontencoding}.} % \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} +\def\bbl@tempa{LGR} +\ifx\greekfontencoding\bbl@tempa % \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. +% In order to get correct hyphenation we need to set the lower case +% code of a number of characters. +% +% In LGR encoded fonts, diacritics can be obtained using Knuth's +% ligature mechanism (see usage.pdf). This means that the characters +% |<|, |>|, |~|, |`|, |'|, |"|, and \verb=|= may be part of a word. +% Therefore, their |\lccode| is changed when polytonic Greek is in +% effect. For monotonic Greek, we only need |'| and |"|. +% +% The `v' character has a special usage in LGR-encoded fonts: +% The LGR ligature mechanism detects the end of a word and assures that +% a final sigma ($\varsigma$) is used. The `v' after an `s' overrides this +% ligature mechanism so that it is possible to typeset an isolated $\sigma$ +% without it becoming a $\varsigma$. +% Because of this we make sure its lowercase code is not changed. % \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} +% 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} -% \changes{babel-greek-1.9}{2014/07/20}{Added lc codes for chars 128 to 255} +% \changes{babel-greek-1.09}{2014/07/20}{Added lc codes for chars 128 to 255} +% \changes{babel-greek-1.09b}{2014/09/18}{Remove spurious whitespace from +% `extrasgreek' definition (report Eike Schmidt).} +% \begin{macrocode} + \addto\extrasgreek{% + \babel@savevariable{\lccode`v}\lccode`v=`v% + \babel@savevariable{\lccode`\'}\lccode`\'=`\'% + \babel@savevariable{\lccode`\"}\lccode`\"=`\"% + } + \addto\extraspolutonikogreek{% + % \l@greek=\bbl@polygreek + \babel@savevariable{\lccode`\<}\lccode`\<=`\<% + \babel@savevariable{\lccode`\>}\lccode`\>=`\>% + \babel@savevariable{\lccode`\~}\lccode`\~=`\~% + \babel@savevariable{\lccode`\|}\lccode`\|=`\|% + \babel@savevariable{\lccode`\`}\lccode`\`=`\`% + } +% \end{macrocode} % In order to process the suitable characters and in such a way that % hyphenation patterns work also with precomposed characters, it is -% necessary to declare the lc code for all characters, that can be part +% necessary to declare the lc code for all characters that can be part % of a word. We do this in |\extrasgreek| because this is a feature of -% the LGR font encoding (which is the same in all language variants). +% the LGR font encoding (used in all language variants). % This means that multi-accented characters are regarded parts of a word % (and not non-word characters) also in monotonic spelling. -% \changes{babel-greek-1.9e}{2015/11/27}{Fix bug in lccode-setting loop +% \changes{babel-greek-1.09e}{2015/11/27}{Fix bug in lccode-setting loop % (patch by Enrico Gregorio).} % \begin{macrocode} \addto\extrasgreek{% - \babel@savevariable{\lccode`v}\lccode`v=`v% - \babel@savevariable{\lccode`\'}\lccode`\'=`\'% - \babel@savevariable{\lccode`\"}\lccode`\"=`\"% % ``high bit characters'': set in a loop and correct exceptions \@tempcnta=128% \@whilenum\@tempcnta<253\do{% @@ -1228,19 +1537,14 @@ \lccode219=240% GREEK CAPITAL LETTER IOTA WITH DIALYTIKA \lccode223=244% GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA } - - \addto\extraspolutonikogreek{% - % \l@greek=\bbl@polygreek - \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. +% +% In order to drop diacritics (eccept dialytika and sub-iota) in +% UPPERCASE also with the ``input ligatures'' the |\uccode| of the +% relevant characters is set to a dummy character. +% This is only done, if LaTeX is older than 2022/06/01 because +% the |\MakeUppercase| implementation introduced in this version ignores +% uccodes and fails with the ``dummy'' character 0x9f. % \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 @@ -1255,76 +1559,115 @@ % \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} +% \changes{greek-1.3j}{2001/02/03}{Don't use the double caret notation here, +% because other languages might make the caret active.} +% \changes{babel-greek-1.12}{2023/03/04}{ +% Don't change uccodes if LaTeX is from 2022/06/01 or newer.} % \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% - } + % fallback for for LaTeX versions older than 2020-10-01 + \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} + \IfFormatAtLeastTF{2022/06/01}% + {} + {% else + \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} +% To avoid \pkg{inputenc} errors if the tilde is used as perispomeni +% (in polytonic or ancient Greek), we need to declare an expansion for +% the ``dummy'' character~0x9f = 159.\footnote{ +% Since UTF-8 became the default encoding (cf.\ +% \href{https://www.latex-project.org/news/latex2e-news/ltnews28.pdf} +% {LaTeX News~28}), an ``inputenc'' error is also thrown +% if the \pkg{inputenc} package is not loaded.} +% To be independent of \pkg{inputenc}, we do not use |\DeclareInputText| +% but code modelled after its definition to declare an empty expansion. +% \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 monotonic Greek, not polytonik Greek} +% \changes{greek-1.3j}{2001/02/03}{ +% Use the tilde as an alias for character 159} +% \changes{babel-greek-1.12}{2023/03/04}{ +% Declare char 159 expansion similar to the way it is done +% in \pkg{inputenc} to avoid ``inputenc error''.} % \begin{macrocode} - \@tempcnta=\lccode`\~ - \lccode`\~=159 - \lowercase{% - \initiate@active@char{~}% - \declare@shorthand{greek}{~}{}} - \lccode`\~=\@tempcnta + \bgroup + \uccode`\~159% + \uppercase{% + \egroup + \def~{}% + } % \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''.} +% ``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).} -% \changes{greek-1.9}{2014/07/20}{The |^^|-notation seems to require lower case -% letters. |^^9F| failed.} +% with ^^-notation (thanks to Heiko Oberdiek for the hint).} +% \changes{babel-greek-1.09}{2014/07/20}{The |^^|-notation seems to require +% lower case letters. |^^9F| failed.} +% \changes{babel-greek-1.09h}{2019/07/11}{Move breathing composite commands +% to textalpha.} +% \begin{macrocode} + \DeclareTextCompositeCommand{\"}{LGR}{^^9f}{\accdialytika} + \DeclareTextCompositeCommand{\'}{LGR}{^^9f}{\LGR@hiatus} + \DeclareTextCompositeCommand{\`}{LGR}{^^9f}{\LGR@accdropped} +% \end{macrocode} +% If Unicode fonts are loaded together with LGR, we must also care for +% |\"'| and |\"`| in TU, because the \" is kept when upcasing. % \begin{macrocode} - \DeclareTextCompositeCommand{\"}{LGR}{^^9f}{\accdialytika} - \DeclareTextCompositeCommand{\'}{LGR}{^^9f}{\LGR@hiatus} - \DeclareTextCompositeCommand{\`}{LGR}{^^9f}{\LGR@hiatus} + \ifdefined\UnicodeEncodingName % set by XeTeX/LuaTeX + \DeclareTextCompositeCommand{\"}{TU}{^^9f}{\accdialytika} + \fi + }% end of the \IfFormatAtLeastTF else block % \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. +% \begin{macro}{\greek@tilde} +% By default, the tilde produces an unbreakable space in text mode. +% In polytonic and ancient Greek, we change its meaning to allow +% using |~| in the Latin transliteration of characters with perispomeni. +% As the perispomeni is not required with monotonic Greek, this is +% only done for the variants ``polutoniko'' and ``ancient'' +% (in |\extraspolutonikogreek|). +% +% Let the tilde character expand to a tilde with category code 12. +% \changes{greek-1.0c}{1997/02/19}{Added command} % \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.} +% \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} - \addto\extraspolutonikogreek{\languageshorthands{greek}}% + \begingroup + \@ifundefined{active@char\string!}{}{\catcode`!=12\relax} + \catcode`\~=12% + \lccode`\!=`\~% + \lowercase{\def\x{\endgroup + \def\greek@tilde{!}}\x} + \addto\extraspolutonikogreek{\languageshorthands{greek}} \declare@shorthand{greek}{~}{\greek@tilde} -}{} % End of LGR-specific code. % \end{macrocode} % \end{macro} -% \end{macro} +% \begin{macrocode} +\fi % End of LGR-specific code. +% \end{macrocode} % -% \section{symbol name aliases} +% +% \subsection{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}} @@ -1335,9 +1678,9 @@ % the remaining symbol definitions have been moved here} % \changes{greek-1.5}{2013/06/11}{change symbol macros to aliases} % \changes{greek-1.10}{2020/11/10}{Fix: \cs{qoppa} is the legacy name of -% \cs{textkoppa} not \cs{textqoppa}! -% Provide fallbacks for makros required for greek numerals -% (added in greek-fontenc 1.0 2020-09-25).} +% \cs{textkoppa} not \cs{textqoppa}!} +% \changes{babel-greek-1.12}{2023/03/04}{Remove \cs{textKoppa} and +% \cs{textmu} (in greek-fontenc since version 1.0).} % \begin{macrocode} \providecommand*{\anwtonos}{\textdexiakeraia} \providecommand*{\katwtonos}{\textaristerikeraia} @@ -1350,20 +1693,11 @@ \providecommand*{\vardigamma}{\textvardigamma} \providecommand*{\euro}{\texteuro} \providecommand*{\permill}{\textperthousand} -% \end{macrocode} -% TODO remove the following lines once greek-fontenc 1.0 is in common use. -% \begin{macrocode} -\@ifl@aded{def}{lgrenc}{% - \ProvideTextCommand{\textKoppa}{LGR}{\textkoppa} - \ProvideTextCommand{\textmugreek}{LGR}{\textmu} -}{} \ProvideTextCommand{\textmugreek}{\greekfontencoding}{\textmu} % \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.} +% \changes{babel-greek-1.08}{2013/11/27}{Remove redefinition of +% \cs{fnum@figure} and \cs{fnum@table}.} % % The macro |\ldf@finish| takes care of looking for a % configuration file, setting the main language to be switched on @@ -1375,6 +1709,8 @@ %</code> % \end{macrocode} % +% \PrintChanges +% % \Finale %\endinput %% \CharacterTable |