\documentclass{article}

\usepackage[unicode,colorlinks=true,linkcolor=blue]{hyperref}
% \usepackage{bookmark}

\usepackage[LGR,T1]{fontenc}
\usepackage{lmodern}

\usepackage[greek,english]{babel}
\usepackage[normalize-symbols]{alphabeta}
\usepackage[utf8]{inputenc}

% \pagestyle{headings}

\IfFormatAtLeastTF{2022/06/01}
  {\newcommand*{\testnewmakeuppercase}{\MakeUppercase}}
  {\newcommand*{\testnewmakeuppercase}{\relax}}

\begin{document}

\title{Greek and hyperref}
\author{Günter Milde}
\date{2020/10/30}
\maketitle

\noindent
On 2010-11-05, Heiko Oberdiek wrote in comp.text.tex:
%
\begin{quote}
   \textbackslash pdfstringdef (converting TeX code to PDF strings for
   bookmarks) supports NFSS2 and needs active characters. Encoding
   stuff based on the internal font machinery of TeX (letters with
   catcode 11 or 12, ligatures) does not work, because the strings
   don't reach TeX's stomach.
\end{quote}
%
The \emph{greek-fontenc} package allows input of Greek characters in a way
that ``reaches TeX's stomach'' and hence works in both, the main document as
well as in PDF strings (e.g. bookmarks). Hyperref's ``puenc.def`` font
encoding file defines LICR macros for monotonic Greek (Greek characters of
the ``Greek and Coptic'' unicode block).

All utf8-encoded literal Unicode characters work in PDF strings. With
\emph{greek-fontenc} and \emph{greek-inputenc}, this enables use of all
Greek character in text and PDF strings.

With the \emph{textalpha} package, Greek letters can be used without
explicit change of the font encoding or Babel language (with some caveats,
see textalpha-doc.pdf).
For correct hyphenation and other fixes, mark Greek text parts with the
Babel language \texttt{greek}. There should be no space around a language
switch: |\foreignlanguage{greek}{λογος}|

\section{Transcription: \ensuregreek{logos}, \foreignlanguage{greek}{logos}}

Text input using the Latin transliteration:
In the PDF-bookmark are Latin letters instead of Greek ones.

\section{Macros:
	 \foreignlanguage{greek}{%
           \textlambda\textomicron\textgamma\textomicron\textvarsigma},
	 \textlambda\textomicron\textgamma\textomicron\textvarsigma{},
         \lambda\omicron\gamma\omicron\varsigma{},
	 λογος,
	}

\emph{Babel-Greek} or \emph{textalpha} package with \verb|\textalpha| \ldots
\verb|textomega| macros; \emph{alphabeta} package with
\verb|alpha| \ldots \verb|Omega| macros.
With 8-bit TeX (pdflatex), literal Greek Unicode characters are
converted to LICR Macros, too.

Works, if the \texttt{unicode} or \texttt{pdfencoding=auto} option is given
to \emph{hyperref}.%
\footnote{With the ``xpdf'' viewer, Greek letters are not shown
	  in PDF bookmarks.}


\section{%
  Kerning: \textAlpha\textUpsilon\textLambda{}
  	   \ensuregreek{\textAlpha\textUpsilon\textLambda}
  	   \foreignlanguage{greek}{\textAlpha\textUpsilon\textLambda}%
}

Kerning is impossible if the font encoding is switched for every single
character. To fix this, wrap the Greek part in a command switching to a font
encoding supporting Greek, either \verb+\ensuregreek{...}+ (with package
\emph{textalpha} or \emph{Babel}) or \verb+\foreignlanguage{greek}{...}+
(with \emph{Babel}).

\section{Literal Unicode input}
The following subsection headings contain all characters from the ``Greek
and Coptic'' and ``Greek Extended'' Unicode Blocks that are supported by the
LGR font encoding.
\subsection{ʹ͵ͺ; ΄ ΅ Ά·ΈΉΊΌΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝ}
\subsection{ΞΟΠΡΣΤΥΦΧΨΩΪΫϘϚϜϠ}
Greek and Coptic Unicode block: punctuation and uppercase letters

