diff options
Diffstat (limited to 'language/greek/greek-fontenc/char-list.tex')
-rw-r--r-- | language/greek/greek-fontenc/char-list.tex | 451 |
1 files changed, 254 insertions, 197 deletions
diff --git a/language/greek/greek-fontenc/char-list.tex b/language/greek/greek-fontenc/char-list.tex index 72b993393e..027065bb0d 100644 --- a/language/greek/greek-fontenc/char-list.tex +++ b/language/greek/greek-fontenc/char-list.tex @@ -1,24 +1,25 @@ \documentclass[a4paper]{article} - +\usepackage[left=3.5cm, right=3.5cm]{geometry} \ifdefined \UnicodeEncodingName \usepackage{fontspec} - \setmainfont{FreeSerif} - % \setmainfont{Linux Libertine O} + % The Harfbuzz renderer provides selection of pre-composed characters + % (NFC normalization) with LuaTeX + \setmainfont[Renderer=Harfbuzz]{FreeSerif} + % \setmainfont[Renderer=Harfbuzz]{Linux Libertine O} \ifdefined\luatexversion - \newcommand*{\texengine}{LuaLaTeX} + \newcommand*{\texengine}{LuaTeX} \else - \newcommand*{\texengine}{XeLaTeX} + \newcommand*{\texengine}{XeTeX} \fi \newcommand*{\ux}[2]{#1} \else \usepackage[LGR,T1]{fontenc} \usepackage{lmodern} - \newcommand*{\texengine}{pdfLaTeX} + \newcommand*{\texengine}{pdfTeX} \newcommand*{\ux}[2]{#2} \fi - % Load encoding definitions \usepackage[normalize-symbols]{textalpha} % "Greek script everywhere" @@ -55,6 +56,7 @@ \providecommand*{\greekfontencoding}{undefined} \newcommand{\cs}[1]{\texttt{\textbackslash#1}} +\newcommand{\pkgref}[1]{\emph{\href{https://ctan.org/pkg/#1}{#1}}} % print the selected language variant \newcommand*{\GreekLanguageVariant}{% @@ -74,14 +76,8 @@ & \Greek{#1} & \Greek{\MakeUppercase{#1}} & \Greek{\MakeLowercase{#1}} } -\newcommand*{\TestUppercase}[1]{% - \Greek{#1 → \MakeUppercase{#1}}% -} +\newcommand*{\TestUppercase}[1]{\Greek{#1 → \MakeUppercase{#1}}} -% % Test: pre-composed characters with LuaTeX -% \ifdefined\luatexversion -% \DeclareUnicodeComposite{\'}{Α} {"0386} % Ά -% \fi % ----------------------------------------------------------------------- @@ -92,7 +88,7 @@ \maketitle \abstract{ \noindent This document lists all Greek characters that are -supported by \emph{greek-fontenc}. It also tests the outcome of +supported by \emph{greek-fontenc} and tests the outcome of \cs{MakeUppercase} and \cs{MakeLowercase} for different input variants (literal input, LICR% \footnote{LaTeX internal character representation} @@ -140,13 +136,13 @@ Characters from the Greek and Coptic Unicode block that are supported by \begin{longtable}{llll} x0374 \Cases{ ʹ \textdexiakeraia{} } \\ x0375 \Cases{ ͵ \textaristerikeraia{} } \\ - x037A \Cases{ ͺ { }\ypogegrammeni{} { }\ypogegrammeni{} \ux{ͺ} {| |} } \\ - 0x37E \Cases{ ; \texterotimatiko{} \texterotimatiko{} \ux{;} {? ?} } \\ + x037A \Cases{ ͺ { }\ypogegrammeni{} \ux{} {| } } \\ + x037E \Cases{ ; \texterotimatiko{} \ux{} {? } } \\ \\ - x0384 \Cases{ ΄ \acctonos{ } \'{ } \ux{΄} {\'{} '} } \\ + x0384 \Cases{ ΄ \acctonos{ } \'{ } \ux{} {\'{} '} } \\ x0385 \Cases{ ΅ \accdialytikatonos{ } \"'{ } \ux{\"'{}} {\"'{} "'} } \\ x0386 \Cases{ Ά \acctonos\textAlpha{} \'\textAlpha{} \ux{\'Α} {\'A 'A} } \\ - x0387 \Cases{ · \textanoteleia{} \textanoteleia{} \ux{·} {; ;} } \\ + x0387 \Cases{ · \textanoteleia{} \textanoteleia{} \ux{} {; ;} } \\ x0388 \Cases{ Έ \acctonos\textEpsilon{} \'\textEpsilon{} \ux{\'Ε} {\'E 'E} } \\ x0389 \Cases{ Ή \acctonos\textEta{} \'\textEta{} \ux{\'Η} {\'H 'H} } \\ x038A \Cases{ Ί \acctonos\textIota{} \'\textIota{} \ux{\'Ι} {\'I 'I} } \\ @@ -154,76 +150,81 @@ Characters from the Greek and Coptic Unicode block that are supported by x038E \Cases{ Ύ \acctonos\textUpsilon{} \'\textUpsilon{} \ux{\'Υ} {\'U 'U} } \\ x038F \Cases{ Ώ \acctonos\textOmega{} \'\textOmega{} \ux{\'Ω} {\'W 'W} } \\ \\ - x0390 \Cases{ ΐ \accdialytikatonos\textiota{} \'"\textiota{} \ux{\'"ι \"'ι \'\"ι \"\'ι} {\'"i \"'i \'\"i \"\'i '"i "'i} } \\ - x0391 \Cases{ Α \textAlpha{} \textAlpha{} \ux{Α} {A A } } \\ - x0392 \Cases{ Β \textBeta{} \textBeta{} \ux{Β} {B B } } \\ - x0393 \Cases{ Γ \textGamma{} \textGamma{} \ux{Γ} {G G } } \\ - x0394 \Cases{ Δ \textDelta{} \textDelta{} \ux{Δ} {D D } } \\ - x0395 \Cases{ Ε \textEpsilon{} \textEpsilon{} \ux{Ε} {E E } } \\ - x0396 \Cases{ Ζ \textZeta{} \textZeta{} \ux{Ζ} {Z Z } } \\ - x0397 \Cases{ Η \textEta{} \textEta{} \ux{Η} {H H } } \\ - x0398 \Cases{ Θ \textTheta{} \textTheta{} \ux{Θ} {J J } } \\ - x0399 \Cases{ Ι \textIota{} \textIota{} \ux{Ι} {I I } } \\ - x039A \Cases{ Κ \textKappa{} \textKappa{} \ux{Κ} {K K } } \\ - x039B \Cases{ Λ \textLambda{} \textLambda{} \ux{Λ} {L L } } \\ - x039C \Cases{ Μ \textMu{} \textMu{} \ux{Μ} {M M } } \\ - x039D \Cases{ Ν \textNu{} \textNu{} \ux{Ν} {N N } } \\ - x039E \Cases{ Ξ \textXi{} \textXi{} \ux{Ξ} {X X } } \\ - x039F \Cases{ Ο \textOmicron{} \textOmicron{} \ux{Ο} {O O } } \\ + x0390 \Cases{ ΐ \accdialytikatonos\textiota{} \'"\textiota{} \ux{\'"ι \"'ι \'\"ι \"\'ι} {\'"i \"'i \'\"i \"\'i '"i "'i}}% + \ux{}{\footnote{With the pre-2022 \cs{MakeUppercase} and literal input, + the order of combined accents involving the dialytika is important, + e.g., \texttt{"'i} results in \Greek{"'i → "vI}.}} \\ + x0391 \Cases{ Α \textAlpha{} \ux{} {A } } \\ + x0392 \Cases{ Β \textBeta{} \ux{} {B } } \\ + x0393 \Cases{ Γ \textGamma{} \ux{} {G } } \\ + x0394 \Cases{ Δ \textDelta{} \ux{} {D } } \\ + x0395 \Cases{ Ε \textEpsilon{} \ux{} {E } } \\ + x0396 \Cases{ Ζ \textZeta{} \ux{} {Z } } \\ + x0397 \Cases{ Η \textEta{} \ux{} {H } } \\ + x0398 \Cases{ Θ \textTheta{} \textvarTheta{} \ux{} {J } } \\ + x0399 \Cases{ Ι \textIota{} \ux{} {I } } \\ + x039A \Cases{ Κ \textKappa{} \ux{} {K } } \\ + x039B \Cases{ Λ \textLambda{} \ux{} {L } } \\ + x039C \Cases{ Μ \textMu{} \ux{} {M } } \\ + x039D \Cases{ Ν \textNu{} \ux{} {N } } \\ + x039E \Cases{ Ξ \textXi{} \ux{} {X } } \\ + x039F \Cases{ Ο \textOmicron{} \ux{} {O } } \\ \\ - 0x3A0 \Cases{ Π \textPi{} \textPi{} \ux{Π} {P P } } \\ - 0x3A1 \Cases{ Ρ \textRho{} \textRho{} \ux{Ρ} {R R } } \\ - 0x3A3 \Cases{ Σ \textSigma{} \textSigma{} \ux{Σ} {S S } } \\ - 0x3A4 \Cases{ Τ \textTau{} \textTau{} \ux{Τ} {T T } } \\ - 0x3A5 \Cases{ Υ \textUpsilon{} \textUpsilon{} \ux{Υ} {U U } } \\ - 0x3A6 \Cases{ Φ \textPhi{} \textPhi{} \ux{Φ} {F F } } \\ - 0x3A7 \Cases{ Χ \textChi{} \textChi{} \ux{Χ} {Q Q } } \\ - 0x3A8 \Cases{ Ψ \textPsi{} \textPsi{} \ux{Ψ} {Y Y } } \\ - 0x3A9 \Cases{ Ω \textOmega{} \textOmega{} \ux{Ω} {W W } } \\ + 0x3A0 \Cases{ Π \textPi{} \ux{} {P } } \\ + 0x3A1 \Cases{ Ρ \textRho{} \ux{} {R } } \\ + 0x3A3 \Cases{ Σ \textSigma{} \ux{} {S } }% + cf. section~\ref{sec:sigma} \\ + 0x3A4 \Cases{ Τ \textTau{} \ux{} {T } } \\ + 0x3A5 \Cases{ Υ \textUpsilon{} \ux{} {U } } \\ + 0x3A6 \Cases{ Φ \textPhi{} \ux{} {F } } \\ + 0x3A7 \Cases{ Χ \textChi{} \ux{} {Q } } \\ + 0x3A8 \Cases{ Ψ \textPsi{} \ux{} {Y } } \\ + 0x3A9 \Cases{ Ω \textOmega{} \ux{} {W } } \\ 0x3AA \Cases{ Ϊ \accdialytika\textIota{} \"\textIota{} \ux{\"Ι} {\"I "I } } \\ 0x3AB \Cases{ Ϋ \accdialytika\textUpsilon{} \"\textUpsilon{} \ux{\"Υ} {\"U "U } } \\ 0x3AC \Cases{ ά \acctonos\textalpha{} \'\textalpha{} \ux{\'α} {\'a 'a } } \\ 0x3AD \Cases{ έ \acctonos\textepsilon{} \'\textepsilon{} \ux{\'ε} {\'e 'e } } \\ 0x3AE \Cases{ ή \acctonos\texteta{} \'\texteta{} \ux{\'η} {\'h 'h } } \\ 0x3AF \Cases{ ί \acctonos\textiota{} \'\textiota{} \ux{\'ι} {\'i 'i } } \\ - \\ + \\ x03B0 \Cases{ ΰ \accdialytikatonos\textupsilon{} \"'\textupsilon{} \ux{\"'υ \'"υ \'\"υ \"\'υ} {\'"u \"'u \'\"u \"\'u '"u "'u} } \\ - x03B1 \Cases{ α \textalpha{} \textalpha{} \ux{α} {a a } } \\ - x03B2 \Cases{ β \textbeta{} \textbeta{} \ux{β} {b b } } \\ - x03B3 \Cases{ γ \textgamma{} \textgamma{} \ux{γ} {g g } } \\ - x03B4 \Cases{ δ \textdelta{} \textdelta{} \ux{δ} {d d } } \\ - x03B5 \Cases{ ε \textepsilon{} \textepsilon{} \ux{ε} {e e } } \\ - x03B6 \Cases{ ζ \textzeta{} \textzeta{} \ux{ζ} {z z } } \\ - x03B7 \Cases{ η \texteta{} \texteta{} \ux{η} {h h } } \\ - x03B8 \Cases{ θ \texttheta{} \texttheta{} \ux{θ} {j j } } \\ - x03B9 \Cases{ ι \textiota{} \textiota{} \ux{ι} {i i } } \\ - x03BA \Cases{ κ \textkappa{} \textkappa{} \ux{κ} {k k } } \\ - x03BB \Cases{ λ \textlambda{} \textlambda{} \ux{λ} {l l } } \\ - x03BC \Cases{ μ \textmu{} \textmu{} \ux{μ} {m m } } \\ - x03BD \Cases{ ν \textnu{} \textnu{} \ux{ν} {n n } } \\ - x03BE \Cases{ ξ \textxi{} \textxi{} \ux{ξ} {x x } } \\ - x03BF \Cases{ ο \textomicron{} \textomicron{} \ux{ο} {o o } } \\ + x03B1 \Cases{ α \textalpha{} \ux{} {a } } \\ + x03B2 \Cases{ β \textbeta{} \ux{} {b } } \\ + x03B3 \Cases{ γ \textgamma{} \ux{} {g } } \\ + x03B4 \Cases{ δ \textdelta{} \ux{} {d } } \\ + x03B5 \Cases{ ε \textepsilon{} \textvarepsilon{} \ux{} {e } } \\ + x03B6 \Cases{ ζ \textzeta{} \ux{} {z } } \\ + x03B7 \Cases{ η \texteta{} \ux{} {h } } \\ + x03B8 \Cases{ θ \texttheta{} \ux{} {j } } \\ + x03B9 \Cases{ ι \textiota{} \ux{} {i } } \\ + x03BA \Cases{ κ \textkappa{} \ux{} {k } } \\ + x03BB \Cases{ λ \textlambda{} \ux{} {l } } \\ + x03BC \Cases{ μ \textmu{} \ux{} {m } } \\ + x03BD \Cases{ ν \textnu{} \ux{} {n } } \\ + x03BE \Cases{ ξ \textxi{} \ux{} {x } } \\ + x03BF \Cases{ ο \textomicron{} \ux{} {o } } \\ \\ - x03C0 \Cases{ π \textpi{} \textpi{} \ux{π} {p p } } \\ - x03C1 \Cases{ ρ \textrho{} \textrho{} \ux{ρ} {r r } } \\ - x03C2 \Cases{ ς \textfinalsigma{} \textfinalsigma{} \ux{ς} {s s } } \\ - x03C3 \Cases{ σ \textsigma{} \textsigma{} \ux{σ} {s\textcompwordmark{} sv } } \\ - x03C4 \Cases{ τ \texttau{} \texttau{} \ux{τ} {t t } } \\ - x03C5 \Cases{ υ \textupsilon{} \textupsilon{} \ux{υ} {u u } } \\ - x03C6 \Cases{ φ \textphi{} \textphi{} \ux{φ} {f f } } \\ - x03C7 \Cases{ χ \textchi{} \textchi{} \ux{χ} {q q } } \\ - x03C8 \Cases{ ψ \textpsi{} \textpsi{} \ux{ψ} {y y } } \\ - x03C9 \Cases{ ω \textomega{} \textomega{} \ux{ω} {w w } } \\ + x03C0 \Cases{ π \textpi{} \ux{} {p } } \\ + x03C1 \Cases{ ρ \textrho{} \ux{} {r } } \\ + x03C2 \Cases{ ς \textfinalsigma{} \textvarsigma{} \ux{} {s } } \\ + x03C3 \Cases{ σ \textsigma{} \textsigma{} \ux{} {s\textcompwordmark{} sv } } + \ux{}{sic!\footnote{transliteration \texttt{sv} fails in uppercase}} \\ + x03C4 \Cases{ τ \texttau{} \ux{} {t } } \\ + x03C5 \Cases{ υ \textupsilon{} \ux{} {u } } \\ + x03C6 \Cases{ φ \textphi{} \textvarphi{} \ux{} {f } } \\ + x03C7 \Cases{ χ \textchi{} \ux{} {q } } \\ + x03C8 \Cases{ ψ \textpsi{} \ux{} {y } } \\ + x03C9 \Cases{ ω \textomega{} \ux{} {w } } \\ x03CA \Cases{ ϊ \accdialytika\textiota{} \"\textiota{} \ux{\"ι} {\"i "i } } \\ x03CB \Cases{ ϋ \accdialytika\textupsilon{} \"\textupsilon{} \ux{\"υ} {\"u "u } } \\ x03CC \Cases{ ό \acctonos\textomicron{} \'\textomicron{} \ux{\'ο} {\'o 'o } } \\ x03CD \Cases{ ύ \acctonos\textupsilon{} \'\textupsilon{} \ux{\'υ} {\'u 'u } } \\ x03CE \Cases{ ώ \acctonos\textomega{} \'\textomega{} \ux{\'ω } {\'w 'w } } \\ - \\ - x03D0 \Cases{ ϐ \textbetasymbol } \\ - x03D1 \Cases{ ϑ \textthetasymbol } \\ - x03D5 \Cases{ ϕ \textphisymbol } \\ - x03D6 \Cases{ ϖ \textpisymbol } \\ + \\ + x03D0 \Cases{ ϐ \textbetasymbol{} \textvarbeta{} } \\ + x03D1 \Cases{ ϑ \textthetasymbol{} \textvartheta{} } \\ + x03D5 \Cases{ ϕ \textphisymbol{} } \\ + x03D6 \Cases{ ϖ \textpisymbol{} \textvarpi{} } \\ x03D8 \Cases{ Ϙ \textQoppa{} } \\ x03D9 \Cases{ ϙ \textqoppa{} } \\ x03DA \Cases{ Ϛ \textStigma{} } \\ @@ -236,10 +237,10 @@ Characters from the Greek and Coptic Unicode block that are supported by x03E0 \Cases{ Ϡ \textSampi{} } \\ x03E1 \Cases{ ϡ \textsampi{} } \\ \\ - x03F0 \Cases{ ϰ \textkappasymbol } \\ - x03F1 \Cases{ ϱ \textrhosymbol } \\ - x03F4 \Cases{ ϴ \textThetasymbol } \\ - x03F5 \Cases{ ϵ \textepsilonsymbol } \\ + x03F0 \Cases{ ϰ \textkappasymbol{} \textvarkappa{} } \\ + x03F1 \Cases{ ϱ \textrhosymbol{} \textvarrho{} } \\ + x03F4 \Cases{ ϴ \textThetasymbol{} } \\ + x03F5 \Cases{ ϵ \textepsilonsymbol{} } \\ \end{longtable} @@ -452,36 +453,42 @@ Characters from the Greek and Coptic Unicode block that are supported by x1FCE \Cases{ ῎ \accpsilioxia{} \>'{} \ux{\>'{} \'>{}} {\>'{} >'} } \\ x1FCF \Cases{ ῏ \accpsiliperispomeni{} \~>{} \ux{\>~{} \~>{}} {\~>{} ~>} } \\ \\ - x1FD0 \Cases{ ῐ \u\textiota{} \u\textiota{} \ux{\u{ι}} {\u{i} \u{i}} } \\ - x1FD1 \Cases{ ῑ \=\textiota{} \=\textiota{} \ux{\=ι} {\=i \=i} } \\ - x1FD2 \Cases{ ῒ \accdialytikavaria\textiota{} \`"\textiota{} \ux{\`"ι \"`ι \`\"ι \"\`ι} {\`"i `"i} } \\ - x1FD3 \Cases{ ΐ \accdialytikatonos\textiota{} \'"\textiota{} \ux{\'"ι \"'ι \'\"ι \"\'ι} {\'"i '"i} } \\ - x1FD6 \Cases{ ῖ \accperispomeni\textiota{} \~\textiota{} \ux{\~ι } {\~i ~i} } \\ - x1FD7 \Cases{ ῗ \accdialytikaperispomeni\textiota{} \~"\textiota{} \ux{\~"ι \"~ι \~\"ι \"\~ι} {\~"i ~"i} } \\ - x1FD8 \Cases{ Ῐ \u\textIota{} \u\textIota{} \ux{\u{Ι}} {\u{I} \u{I}} } \\ - x1FD9 \Cases{ Ῑ \=\textIota{} \=\textIota{} \ux{\=Ι} {\=I \=I} } \\ - x1FDA \Cases{ Ὶ \accvaria\textIota{} \`\textIota{} \ux{\`Ι} {\`I `I} } \\ - x1FDB \Cases{ Ί \accoxia\textIota{} \'\textIota{} \ux{\'Ι} {\'I 'I} } \\ - x1FDD \Cases{ ῝ \accdasiavaria{} \<`{} \ux{\<`{} \`<{}} {\<`{} <`} } \\ - x1FDE \Cases{ ῞ \accdasiaoxia{} \<'{} \ux{\<'{} \'<{}} {\<'{} <'} } \\ - x1FDF \Cases{ ῟ \accdasiaperispomeni{} \~<{} \ux{\<~{} \~<{}} {\~<{} ~<} } \\ - \\ - x1FE0 \Cases{ ῠ \u\textupsilon{} \u\textupsilon{} \ux{\u{υ}} {\u{u} } } \\ - x1FE1 \Cases{ ῡ \=\textupsilon{} \=\textupsilon{} \ux{\=υ} {\=u } } \\ - x1FE2 \Cases{ ῢ \accdialytikavaria\textupsilon{} \`"\textupsilon{} \ux{\`"υ \"`υ \`\"υ \"\`υ} {\`"u \"`u \`\"u \"\`u `"u "`u} } \\ - x1FE3 \Cases{ ΰ \accdialytikatonos\textupsilon{} \'"\textupsilon{} \ux{\'"υ \"'υ \'\"υ \"\'υ} {\'"u \"'u \'\"u \"\'u '"u "'u} } \\ - x1FE4 \Cases{ ῤ \accpsili\textrho{} \>\textrho{} \ux{\>ρ} {\>r >r } } \\ - x1FE5 \Cases{ ῥ \accdasia\textrho{} \<\textrho{} \ux{\<ρ} {\<r <r } } \\ - x1FE6 \Cases{ ῦ \accperispomeni\textupsilon{} \~\textupsilon{} \ux{\~υ} {\~u ~u } } \\ - x1FE7 \Cases{ ῧ \accdialytikaperispomeni\textupsilon{} \~"\textupsilon{} \ux{\~"υ \"~υ \~\"υ \"\~υ} {\~"u \"~u \~\"u \"\~u ~"u "~u} } \\ - x1FE8 \Cases{ Ῠ \u\textUpsilon{} \u\textUpsilon{} \ux{\u{Υ}} {\u{U} \u{U}} } \\ - x1FE9 \Cases{ Ῡ \=\textUpsilon{} \=\textUpsilon{} \ux{\=Υ} {\=U \=U} } \\ - x1FEA \Cases{ Ὺ \accvaria\textUpsilon{} \`\textUpsilon{} \ux{\`Υ} {\`U `U} } \\ - x1FEB \Cases{ Ύ \accoxia\textUpsilon{} \'\textUpsilon{} \ux{\'Υ} {\'U 'U} } \\ - x1FEC \Cases{ Ῥ \accdasia\textRho{} \<\textRho{} \ux{\<Ρ} {\<R <R} } \\ - x1FED \Cases{ ῭ \accdialytikavaria{} \`"{} \ux{\`"{} \"`{}} {\`"{} `"} } \\ - x1FEE \Cases{ ΅ \accdialytikatonos{} \'"{} \ux{\'"{} \"'{}} {\'"{} '"} } \\ - x1FEF \Cases{ ` \accvaria{} \`{} \ux{\`{}} {\`{} `} } \\ + x1FD0 \Cases{ ῐ \u\textiota{} \u\textiota{} \ux{\u{ι}} {\u{i} \u{i}} } \\ + x1FD1 \Cases{ ῑ \=\textiota{} \=\textiota{} \ux{\=ι} {\=i \=i} } \\ + x1FD2 \Cases{ ῒ \accdialytikavaria\textiota{} \`"\textiota{} \`\"\textiota{} + \"`\textiota{} \"\`\textiota{} \ux{\`"ι \"`ι \`\"ι \"\`ι} {\`"i `"i} } \\ + x1FD3 \Cases{ ΐ \accdialytikatonos\textiota{} \'"\textiota{} \'\"\textiota{} + \"'\textiota{} \"\'\textiota{} \ux{\'"ι \"'ι \'\"ι \"\'ι} {\'"i '"i} } \\ + x1FD6 \Cases{ ῖ \accperispomeni\textiota{} \~\textiota{} \ux{\~ι } {\~i ~i} } \\ + x1FD7 \Cases{ ῗ \accdialytikaperispomeni\textiota{} \~"\textiota{} \~\"\textiota{} + \"~\textiota{} \"\~\textiota{} \ux{\~"ι \"~ι \~\"ι \"\~ι} {\~"i ~"i} } \\ + x1FD8 \Cases{ Ῐ \u\textIota{} \u\textIota{} \ux{\u{Ι}} {\u{I} \u{I}} } \\ + x1FD9 \Cases{ Ῑ \=\textIota{} \=\textIota{} \ux{\=Ι} {\=I \=I} } \\ + x1FDA \Cases{ Ὶ \accvaria\textIota{} \`\textIota{} \ux{\`Ι} {\`I `I} } \\ + x1FDB \Cases{ Ί \accoxia\textIota{} \'\textIota{} \ux{\'Ι} {\'I 'I} } \\ + x1FDD \Cases{ ῝ \accdasiavaria{} \<`{} \ux{\<`{} \`<{}} {\<`{} <`} } \\ + x1FDE \Cases{ ῞ \accdasiaoxia{} \<'{} \ux{\<'{} \'<{}} {\<'{} <'} } \\ + x1FDF \Cases{ ῟ \accdasiaperispomeni{} \~<{} \ux{\<~{} \~<{}} {\~<{} ~<} } \\ + \\ + x1FE0 \Cases{ ῠ \u\textupsilon{} \u\textupsilon{} \ux{\u{υ}} {\u{u} } } \\ + x1FE1 \Cases{ ῡ \=\textupsilon{} \=\textupsilon{} \ux{\=υ} {\=u } } \\ + x1FE2 \Cases{ ῢ \accdialytikavaria\textupsilon{} \`"\textupsilon{} \`\"\textupsilon{} + \"`\textupsilon{} \"\`\textupsilon{} \ux{\`"υ \"`υ \`\"υ \"\`υ} {\`"u \"`u \`\"u \"\`u `"u "`u} } \\ + x1FE3 \Cases{ ΰ \accdialytikatonos\textupsilon{} \'"\textupsilon{} \'\"\textupsilon{} + \"'\textupsilon{} \"\'\textupsilon{} \ux{\'"υ \"'υ \'\"υ \"\'υ} {\'"u \"'u \'\"u \"\'u '"u "'u} } \\ + x1FE4 \Cases{ ῤ \accpsili\textrho{} \>\textrho{} \ux{\>ρ} {\>r >r } } \\ + x1FE5 \Cases{ ῥ \accdasia\textrho{} \<\textrho{} \ux{\<ρ} {\<r <r } } \\ + x1FE6 \Cases{ ῦ \accperispomeni\textupsilon{} \~\textupsilon{} \ux{\~υ} {\~u ~u } } \\ + x1FE7 \Cases{ ῧ \accdialytikaperispomeni\textupsilon{} \~"\textupsilon{} \~\"\textupsilon{} + \"~\textupsilon{} \"\~\textupsilon{} \ux{\~"υ \"~υ \~\"υ \"\~υ} {\~"u \"~u \~\"u \"\~u ~"u "~u} } \\ + x1FE8 \Cases{ Ῠ \u\textUpsilon{} \u\textUpsilon{} \ux{\u{Υ}} {\u{U} \u{U}} } \\ + x1FE9 \Cases{ Ῡ \=\textUpsilon{} \=\textUpsilon{} \ux{\=Υ} {\=U \=U} } \\ + x1FEA \Cases{ Ὺ \accvaria\textUpsilon{} \`\textUpsilon{} \ux{\`Υ} {\`U `U} } \\ + x1FEB \Cases{ Ύ \accoxia\textUpsilon{} \'\textUpsilon{} \ux{\'Υ} {\'U 'U} } \\ + x1FEC \Cases{ Ῥ \accdasia\textRho{} \<\textRho{} \ux{\<Ρ} {\<R <R} } \\ + x1FED \Cases{ ῭ \accdialytikavaria{} \`"{} \ux{\`"{} \"`{}} {\`"{} `"} } \\ + x1FEE \Cases{ ΅ \accdialytikatonos{} \'"{} \ux{\'"{} \"'{}} {\'"{} '"} } \\ + x1FEF \Cases{ ` \accvaria{} \`{} \ux{\`{}} {\`{} `} } \\ \\ x1FE3 \Cases{ ῲ \accvaria\textomega\ypogegrammeni{} \`\textomega\ypogegrammeni{} \ux{\`ω\ypogegrammeni{}} {\`w| `w|} } \\ x1FE4 \Cases{ ῳ \textomega\ypogegrammeni{} \textomega\ypogegrammeni{} \ux{ω\ypogegrammeni{}} {w| w|} } \\ @@ -500,56 +507,78 @@ Characters from the Greek and Coptic Unicode block that are supported by \section{Discussion} -\subsection{Differences between literal input and LICRs} +\subsection{Pre-composed vs. combining characters} Under pdfTeX and XeTeX, all input variants select pre-composed characters -if possible (\href{https://www.unicode.org/reports/tr15/}{Unicode -normalization} NFC). -Under luaTeX, accent macros on a literal character are printed using -combining diacritical marks. This leads to suboptimal placement of -diacritics with many fonts, often resulting in illegible output. - -\subsubsection{Upcasing} - -Up to 2022, diacritics were dropped from Greek letters in UPPERCASE in any -locale. The new \cs{MakeUppercase} implementation follows the Unicode -standard, where dropping diacritics is a feature of the Greek locale (``el''). - -However, ``named'' accent macros with Greek names behave according to Greek -typsetting rules in \emph{all} locales. -The current implementation also drops diacritics input via standard accent -macros in documents that declare the Greek language with Babel. - -Apart from the diacritical marks native to Greek itself, linguists also -regularly mark vowel length with macrons (¯) and breves (˘). -The length markers are used in dictionaries and textbooks -but not part of the Greek orthography. There is no established praxis -regarding their handling in uppercase. LaTeX keeps them but -the \href{https://icu.unicode.org/design/case/greek-upper}{% -Unicode reference implementation} drops them. - -Greek stand-alone diacritics are dropped by \cs{MakeUppercase} if input via -accent macros (e.g. \cs{accdialytika} or \cs{'>}). - - -\subsubsection{Sigma, final sigma, and ``autosigma''} +if possible (using the NFC +\href{https://www.unicode.org/reports/tr15/}{Unicode normalization} +with XeTeX and ligature definitions in LGR fonts under pdfTeX). + +The default LuaTeX renderer does no NFC normalization. +This leads to sub-optimal placement of diacritics with many fonts, +often resulting in illegible output. +NFC normalization for LuaTeX is provided by the \pkgref{uninormalize} +package and, alternatively, by the \emph{Harfbuzz} renderer that can be +selected with the \verb|[Renderer=Harfbuzz]| option of the \pkgref{fontspec} +font selection commands. This document uses the Harfbuzz renderer with LuaTeX. + + +\subsection{Case changing} + +\subsubsection{Diacritics} + +According to Greek typographical conventions, most\footnote{ + Exceptions are the diaeresis, the sub-iota, and the + length markers macron (¯) and breve (˘). + The length markers are used in dictionaries and textbooks but not + part of the Greek orthography. There is no established practice + regarding their handling in uppercase. LaTeX keeps them but the + \href{https://icu.unicode.org/design/case/greek-upper} + {Unicode reference implementation} drops them. +} +diacritics are dropped in UPPERCASE. Up to 2022, \cs{MakeUppercase} +dropped diacritics from Greek letters in any locale +(except for standard accent macros). + +For \emph{literal characters}, the new \cs{MakeUppercase} +implementation follows the Unicode standard, where dropping diacritics is a +feature of the Greek locale (``el''). +However, \emph{accent macros} behave according to Greek typesetting +rules in \emph{all} locales (standard accent macros only in documents that +declare the Greek language with Babel). + +\newcommand*{\sample}{\'a \`e \"i \~o \'u}% +Since version 1.14, babel-greek maps standard accent macros +to ``capital'' versions to fix uppercasing accented Greek letters with the new +\cs{MakeUppercase}. +The default expansion ensures that accents are kept on Latin letters: +\sample{} → \MakeUppercase{\sample}. +It also works if the Language is set to Greek: +\TestUppercase{\ensureascii{\sample}}. +\ifdefined \UnicodeEncodingName +\else + (Mind, that with 8-bit TeX Latin letters are interpreted as transliteration + input and converted to Greek if not wrapped in \cs{ensureascii}: + \TestUppercase{\sample}.) +\fi -There are two variants of the lower case letter \emph{sigma}. -The lowercasing \ensuregreek{Σ} should select a final sigma at the end of a -word: \ensuregreek{ΣΣ $\mapsto$ \MakeLowercase{ΣΣ}}. +\subsubsection{Sigma, final sigma, and ``autosigma'' \label{sec:sigma}} -Since 2022, \cs{MakeLowercase} selects the correct sigma variant for a -literal Sigma under Xe/LuaTeX, too. +There are two variants of the small letter \emph{sigma}. -The \cs{textSigma} \emph{macro} is mapped to \verb|\textautosigma| which -under 8-bit TeX prints the sigma variant according to its position but, -unfortunately, fails with Unicode fonts: +Lowercasing a capital \ensuregreek{Σ} at the end of a word should print a +final sigma. This works as expected with 8-bit TeX and, since 2022, also +with Xe/LuaTeX and a literal Sigma: \ensuregreek{ΣΣ → \MakeLowercase{ΣΣ}}. +However, it fails with the \cs{textSigma} macro and Unicode fonts: \ensuregreek{\textSigma\textSigma{} → \MakeLowercase{\textSigma\textSigma}}. -In LGR, you can add a ZWNJ or use the \verb|\noboundary| macro to prevent the -conversion to a final sigma: \ensuregreek{\MakeLowercase{ΣΣ}}. - +\ifdefined \UnicodeEncodingName +\else + With 8-bit TeX, you can add a ZWNJ or use the \cs{noboundary} macro + to prevent the conversion to a final sigma: + \ensuregreek{\MakeLowercase{ΣΣ}}. +\fi \subsubsection{% The one-letter word @@ -561,62 +590,95 @@ conversion to a final sigma: \ensuregreek{\MakeLowercase{ΣΣ}}. (or)} For disambiguation, the Greek word \emph{or} (ή / ἢ) keeps diacritics in -UPPERCASE: +UPPERCASE. +The 2022 MakeUppercase handles this for literal input. \TestUppercase{ή Ή ἢ Ἢ ἤ Ἤ }.\footnote{ - TODO: The polytonic variant with dasia and oxia used in + TODO: The polytonic variant ETA WITH DASIA AND OXIA used in ἢ … ἤ (\emph{either … or}) drops diacritics! By mistake, omission, or intent?} -\noindent However, eta drops diacritics if it is part of a word: +\noindent Currently, this feature is not supported with other input methods. + +Diacritics are dropped from eta if it is part of a word: \TestUppercase{ήτοι, Ήτοι, επιταγή ἤτοι, Ἤτοι}.% \footnote{TODO: It seems the test is only for whitespace on both sides: \TestUppercase{ή, Ή. ἢ; Ἢ} } -\smallskip\noindent -TODO: The 2022 MakeUppercase handles this for literal input. -Currently, this feature is not supported with other input methods. - -\subsection{Case conversion if the locale is \emph{not} Greek} +\subsubsection{Case conversion if the locale is \emph{not} Greek} + +Since 2022, \cs{MakeUppercase} keeps diacritics on Greek letters and uses +combining diacritical characters for characters that have no pre-composed +uppercase equivalent. + +With Xe/LuaTeX, the result may be illegible due to overlapping diacritics. +With pdfTeX, this led to compiling errors. +This is fixed in \emph{greek-fontenc} 2.3. by mapping the affected +characters to macro representations before case conversions +(requires the 2023 LaTeX release). +Consequently, with pdfTeX, diacritics are dropped from literal characters +without pre-composed uppercase equivalent also if the text language is +\emph{not} Greek. + +\renewcommand*{\sample}{ΐΰὐὒὔὖᾶᾷῆῇῒΐῖῗῢΰῤῦῧῶῷ} +\sample → \MakeUppercase{\sample} + + +\subsubsection{PDF strings} + +MakeUppercase in PDF strings led to compiling errors until 2022. + +\ifdefined \AddToNoCaseChangeList % introduced with 2022 \MakeUppercase + Check the table of contents in the side-bar of a PDF viewer. + + \subsubsection{\TestUppercase{ + ῒ \accdialytikavaria{\textiota} + \"`{\textiota}\"\`{\textiota}\`"{\textiota}\`\"{\textiota} + \ux{\accdialytikavaria ι \`"ι \"`ι \`\"ι \"\`ι} + {\accdialytikavaria i \`"i \"`i \`\"i \"\`i}}} + + \subsubsection{\TestUppercase{ + ῢ \accdialytikavaria{\textupsilon} + \"`{\textupsilon}\"\`{\textupsilon}\`"{\textupsilon}\`\"{\textupsilon} + \ux{\accdialytikavaria υ \`"υ \"`υ \`\"υ \"\`υ} + {\accdialytikavaria u \`"u \"`u \`\"u \"\`u}}} + \subsubsection{\TestUppercase{ + ΐ \accdialytikaoxia\textiota{} + \"'{\textiota}\"\'{\textiota}\'"{\textiota}\'\"{\textiota} + \ux{\accdialytikaoxia ι \'"ι \"'ι \'\"ι \"\'ι} + {\accdialytikaoxia i \'"i \"'i \'\"i \"\'i}}} + \subsubsection{\TestUppercase{ + ΰ \accdialytikaoxia\textupsilon{} + \"'{\textupsilon}\"\'{\textupsilon}\'"{\textupsilon}\'\"{\textupsilon} + \ux{\accdialytikaoxia υ \'"υ \"'υ \'\"υ \"\'υ} + {\accdialytikaoxia u \'"u \"'u \'\"u \"\'u}}} + \subsubsection{\TestUppercase{ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ}} +\fi -In order to fix upcasing for Greek, babel-greek maps standard accent macros -to ``capital'' versions.\footnote{% - In case of problems, these mappings can be disabled with the - \texttt{local-MakeUppercase-fixes} language modifier.} -The default expansion ensures that accents are -kept on Latin letters: \'a \`a \~a \"a → \MakeUppercase{\'a \`a \~a \"a}.% -\footnote{If the Language is set to Greek, this works unless the font encoding - is 8-bit LGR (where Latin letters are interpreted as Latin transliteration - anyway): \Greek{\'u \`u \~u \"u \ensureascii{\'u} → - \MakeUppercase{\'u \`u \~u \"u \ensureascii{\'u}}}.} +\ux{}{Transliteration input stays Latin in PDF strings.} -Some characters from the “Greek and Coptic” and “Greek extended” Unicode -blocks have no pre-composed uppercase equivalent. Since 2022, upcasing them -led to compiling errors under pdfLaTeX. -This is fixed in the 2023 LaTeX release by mapping the affected characters -to macro representations before case conversions: -with pdfLaTeX, diacritics are dropped from literal characters without -pre-composed uppercase equivalent also if the text language is \emph{not} -Greek, with Xe/LuaTeX, combining charactes are used (and may overlap with -the base letter). +Diacritics are not dropped from literal characters in text, ToC but not +PDF sidebar ToC, if the language switch is inside the \cs{section} command. +(It works if the language is switched before the section command.) -ΐΰὐὒὔὖᾶᾷῆῇῒΐῖῗῢΰῤῦῧῶῷ → \MakeUppercase{ΐΰὐὒὔὖᾶᾷῆῇῒΐῖῗῢΰῤῦῧῶῷ} +See \href{hyperref-with-greek.pdf}{hyperref-with-greek.pdf} for a +comprehensive test. \subsection{Symbol variants} -Several Greek letters have alternative representations which may have a -different semantic in a mathematical context. -Unicode reserves code points for the alternative representations -(naming them ``symbol'' as opposed to ``letter''). +For several Greek letters, there are alternative glyphs which may +have a different semantic in a mathematical context. +Unicode reserves code points for the alternative glyphs +(naming them SYMBOL as opposed to LETTER). Some of these symbols are available as \cs{var<name>} macros in TeX's mathematical mode. -In text, they are considered typographical variants without special -meaning. The 8-bit LGR font encoding does not allocate code points for them. -\emph{Babel-greek} and the \emph{% +In text, the alternative glyphs are considered typographical variants +without special meaning. The 8-bit LGR font encoding does not allocate +code points for them. \emph{Babel-greek} and the \emph{% \href{http://mirrors.ctan.org/language/greek/greek-fontenc/textalpha-doc.pdf} {textalpha}} package provide the \texttt{normalize-symbols} option (ignored with Xe/LuaTeX) that is also used in this test document. @@ -692,15 +754,15 @@ A dialytika must be placed on the second vowel if they are dropped: } (short+LICR) \TestUppercase{\ux{\'αι \'αυ \'ει \>'αι \>'αυ \>'ει \>αυ} - {\'ai \'au \'ei \>'ai \>'au \>'ei \>au} + {\'ai \'au \'ei \>'ai \>'au \>'ei \>au} } (short+\ux{literal}{transliteration}) - \TestUppercase{\ux{\'>αι \'>αυ \'>ει \'\>αι \'\>αυ \'\>ει} - {\'>ai \'>au \'>ei \'\>ai \'\>au \'\>ei} + \TestUppercase{\ux{\'\>αι \'\>αυ \'\>ει} + {\'\>ai \'\>au \'\>ei} } (short+\ux{literal}{transliteration}, reversed) \end{quote} The ``hiatus feature'' does not work with the LGR ``input ligatures''. -Support for monotonic literal charactes came with the 2022 +Support for monotonic literal characters came with the 2022 \cs{MakeUppercase} implementation changes. Since 2023 it also works with polytonic literals (\TestUppercase{ἀυπνία}). @@ -747,8 +809,8 @@ Rows 3 \ldots 7: Look-ahead (to check for a hiatus) breaks kerning before % \'AA \'AB \'AG \'AD \'AE \'AZ \'AH \'AJ \'AI \'AK \'AL \'AM \'AN \'AX % \'AO \'AP \'AR \'AS \'AC \'AT \'AU \'AF \'AQ \'AY \'AW -Downcasing should keep diacritics (of course, it cannot regenerate -``manually" dropped ones): +Lowercasing should keep diacritics (of course, it cannot regenerate +``manually" dropped ones): \Greek{'A \"I \"U \~<A $\mapsto$ \MakeLowercase{\'A \"I \"U \~<A}}. @@ -786,11 +848,6 @@ Downcasing should keep diacritics (of course, it cannot regenerate a dialytika \verb|"~ "` "'| appears as apostrophe, as a single \verb|"| stands for an apostrophe in the LGR transliteration if followed by a space or empty character. - -\item - With the pre-2022 \cs{MakeUppercase}, the input order is important - in combined accents involving the dialytika, e.g., - \verb|'"i "'i| is upcased \Greek{'"i "'i → \MakeUppercase{'"i "'i}}. \end{itemize} \end{document} |