\subsection{άέήίΰαβγδεζηθικλμν}
\subsection{ξοπρςστυφχψωϊϋόύώϐϑϕϖϘϙϛϝϟϡ}

Greek and Coptic Unicode block: lowercase letters

\subsection{ἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏ}
\subsection{ἐἑἒἓἔἕἘἙἚἛἜἝ}
\subsection{ἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯ}
\subsection{ἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿ}
\subsection{ὀὁὂὃὄὅὈὉὊὋὌὍ}
\subsection{ὐὑὒὓὔὕὖὗὙὛὝὟ}
\subsection{ὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯ}
\subsection{ὰάὲέὴήὶίὸόὺύὼώ}
\subsection{ᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏ}
\subsection{ᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟ}
\subsection{ᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯ}
\subsection{ᾰᾱᾲᾳᾴᾶᾷᾸᾹᾺΆᾼ᾽ι᾿}
\subsection{῀῁ῂῃῄῆῇῈΈῊΉῌ῍῎῏}
\subsection{ῐῑῒΐῖῗῘῙῚΊ῝῞῟}
\subsection{ῠῡῢΰῤῥῦῧῨῩῪΎῬ῭΅`}
\subsection{ῲῳῴῶῷῸΌῺΏῼ´῾}

Greek Extended Unicode block: Input as literal precomposed Unicode character
works fine.

\section{LICR command input}

\subsection{\ensuregreek{
  \textnumeralsigngreek
  \textnumeralsignlowergreek
  { }\ypogegrammeni
  \texterotimatiko
  \acctonos{ }
  \"'{ }
  \'\textAlpha
  \textanoteleia
  \'\textEpsilon
  \'\textEta
  \'\textIota
  \'\textOmicron
  \'\textUpsilon
  \'\textOmega
  \'"\textiota
  \textAlpha
  \textBeta
  \textGamma
  \textDelta
  \textEpsilon
  \textZeta
  \textEta
  \textTheta
  \textIota
  \textKappa
  \textLambda
  \textMu
  \textNu}}
\subsection{\ensuregreek{
  \textXi
  \textOmicron
  \textPi
  \textRho
  \textSigma
  \textTau
  \textUpsilon
  \textPhi
  \textChi
  \textPsi
  \textOmega
  \"\textIota
  \"\textUpsilon
}}

\subsection{\ensuregreek{
  \'\textalpha
  \'\textepsilon
  \'\texteta
  \'\textiota
  \"'\textupsilon
  \textalpha
  \textbeta
  \textgamma
  \textdelta
  \textepsilon
  \textzeta
  \texteta
  \texttheta
  \textiota
  \textkappa
  \textlambda
  \textmu
  \textnu}}
\subsection{\ensuregreek{
  \textxi
  \textomicron
  \textpi
  \textrho
  \textvarsigma
  \textsigma
  \texttau
  \textupsilon
  \textphi
  \textchi
  \textpsi
  \textomega
  \"\textiota
  \"\textupsilon
  \'\textomicron
  \'\textupsilon
  \'\textomega
  \textbetasymbol
  \textthetasymbol
  \textphisymbol
  \textpisymbol
  \textQoppa
  \textqoppa
  \textStigma
  \textstigma
  \textDigamma
  \textdigamma
  \textKoppa
  \textkoppa
  \textSampi
  \textsampi
}}


\emph{textalpha} load definitions for LICR input with non-standard
accents or combined diacritics characters also for PU (hyperref).

\subsection{\ensuregreek{
  \>\textalpha
  \<\textalpha
  \>`\textalpha
  \<`\textalpha
  \>'\textalpha
  \<'\textalpha
  \~>\textalpha
  \~<\textalpha
  \>\textAlpha
  \<\textAlpha
  \>`\textAlpha
  \<`\textAlpha
  \>'\textAlpha
  \<'\textAlpha
  \~>\textAlpha
  \~<\textAlpha
}}
\subsection{\ensuregreek{
  \>\textepsilon
  \<\textepsilon
  \>`\textepsilon
  \<`\textepsilon
  \>'\textepsilon
  \<'\textepsilon
  \>\textEpsilon
  \<\textEpsilon
  \>`\textEpsilon
  \<`\textEpsilon
  \>'\textEpsilon
  \<'\textEpsilon
}}
\subsection{\ensuregreek{
  \>\texteta
  \<\texteta
  \>`\texteta
  \<`\texteta
  \>'\texteta
  \<'\texteta
  \~>\texteta
  \~<\texteta
  \>\textEta
  \<\textEta
  \>`\textEta
  \<`\textEta
  \>'\textEta
  \<'\textEta
  \~>\textEta
  \~<\textEta
}}
\subsection{\ensuregreek{
  \>\textiota
  \<\textiota
  \>`\textiota
  \<`\textiota
  \>'\textiota
  \<'\textiota
  \~>\textiota
  \~<\textiota
  \>\textIota
  \<\textIota
  \>`\textIota
  \<`\textIota
  \>'\textIota
  \<'\textIota
  \~>\textIota
  \~<\textIota
}}
\subsection{\ensuregreek{
  \>\textomicron
  \<\textomicron
  \>`\textomicron
  \<`\textomicron
  \>'\textomicron
  \<'\textomicron
  \>\textOmicron
  \<\textOmicron
  \>`\textOmicron
  \<`\textOmicron
  \>'\textOmicron
  \<'\textOmicron
}}
\subsection{\ensuregreek{
  \>\textupsilon
  \<\textupsilon
  \>`\textupsilon
  \<`\textupsilon
  \>'\textupsilon
  \<'\textupsilon
  \~>\textupsilon
  \~<\textupsilon
  \<\textUpsilon
  \<`\textUpsilon
  \<'\textUpsilon
  \~<\textUpsilon
}}
\subsection{\ensuregreek{
  \>\textomega
  \<\textomega
  \>`\textomega
  \<`\textomega
  \>'\textomega
  \<'\textomega
  \~>\textomega
  \~<\textomega
  \>\textOmega
  \<\textOmega
  \>`\textOmega
  \<`\textOmega
  \>'\textOmega
  \<'\textOmega
  \~>\textOmega
  \~<\textOmega
}}
\subsection{\ensuregreek{
  \accvaria\textalpha
  \accoxia\textalpha
  \accvaria\textepsilon
  \accoxia\textepsilon
  \accvaria\texteta
  \accoxia\texteta
  \accvaria\textiota
  \accoxia\textiota
  \accvaria\textomicron
  \accoxia\textomicron
  \accvaria\textupsilon
  \accoxia\textupsilon
  \accvaria\textomega
  \accoxia\textomega
}}
\subsection{\ensuregreek{
  \>\textalpha\ypogegrammeni
  \<\textalpha\ypogegrammeni
  \>`\textalpha\ypogegrammeni
  \<`\textalpha\ypogegrammeni
  \>'\textalpha\ypogegrammeni
  \<'\textalpha\ypogegrammeni
  \~>\textalpha\ypogegrammeni
  \~<\textalpha\ypogegrammeni
  \>\textAlpha\ypogegrammeni
  \<\textAlpha\ypogegrammeni
  \>`\textAlpha\ypogegrammeni
  \<`\textAlpha\ypogegrammeni
  \>'\textAlpha\ypogegrammeni
  \<'\textAlpha\ypogegrammeni
  \~>\textAlpha\ypogegrammeni
  \~<\textAlpha\ypogegrammeni
}}
\subsection{\ensuregreek{
  \>\texteta\ypogegrammeni
  \<\texteta\ypogegrammeni
  \>`\texteta\ypogegrammeni
  \<`\texteta\ypogegrammeni
  \>'\texteta\ypogegrammeni
  \<'\texteta\ypogegrammeni
  \~>\texteta\ypogegrammeni
  \~<\texteta\ypogegrammeni
  \>\textEta\ypogegrammeni
  \<\textEta\ypogegrammeni
  \>`\textEta\ypogegrammeni
  \<`\textEta\ypogegrammeni
  \>'\textEta\ypogegrammeni
  \<'\textEta\ypogegrammeni
  \~>\textEta\ypogegrammeni
  \~<\textEta\ypogegrammeni
}}
\subsection{\ensuregreek{
  \>\textomega\ypogegrammeni
  \<\textomega\ypogegrammeni
  \>`\textomega\ypogegrammeni
  \<`\textomega\ypogegrammeni
  \>'\textomega\ypogegrammeni
  \<'\textomega\ypogegrammeni
  \~>\textomega\ypogegrammeni
  \~<\textomega\ypogegrammeni
  \>\textOmega\ypogegrammeni
  \<\textOmega\ypogegrammeni
  \>`\textOmega\ypogegrammeni
  \<`\textOmega\ypogegrammeni
  \>'\textOmega\ypogegrammeni
  \<'\textOmega\ypogegrammeni
  \~>\textOmega\ypogegrammeni
  \~<\textOmega\ypogegrammeni
}}
\subsection{\ensuregreek{
  \u\textalpha
  \=\textalpha
  \accvaria\textalpha\ypogegrammeni
  \textalpha\ypogegrammeni
  \accoxia\textalpha\ypogegrammeni
  \~\textalpha
  \~\textalpha\ypogegrammeni
  \u\textAlpha
  \=\textAlpha
  \accvaria\textAlpha
  \accoxia\textAlpha
  \textAlpha\ypogegrammeni
  \>{ }
  { }\prosgegrammeni
  \>{ }
}}
\subsection{\ensuregreek{
  \accperispomeni\textcompwordmark
  \"\~{ }
  \accvaria\texteta\ypogegrammeni
  \texteta\ypogegrammeni
  \accoxia\texteta\ypogegrammeni
  \~\texteta
  \~\texteta\ypogegrammeni
  \accvaria\textEpsilon
  \accoxia\textEpsilon
  \accvaria\textEta
  \accoxia\textEta
  \textEta\ypogegrammeni
  \>`{ }
  \>'{ }
  \~>{ }
}}
\subsection{\ensuregreek{
  \u\textiota
  \=\textiota
  \`"\textiota
  \'"\textiota
  \~\textiota
  \~"\textiota
  \u\textIota
  \=\textIota
  \accvaria\textIota
  \accoxia\textIota
  \<`{ }
  \>'{ }
  \~<{ }
}}
\subsection{\ensuregreek{
  \u\textupsilon
  \=\textupsilon
  \`"\textupsilon
  \'"\textupsilon
  \>\textrho
  \<\textrho
  \~\textupsilon
  \~"\textupsilon
  \u\textUpsilon
  \=\textUpsilon
  \accvaria\textUpsilon
  \accoxia\textUpsilon
  \<\textRho
  \`"{ }
  \'"{ }
  \accvaria{ }
}}
\subsection{\ensuregreek{
  \accvaria\textomega\ypogegrammeni
  \textomega\ypogegrammeni
  \accoxia\textomega\ypogegrammeni
  \~\textomega
  \~\textomega\ypogegrammeni
  \accvaria\textOmicron
  \accoxia\textOmicron
  \accvaria\textOmega
  \accoxia\textOmega
  \textOmega\ypogegrammeni
  \accoxia{ }
  \<{ }
}}

\section{Makeuppercase}

According to Greek typesetting conventions,
diacritics (except the dialytika) are dropped in UPPERCASE.

The LaTeX \verb|\Makeuppercase| implementation changed fundamentally
with the release in 06/2022.\footnote{%
  This change cannot be reverted with the rollback mechanism
  ``for technical reasons''.}
\verb|\Makeuppercase| is now supported PDF-strings.
Greek typesetting rules are ony applied if the text language is
set to \texttt{greek} with Babel's \verb|\setlanguage| or
\verb|\foreignlanguage|.

The changes broke the support for upcasing of polutonic Greek (combined
accents) with LICR input and of Greek with the LGR Latin transliteration.
Restoring support is currently (2023/02/10) worked on.

\selectlanguage{greek}
\subsection{\testnewmakeuppercase{ἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏ}}

\selectlanguage{english}
\verb|Makeuppercase| is not supported in PDF strings with LaTeX versions
older than 06/2022.

\section{Conclusion}

For Greek text parts in section headers use either literal Unicode characters%
  \footnote{Pre-composed Unicode characters must be used for multi-accented
  letters or non-standard accents. Combining Unicode characters do not work
  with inputenc and 8-bit LaTeX – this is a general restriction.}
or macros. For proper kerning und upcasing in the main document, set the
language with \verb|\foreignlanguage{greek}|.

\end{document}
