From 1638c7bf59f91caa61849a5c5d73be504d07a49a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 14 Nov 2022 03:04:08 +0000 Subject: CTAN sync 202211140304 --- macros/latex/contrib/libgreek/libgreek.dtx | 1810 ++++++++++++++++++++++++---- 1 file changed, 1604 insertions(+), 206 deletions(-) (limited to 'macros/latex/contrib/libgreek/libgreek.dtx') diff --git a/macros/latex/contrib/libgreek/libgreek.dtx b/macros/latex/contrib/libgreek/libgreek.dtx index 5536365f36..b19949a168 100644 --- a/macros/latex/contrib/libgreek/libgreek.dtx +++ b/macros/latex/contrib/libgreek/libgreek.dtx @@ -1,161 +1,1549 @@ -% \iffalse meta-comment -% File `libgreek.dtx' -% -% Copyright (C) 2011, 2012 by Jean-Francois Burnol -% -% This file may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, -% either version 1.3 of this license or (at your -% option) any later version. The latest version of -% this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of -% LaTeX version 2003/12/01 or later. -% -% Please report errors to jfbu (at) free.fr -% -% \fi -% \iffalse -%<*dtx> -\ProvidesFile{libgreek.dtx} - [2011/03/14 1.0 Libertine/Biolinum Greek in math mode (jfB)] +% -*- coding: utf-8; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*- +% Execute etex on this file to extract package files. +% See in README for more build instructions. +%<*dtx> +\def\dtxtimestamp {Time-stamp: <13-11-2022 at 17:14:21 CET>} +%% +%% Package: libgreek +%% Greek in math mode via Libertinus or Linux Libertine (JFB) +%% Version: 1.1 +%% License: LPPL 1.3c +%% Copyright (C) 2011-2012, 2022 Jean-Francois Burnol +%% +%% +% +%<*tex> +\def\libgreekversion{1.1} +\def\libgreekdate{2022/11/11} +% +%<*dtx> +\iffalse % -% -%<*driver> -\documentclass[a4paper]{ltxdoc} +%<*tex> +%% This is a generated file. Run latexmk on this file libgreek.tex then +%% run dvipdfmx on libgreek.dvi to produce the documentation libgreek.pdf, +%% with the package source code included. +%% +%% Customize as desired the class options and the two toggles below. +%% +%% See libgreek.dtx for the copyright and the conditions for distribution +%% and/or modification of this Work. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{libgreek.tex}% +[\libgreekdate\space v\libgreekversion\space + driver file for libgreek documentation (JFB)]% +\PassOptionsToClass{a4paper,fontsize=11pt}{scrartcl} +\chardef\Withdvipdfmx \ifdefined\pdfoutput\ifnum\pdfoutput>0 0\else1\fi\else0\fi\relax +\chardef\NoSourceCode 0 % replace 0 by 1 for no source code +\input libgreek.dtx +%%% Local Variables: +%%% mode: latex +%%% End: +% +%<*dtx> +\fi +\chardef\noetex 0 +\ifx\numexpr\undefined\chardef\noetex 1 \fi +\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop +\else + \ifx\ProvidesFile\undefined + \chardef\extractfiles 0 % etex etc.. on libgreek.dtx + \else % latex/pdflatex on libgreek.tex or on libgreek.dtx + \ifx\Withdvipdfmx\undefined + % (lua|xe|pdf)latex run is on libgreek.dtx, we will extract all files + \chardef\extractfiles 1 % 1 = extract all and typeset doc + \chardef\Withdvipdfmx + \ifdefined\pdfoutput\ifnum\pdfoutput>0 0\else1\fi\else0\fi\relax + \chardef\NoSourceCode 1 % + \NeedsTeXFormat{LaTeX2e}% + \PassOptionsToClass{a4paper,fontsize=11pt}{scrartcl}% + \else % latex run is on libgreek.tex, + \chardef\extractfiles 2 % no extractions + \fi + \ProvidesFile{libgreek.dtx}% + [libgreek source (\libgreekversion\space of \libgreekdate) (JFB)]% + \fi +\fi +\ifnum\extractfiles<2 % extract files +\def\MessageDeFin{\newlinechar10 \let\Msg\message +\Msg{^^J}% +\Msg{********************************************************************^^J}% +\Msg{*^^J}% +\Msg{* To finish the installation you have to move the following^^J}% +\Msg{* files into a directory searched by TeX:^^J}% +\Msg{*^^J}% +\Msg{*\space\space\space\space libgreek.sty^^J}% +\Msg{*\space\space\space\space libgreek-legacy.sty^^J}% +\Msg{*^^J}% +\Msg{* To produce the documentation with source code included run latexmk^^J}% +\Msg{* on extracted libgreek.tex and then dvipdfmx on libgreek.dvi^^J}% +\Msg{*^^J}% +\Msg{* Happy TeXing!^^J}% +\Msg{*^^J}% +\Msg{********************************************************************^^J}% +}% +\begingroup +\input docstrip.tex +\askforoverwritefalse +\generate{\nopreamble + \usepostamble\defaultpostamble + \file{libgreek.tex}{\from{libgreek.dtx}{tex}}% + \usepreamble\defaultpreamble + \file{libgreek-legacy.sty}{\from{libgreek.dtx}{legacy}}% + \file{libgreek.sty}{\from{libgreek.dtx}{sty}}% +} +\endgroup +\fi % end of file extractions +\ifnum\extractfiles=0 +% tex/etex/xetex/etc on libgreek.dtx, files are now extracted, stop + \MessageDeFin\expandafter\end +\fi +% no file extractions if latex compilation was on libgreek.tex +\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi +\ifnum\Withdvipdfmx>0 +\documentclass [dvipdfmx]{scrartcl} +\else +\documentclass {scrartcl} +\fi +\tracinglostchars=3 + +% use doc with v2 because hyperref option clash with hypdoc +% or warning of hypdoc is simply TOO MUCH OF A BIG PAIN +\usepackage{doc}[=v2] +% but the v2 does not define \cs, it got defined in ltxdoc +\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}} +\def\cmd@to@cs#1#2{\char\number`#2\relax} +\DeclareRobustCommand\cs[1]{\texttt{\bslash#1}} +\AtBeginDocument{% +\pdfstringdefDisableCommands{\def\cs#1{\textbackslash\detokenize{#1}}}% +}% +% these are not defined by doc package +\providecommand\marg[1]{% + {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}} +\providecommand\oarg[1]{% + {\ttfamily[}\meta{#1}{\ttfamily]}} +\providecommand\parg[1]{% + {\ttfamily(}\meta{#1}{\ttfamily)}} + +\CodelineNumbered +\AtBeginDocument{\MakeShortVerb\|} +\ifnum\NoSourceCode=1 + \OnlyDescription +\fi +\usepackage[LGR,T1]{fontenc} + +\usepackage{hologo} +%% \hologoFontSetup{general=\upshape\rmfamily} +\DeclareRobustCommand*{\pdfLaTeX}{\hologo{pdfLaTeX}}% +% \DeclareRobustCommand*{\eTeX}{\hologo{eTeX}}% +% \DeclareRobustCommand*{\LuaTeX}{\hologo{LuaTeX}}% +% \DeclareRobustCommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}% +% \DeclareRobustCommand*{\XeTeX}{\hologo{XeTeX}}% +% \DeclareRobustCommand*{\XeLaTeX}{\hologo{XeLaTeX}}% + \usepackage{geometry} +\usepackage[english]{babel} + +\usepackage{multicol} +\usepackage{framed} + +\usepackage{color} +\definecolor{joli}{RGB}{225,95,0} +\definecolor{JOLI}{RGB}{225,95,0} +\definecolor{urlcolor}{RGB}{38,128,192} + +\usepackage{hyperref} +\hypersetup{% +linktoc=all,% +breaklinks=true,% +colorlinks=true,% +linkcolor={red},% +urlcolor={urlcolor}, +pdfauthor={Jean-François Burnol},% +pdftitle={The libgreek package},% +pdfstartview=FitH,% +pdfpagemode=UseNone,% +} +\usepackage{hypcap} +\usepackage{bookmark} \usepackage{enumerate} -\usepackage[pdfstartview=FitH,pdfpagemode=UseNone]{hyperref} -\OnlyDescription -\begin{document} - \DocInput{libgreek.dtx} -\end{document} -% -% \fi -% -% \GetFileInfo{libgreek.dtx} + +\usepackage{mlmodern} +\DeclareEncodingSubset{TS1}{mlmtt}{0}% fix \textasciigrave related latex2e#905 + +% useless with doc.sty +% \usepackage{upquote} +% as \verb, verbatim and macrocode do not use \@noligs +\begingroup +\catcode`\'\active\catcode`\`\active +\gdef\MakePrivateLetters{\makeatletter\def`{\textasciigrave}\def'{\textquotesingle}} +\endgroup +% https://github.com/latex3/latex2e/issues/953, for the record + +\usepackage{xspace} + +\newcommand\ctanpkg[1]{\href{https://ctan.org/pkg/#1}{#1}} + +% Vendredi 11 novembre 2022 : impossible d'utiliser \hypersetup{urlcolor=joli} +% dans \section (même sans le \texorpdfstring). +% même si la macro \libgreek est déclarée robuste mais avec \protected c'est bon +% \DeclareRobustCommand\libgreek{{\hypersetup{urlcolor=joli}libgreek}}% <-- BAD +% ceci ok (mais il faudra ajouter \texorpdfstring) +% \protected\def\libgreek{{\hypersetup{urlcolor=joli}libgreek}}% <-- OK +% L'erreur est +% Argument of \KVS@@CommaComma has an extra } +% mais je n'ai pas cherché à en savoir plus. De plus dans le code ci-dessous +% on avait plutôt un stack overflow dû à boucle infinie. + +% le \texorpdfstring ne sert à rien si \protected dans \section +\protected\def\libgreek{% + {\hypersetup{urlcolor=joli}\bfseries \ctanpkg{libgreek}}\xspace +} +\pdfstringdefDisableCommands{\def\libgreek{libgreek\xspace}} + +\usepackage{centeredline} +\usepackage[libertinus]{libgreek} +\usepackage{libgreek-legacy} +% don't do this double loading at home! +% it overwrites all Greek letters to use libertine-legacy ufxl03, +% but we will use the internal \libgreek@setgreekcs in a local scope +% to still get the LibertinusSerif when needed for display. +% The greek, Greek and style options of libgreek are broken by this +% so we can't use \libgreeksetup. + +\begin{document}\renewcommand\familydefault\sfdefault +\begin{center} + {\Large The \libgreek package}\\ + Jean-François \textsc{Burnol}\\ + \texttt{jfbu (at) free (dot) fr}\\ +\footnotesize + This is \libgreekversion\ (\libgreekdate) from + source file having \dtxtimestamp +\end{center} + +{ +\addtocontents{toc}{\protect\hypersetup{hidelinks}} +\addtocontents{lot}{\protect\hypersetup{hidelinks}} + +\tableofcontents + +\listoftables +} + +\section{Description} + +The \libgreek package sets the Greek letters {in math mode} (\textbf{only}) to use glyphs +ultimately from the Libertinus% % -% \begin{center} -% {\Large The \texttt{libgreek} package}\\ -% Jean-Fran\c cois \textsc{Burnol}\\ -% \texttt{jfbu (at) free.fr} -% \end{center} +\footnote{Khaled~\textsc{Hosny} originated + the \url{https://github.com/alerque/libertinus} project, now maintained by + Caleb~\textsc{Maclennan}, as a fork of + the \href{https://en.wikipedia.org/wiki/Linux_Libertine}{Linux Libertine} + fonts designed by Philipp~H.~\textsc{Poll}.} % -% \begin{abstract} -% The |libgreek| package\footnote{This document describes -% |libgreek| version \fileversion\ (\filedate).} allows -% (PDF)\LaTeX{} users to use the Greek letters from the -% Libertine/Biolinum fonts of the -% |libertine-legacy|\footnote{\url{http://mirrors.ctan.org/help/Catalogue/entries/libertine-legacy.html}} -% package (or earlier |libertine| version). The typeset -% document does not need to load |libertine-legacy| (or -% an earlier |libertine|) but of course this package -% must be present on the user's computer. -% \end{abstract} +Unicode font, as made available to the ``8bit'' traditional \TeX{} engines +thanks to the \ctanpkg{libertinus-type1} package% % -% \section{Example} +\footnote{Bob~\textsc{Tennent}, \emph{Support for using Libertinus fonts with + \LaTeX/\pdfLaTeX}, \url{https://ctan.org/pkg/libertinus-type1}}. % -% Here is a minimal example: -% \begin{verbatim} -% \documentclass{article} -% \usepackage{libgreek} -% \begin{document} -% $\alpha\beta\gamma$ -% \end{document} -% \end{verbatim} -% If the Libertine fonts (from |legacy| or earlier) are on your -% system, this should compile without error and the |dvi| or -% |pdf| document will use these fonts. To use the Biolinum -% font, use |\usepackage[biolinum]{libgreek}|. The Greek -% letters are made available only in math mode. +The package \ctanpkg{libertinus-type1} is not loaded, but must be present. + +Thus \libgreek is for people who want \emph{only} to adjust Greek letters in math +mode (and easily configure usage of upright or italic/slanted shapes), perhaps +in the context of having changed Latin letters as well, e.g.\@ from using the +\ctanpkg{mathastext} or the \ctanpkg{frenchmath} packages. + +Nota bene: complete math configuration is provided by the +\ctanpkg{libertinust1math} package% % -% To see the available symbol names for use in math mode, -% look at or (pdf)latexify the |libgreekcheck.tex| file -% included in the package distribution and view the |dvi| or the |pdf|. +\footnote{Michael \textsc{Sharpe}, \emph{A Type 1 font and \LaTeX\ support for Libertinus + Math}, \url{https://ctan.org/pkg/libertinust1math}.}, % -% \textbf{Important:} although you definitely can use -% |\usepackage{libertine-type1}| in your document to enable -% the use therein of the latest (PDF)\LaTeX{} Libertine text -% fonts, the |libertine-legacy| (or earlier) package must be -% installed on your system for |libgreek| to work for math -% mode. +and you very probably do not want using \libgreek if already loading +\ctanpkg{libertinust1math}! + + +The Greek letters all come with \cs{...up} and \cs{...it} named variants, and +whether ``bare'' control sequences map to the `|up|' or `|it|' ones can be +configured via package options, even midway in the document via +\cs{libgreeksetup}. Further, the package optionally defines two math +alphabets \cs{libgreekup} and \cs{libgreekit}. What `|up|' and `|it|' +actually mean can be configured using the |upshape| and |itshape| keys at +package loading time. + + +On old systems where the (now obsolete) \ctanpkg{libertine-legacy}% % -% \section{Package options} -% -% As seen before the |biolinum| option declares to use -% Biolinum. There is also a |libertine| option, it is on by -% default. All further options are of the key$=$value -% type. -% \begin{description} -% \item[scale=|factor|] will scale the font by the given -% factor, relative to nominal size (when the -% Libertine/Biolinum fonts are used elsewhere in the -% document, they will also be scaled by this -% factor). Note that the similar option of the -% |libertine-legacy| package is called |scaled| and has -% precisely the same effect. Example: scale=1.2 will -% scale by 20\%.\DeleteShortVerb{\|}\MakeShortVerb{*} -% \item[style=\{*ISO*$|$*French*$|$*TeX*\}]\DeleteShortVerb{*} -% \MakeShortVerb{\|} specifies the shape of the Greek -% letters. |ISO| means italic for lowercase and -% uppercase, |French| means upright for lowercase and -% uppercase, |TeX| means italic for lowercase and upright -% for uppercase. This option will -% override any |greek| or |Greek| -% option. The package defaults to |style=TeX|. -% \item[greek=|value|] specifies the shape (n, it, or sl) for both -% the lowercase and uppercase Greek letters. So |greek=it| is -% like |style=ISO|, and |greek=n| is like |style=French|. -% \item[Greek=|value|] specifies the shape (n, it, or sl) -% for only the uppercase Greek letters. To have lowercase -% upright and uppercase italic, use |greek=n,Greek=it|. -% \item[series=|value|] tells which series to use. The -% default is the value of \cs{seriesdefault} at the time of -% loading the package. See the |libertine-legacy| -% documentation for the admissible values (they include m, -% b, bx (bx=b) for Libertine and m, b, bx (bx=b), o, s for -% Biolinum). -% \item[boldseries=|value|] tells which series to use in -% bold math. Default is -% \cs{bfdefault} at the time of loading the -% package. -% \end{description} -% \begin{enumerate}[(1)] -% \item the bold italic Greek Libertine glyphs are missing from -% |libertine v5| and later versions up to |libertine-legacy|. Use bold -% slanted instead. -% \item the bold lowercase Greek Biolinum letters -% are in fact not bold. -% \end{enumerate} +\footnote{Bob~\textsc{Tennent}, \emph{Linux Libertine fonts for \hologo{(La)TeX} and + %{\upshape\rmfamily pdf} + pdf\hologo{(La)TeX} users}, \url{https://ctan.org/pkg/libertine-legacy}} % -% Advanced example of use (we use slanted rather than italic -% to circumvent the problem mentioned above): -% \begin{verbatim} -% \documentclass{article} -% \usepackage[scale=2,series=b,greek=sl,Greek=n]{libgreek} -% \begin{document} -% $\alpha\beta\gamma\phi\psi \Alpha\Beta\Gamma\Phi\Psi$ -% \end{document} -% \end{verbatim} +is installed, \libgreek will switch automatically for backwards compatibility +to a ``legacy'' mode which uses rather the font support files as provided by +\ctanpkg{libertine-legacy}. This ``legacy'' package |libgreek-legacy| uses +almost unchanged the code from the original 2011 release. + +On \LaTeX{} installations with \ctanpkg{libertine-legacy} present you can +author new documents using directly +\centeredline{|\usepackage|\oarg{options}|{libgreek-legacy}|} +but they +will not be portable to installations lacking \ctanpkg{libertine-legacy}. + +The ``legacy'' package does not provide the \cs{...up} and +\cs{...it} control sequences nor does it provide the \cs{libgreekup} and +\cs{libgreekit} math alphabets, or the \cs{libgreeksetup} command. + +To author new documents which will always use \ctanpkg{libertinus-type1} even +if moved to systems having kept in some local |texmf| tree the obsolete (and not +included in \TeX Live for some years) \ctanpkg{libertine-legacy} package +files, use % -% \section{Version} +\centeredline{|\usepackage[libertinus,|\meta{options}|]{libgreek}|} % -% The documentation has been updated on September 23, 2012. -% The |libgreek.sty| file has not been changed from its initial -% March 14, 2011 version. -% -% +This is not needed if anyone of the options recognized only by \libgreek and +not by \libgreek-legacy is used: i.e.\@ |serif|, |sans|, |upshape|, +|itshape| and |alphabets|. + +\section{Documentation of the \libgreek package} + +Here are the options recognized by the package: +\begin{description} +\item[libertinus] This option forces usage of the font support + files from package \ctanpkg{libertinus-type1} even if + \ctanpkg{libertine-legacy} is avalable on the \LaTeX{} installation. +\item[serif] Configures the package to use the (type1) Libertinus Serif font. This is + the default behaviour (if the ``legacy'' + mode is not activated). +\item[libertine] This is a deprecated alias for |serif|, which is provided for + backwards compatibility with existing documents and does not inhibit the + ``legacy'' mode: on a system having the \ctanpkg{libertine-legacy} files it + will end up being handed over to \libgreek-legacy, except if some other + option inhibits this. +\item[sans] Configures the package to use the (type1) Libertinus Sans font. +\item[biolinum] Configures the package to use either the Libertinus Sans font + or the (type1) Biolinum font if the ``legacy'' mode kicks in. +\item[upshape=\meta{shape}] Declares the shape to be used by the \cs{...up} + Greek letters and the \cs{libgreekup} math alphabet. Defaults to `|n|' + (without the quotes). +\item[itshape=\meta{shape}] Declares the shape to be used by the \cs{...it} + Greek letters and the \cs{libgreekit} math alphabet. Defaults to `|it|'. +\item[scale=\meta{factor}] will scale the font by the given + factor, relative to nominal size. + + Example: scale=1.2 will scale by 20\%.\DeleteShortVerb{\|} +\item[style=\meta{\upshape\ttfamily ISO|French|TeX}] specifies the shape style + of the Greek letters.\MakeShortVerb{\|} + + |ISO| means `italic' for lowercase + and uppercase, |French| means `upright' for lowercase and uppercase, |TeX| + means `italic' for lowercase and `upright' for uppercase. + + This option will + override any |greek| or |Greek| option. The package defaults to |style=TeX|. + + What `upright' and `italic' mean is configured by the |upshape| and + |itshape| respective settings.\DeleteShortVerb\| +\item[greek=\meta{\ttfamily\upshape up|it|...}] Says\MakeShortVerb{\|} whether + Greek letters will be `upright' or `italic' i.e.\@ whether they obey the + |upshape| or |itshape| setting, i.e.\@ whether \cs{alpha} et al.\@ are + \cs{let} to \cs{alphaup} (et al.) or to \cs{alphait} (et + al.).\MakeShortVerb{\|} + + So |greek=it| is like |style=ISO|, and |greek=up| is like |style=French|. + + For backwards compatibility with the behaviour of the 2011 release, other + shape values, such as `|n|' and `|sl|' or even `|sc|', are accepted. For + more details, see the explanations for |Greek|. For example |greek=n| is + like |style=French|. + + This option is ignored if |style| is used (order does not matter). + \DeleteShortVerb\| +\item[Greek=\meta{\ttfamily\upshape up|it|...}] Says\MakeShortVerb{\|} + whether uppercase Greek + letters (and only them) will be `upright' or `italic' i.e.\@ whether they + use |upshape| or |itshape|, i.e.\@ whether \cs{Alpha} et al.\@ are \cs{let} + to \cs{Alphaup} (et al.) or to \cs{Alphait} (et al.).\MakeShortVerb{\|} + + So to obtain lowercase to be `upright' and uppercase to be `italic', use + |greek=up| and then |Greek=it| (|Greek| must appear after |greek| else it will be + shadowed by it). Alternatively, do not use the |greek/Greek| keys but set + |upshape=it|, |itshape=n|, as the package by default assigns `italic' to + lowercase and `upright' to uppercase. + + This option, like the |greek| option, is ignored if the |style| option is used. + + For backwards compatibility with the behaviour of the 2011 release, other + shape values, such as `|n|' and `|sl|', are accepted. They will then + override the |upshape| setting for it to match it. For example |Greek=sc| + will force |upshape| to be |sc|, because the assumed style is the \TeX{} one + of italic lowercase and upright uppercase, so setting the shape of uppercase + must update the |upshape| value. + + \DeleteShortVerb{\|} + It is however recommended to use rather the \verb+upshape|itshape|style+ keys. + \MakeShortVerb{\|} + + Using |greek=up| or |Greek=up| does not inhibit ``legacy'' mode although the + legacy package did not a priori accept that value `|up|'. But since + \LaTeX{} 2020-02-02, the `|up|' shape is recognized and triggers + |up|$\to$|n| substitutions, so one can use that syntax even in contexts + which will let the package fall back to ``legacy'' mode. Not recommended, though. + + % Actually |greek| and |Greek| are provided mainly as compatibility stubs with + % legacy behaviour, in order for the package, even if not using ``legacy'' + % mode, to behave similarly regarding shapes as was doing its initial release. + +\item[series=\meta{series}] This tells which series to use. The default is the + value of \cs{seriesdefault} at the time of loading the package. There is no interface to configure distinct series for the `upright' and `italic' shapes. +\item[boldseries=\meta{series}] This tells which series to use in bold + math. Default is \cs{bfdefault} at the time of loading the package. There is no interface to configure distinct series for the `upright' and `italic' shapes. +\item[alphabets] Says whether to define \cs{libgreekup} and \cs{libgreekit}. +\end{description} + +\begin{table}[htbp] +\capstart +\DeleteShortVerb\|% a effet global ! +\let\s\string +\ttfamily +\makeatletter +\libgreek@upper@uptrue +\libgreek@lower@uptrue +\libgreek@setgreekcs +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\alphatonos\hfill$\alphatonos$ \foo\\ +\s\epsilontonos\hfill$\epsilontonos$ \foo\\ +\s\etatonos\hfill$\etatonos$ \foo\\ +\s\iotatonos\hfill$\iotatonos$ \foo\\ +\s\omicrontonos\hfill$\omicrontonos$ \foo\\ +\s\upsilontonos\hfill$\upsilontonos$ \foo\\ +\s\omegatonos\hfill$\omegatonos$ \foo\\ +\s\upsilondieresistonos\hfill$\upsilondieresistonos$ \foo\\ +\s\iotadieresis\hfill$\iotadieresis$ \foo\\ +\s\iotadieresistonos\hfill$\iotadieresistonos$ \foo\\ +\s\upsilondieresis\hfill$\upsilondieresis$ \foo\\ +\end{multicols} +\medskip +\centeredline{% +\begin{tabular}{|lc|lc|lc|lc|} +\hline +\s\Alpha&$\Alpha$ &\s\Nu&$\Nu$ &\s\alpha&$\alpha$ &\s\nu&$\nu$\\ +\s\Beta&$\Beta$ &\s\Xi&$\Xi$ &\s\beta&$\beta$ &\s\xi&$\xi$\\ +\s\Gamma&$\Gamma$ &\s\Omicron&$\Omicron$&\s\gamma&$\gamma$ &\s\omicron&$\omicron$\\ +\s\Delta&$\Delta$ &\s\Pi&$\Pi$ &\s\delta&$\delta$ &\s\pi&$\pi$\\ +\s\Epsilon&$\Epsilon$&\s\Rho&$\Rho$ &\s\epsilon&$\epsilon$&\s\rho&$\rho$\\ +\s\Zeta&$\Zeta$ &\s\Sigma&$\Sigma$ &\s\zeta&$\zeta$ &\s\sigma&$\sigma$\\ +\s\Eta&$\Eta$ &\s\Tau&$\Tau$ &\s\eta&$\eta$ &\s\tau&$\tau$\\ +\s\Theta&$\Theta$ &\s\Upsilon&$\Upsilon$&\s\theta&$\theta$ &\s\upsilon&$\upsilon$\\ +\s\Iota&$\Iota$ &\s\Phi&$\Phi$ &\s\iota&$\iota$ &\s\phi&$\phi$\\ +\s\Kappa&$\Kappa$ &\s\Chi&$\Chi$ &\s\kappa&$\kappa$ &\s\chi&$\chi$\\ +\s\Lambda&$\Lambda$ &\s\Psi&$\Psi$ &\s\lambda&$\lambda$ &\s\psi&$\psi$\\ +\s\Mu&$\Mu$ &\s\Omega&$\Omega$ &\s\mu&$\mu$ &\s\omega&$\omega$\\ +\hline +\end{tabular}} +\medskip +% il faut mettre le \columnbreak avant le \\ ... +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\varsigma\hfill$\varsigma$ \foo\\ +\s\varvarsigma\hfill$\varvarsigma$ \foo\\ +\s\sampi\hfill$\sampi$ \foo\\ +\s\digamma\hfill$\digamma$ \foo\\ +\s\koppa\hfill$\koppa$ \foo\\ +\s\varSigma\hfill$\varSigma$ \foo\\ +\s\Sampi\hfill$\Sampi$ \foo\\ +\s\Digamma\hfill$\Digamma$ \foo +\par +\end{multicols} +% il y a bien sûr d'horribles espacement verticaux typiques de LaTeX +\vspace*{-\baselineskip} +\caption[Greek letters via Libertinus Serif (upright)]{Greek letters from LibertinusSerif in LGR encoding, upright shapes} +\label{table:LibertinusSerif upright} +\MakeShortVerb\| +\end{table} + +\begin{table}[htbp] +\capstart +\DeleteShortVerb\|% a effet global ! +\let\s\string +\ttfamily +\makeatletter +% comme j'ai utilise libertine-legacy, le comportement des clés +% greek et Greek a été changé, donc je ne peux pas utiliser \libgreeksetup +\libgreek@upper@upfalse +\libgreek@lower@upfalse +\libgreek@setgreekcs +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\alphatonos\hfill$\alphatonos$ \foo\\ +\s\epsilontonos\hfill$\epsilontonos$ \foo\\ +\s\etatonos\hfill$\etatonos$ \foo\\ +\s\iotatonos\hfill$\iotatonos$ \foo\\ +\s\omicrontonos\hfill$\omicrontonos$ \foo\\ +\s\upsilontonos\hfill$\upsilontonos$ \foo\\ +\s\omegatonos\hfill$\omegatonos$ \foo\\ +\s\upsilondieresistonos\hfill$\upsilondieresistonos$ \foo\\ +\s\iotadieresis\hfill$\iotadieresis$ \foo\\ +\s\iotadieresistonos\hfill$\iotadieresistonos$ \foo\\ +\s\upsilondieresis\hfill$\upsilondieresis$ \foo\\ +\end{multicols} +\medskip +\centeredline{% +\begin{tabular}{|lc|lc|lc|lc|} +\hline +\s\Alpha&$\Alpha$ &\s\Nu&$\Nu$ &\s\alpha&$\alpha$ &\s\nu&$\nu$\\ +\s\Beta&$\Beta$ &\s\Xi&$\Xi$ &\s\beta&$\beta$ &\s\xi&$\xi$\\ +\s\Gamma&$\Gamma$ &\s\Omicron&$\Omicron$&\s\gamma&$\gamma$ &\s\omicron&$\omicron$\\ +\s\Delta&$\Delta$ &\s\Pi&$\Pi$ &\s\delta&$\delta$ &\s\pi&$\pi$\\ +\s\Epsilon&$\Epsilon$&\s\Rho&$\Rho$ &\s\epsilon&$\epsilon$&\s\rho&$\rho$\\ +\s\Zeta&$\Zeta$ &\s\Sigma&$\Sigma$ &\s\zeta&$\zeta$ &\s\sigma&$\sigma$\\ +\s\Eta&$\Eta$ &\s\Tau&$\Tau$ &\s\eta&$\eta$ &\s\tau&$\tau$\\ +\s\Theta&$\Theta$ &\s\Upsilon&$\Upsilon$&\s\theta&$\theta$ &\s\upsilon&$\upsilon$\\ +\s\Iota&$\Iota$ &\s\Phi&$\Phi$ &\s\iota&$\iota$ &\s\phi&$\phi$\\ +\s\Kappa&$\Kappa$ &\s\Chi&$\Chi$ &\s\kappa&$\kappa$ &\s\chi&$\chi$\\ +\s\Lambda&$\Lambda$ &\s\Psi&$\Psi$ &\s\lambda&$\lambda$ &\s\psi&$\psi$\\ +\s\Mu&$\Mu$ &\s\Omega&$\Omega$ &\s\mu&$\mu$ &\s\omega&$\omega$\\ +\hline +\end{tabular}} +\medskip +% il faut mettre le \columnbreak avant le \\ ... +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\varsigma\hfill$\varsigma$ \foo\\ +\s\varvarsigma\hfill$\varvarsigma$ \foo\\ +\s\sampi\hfill$\sampi$ \foo\\ +\s\digamma\hfill$\digamma$ \foo\\ +\s\koppa\hfill$\koppa$ \foo\\ +\s\varSigma\hfill$\varSigma$ \foo\\ +\s\Sampi\hfill$\Sampi$ \foo\\ +\s\Digamma\hfill$\Digamma$ \foo +\par +\end{multicols} +% il y a bien sûr d'horribles espacement verticaux typiques de LaTeX +\vspace*{-\baselineskip} +\caption[Greek letters via Libertinus Serif (italic)]{Greek letters from LibertinusSerif in LGR encoding, italic shapes} +\label{table:LibertinusSerif italic} +\MakeShortVerb\| +\end{table} + +\begin{table}[htbp] +\capstart +\DeleteShortVerb\|% a effet global ! +% ah que TeX est mieux avec tt +\def\s#1{{\usefont{T1}{mlmtt}{m}{n}\string#1}}% +\usefont{LGR}{LibertinusSans-TLF}{m}{n}% +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\alphatonos\hfill\char136 \foo\\ +\s\epsilontonos\hfill\char232 \foo\\ +\s\etatonos\hfill\char160 \foo\\ +\s\iotatonos\hfill\char208 \foo\\ +\s\omicrontonos\hfill\char236 \foo\\ +\s\upsilontonos\hfill\char212 \foo\\ +\s\omegatonos\hfill\char184 \foo\\ +\s\upsilondieresistonos\hfill\char246 \foo\\ +\s\iotadieresis\hfill\char240 \foo\\ +\s\iotadieresistonos\hfill\char242 \foo\\ +\s\upsilondieresis\hfill\char244 \foo\\ +\end{multicols} +\medskip +\centeredline{% +\begin{tabular}{|lc|lc|lc|lc|} +\hline +\s\Alpha&\char65 &\s\Nu&\char78 &\s\alpha&\char97 &\s\nu&\char110 \\ +\s\Beta&\char66 &\s\Xi&\char88 &\s\beta&\char98 &\s\xi&\char120 \\ +\s\Gamma&\char71 &\s\Omicron&\char79 &\s\gamma&\char103 &\s\omicron&\char111 \\ +\s\Delta&\char68 &\s\Pi&\char80 &\s\delta&\char100 &\s\pi&\char112 \\ +\s\Epsilon&\char69 &\s\Rho&\char82 &\s\epsilon&\char101 &\s\rho&\char114 \\ +\s\Zeta&\char90 &\s\Sigma&\char83 &\s\zeta&\char122 &\s\sigma&\char115 \\ +\s\Eta&\char72 &\s\Tau&\char84 &\s\eta&\char104 &\s\tau&\char116 \\ +\s\Theta&\char74 &\s\Upsilon&\char85 &\s\theta&\char106 &\s\upsilon&\char117 \\ +\s\Iota&\char73 &\s\Phi&\char70 &\s\iota&\char105 &\s\phi&\char102 \\ +\s\Kappa&\char75 &\s\Chi&\char81 &\s\kappa&\char107 &\s\chi&\char113 \\ +\s\Lambda&\char76 &\s\Psi&\char89 &\s\lambda&\char108 &\s\psi&\char121 \\ +\s\Mu&\char77 &\s\Omega&\char87 &\s\mu&\char109 &\s\omega&\char119 \\ +\hline +\end{tabular}} +\medskip +% il faut mettre le \columnbreak avant le \\ ... +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\varsigma\hfill\char99 \foo\\ +\s\varvarsigma\hfill\char6 \foo\\ +\s\sampi\hfill\char27 \foo\\ +\s\digamma\hfill\char147 \foo\\ +\s\koppa\hfill\char18 \foo\\ +\s\varSigma\hfill\char22 \foo\\ +\s\Sampi\hfill\char23 \foo\\ +\s\Digamma\hfill\char195 \foo +\par +\end{multicols} +% il y a bien sûr d'horribles espacement verticaux typiques de LaTeX +\vspace*{-\baselineskip} +\caption[Greek letters via Libertinus Sans (upright)]{Greek letters from LibertinusSans in LGR encoding, upright shapes} +\label{table:LibertinusSans upright} +\MakeShortVerb\| +\end{table} + +\begin{table}[htbp] +\capstart +\DeleteShortVerb\|% a effet global ! +% ah que TeX est mieux avec tt +\def\s#1{{\usefont{T1}{mlmtt}{m}{n}\string#1}}% +\usefont{LGR}{LibertinusSans-TLF}{m}{it}% +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\alphatonos\hfill\char136 \foo\\ +\s\epsilontonos\hfill\char232 \foo\\ +\s\etatonos\hfill\char160 \foo\\ +\s\iotatonos\hfill\char208 \foo\\ +\s\omicrontonos\hfill\char236 \foo\\ +\s\upsilontonos\hfill\char212 \foo\\ +\s\omegatonos\hfill\char184 \foo\\ +\s\upsilondieresistonos\hfill\char246 \foo\\ +\s\iotadieresis\hfill\char240 \foo\\ +\s\iotadieresistonos\hfill\char242 \foo\\ +\s\upsilondieresis\hfill\char244 \foo\\ +\end{multicols} +\medskip +\centeredline{% +\begin{tabular}{|lc|lc|lc|lc|} +\hline +\s\Alpha&\char65 &\s\Nu&\char78 &\s\alpha&\char97 &\s\nu&\char110 \\ +\s\Beta&\char66 &\s\Xi&\char88 &\s\beta&\char98 &\s\xi&\char120 \\ +\s\Gamma&\char71 &\s\Omicron&\char79 &\s\gamma&\char103 &\s\omicron&\char111 \\ +\s\Delta&\char68 &\s\Pi&\char80 &\s\delta&\char100 &\s\pi&\char112 \\ +\s\Epsilon&\char69 &\s\Rho&\char82 &\s\epsilon&\char101 &\s\rho&\char114 \\ +\s\Zeta&\char90 &\s\Sigma&\char83 &\s\zeta&\char122 &\s\sigma&\char115 \\ +\s\Eta&\char72 &\s\Tau&\char84 &\s\eta&\char104 &\s\tau&\char116 \\ +\s\Theta&\char74 &\s\Upsilon&\char85 &\s\theta&\char106 &\s\upsilon&\char117 \\ +\s\Iota&\char73 &\s\Phi&\char70 &\s\iota&\char105 &\s\phi&\char102 \\ +\s\Kappa&\char75 &\s\Chi&\char81 &\s\kappa&\char107 &\s\chi&\char113 \\ +\s\Lambda&\char76 &\s\Psi&\char89 &\s\lambda&\char108 &\s\psi&\char121 \\ +\s\Mu&\char77 &\s\Omega&\char87 &\s\mu&\char109 &\s\omega&\char119 \\ +\hline +\end{tabular}} +\medskip +% il faut mettre le \columnbreak avant le \\ ... +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\varsigma\hfill\char99 \foo\\ +\s\varvarsigma\hfill\char6 \foo\\ +\s\sampi\hfill\char27 \foo\\ +\s\digamma\hfill\char147 \foo\\ +\s\koppa\hfill\char18 \foo\\ +\s\varSigma\hfill\char22 \foo\\ +\s\Sampi\hfill\char23 \foo\\ +\s\Digamma\hfill\char195 \foo +\par +\end{multicols} +% il y a bien sûr d'horribles espacement verticaux typiques de LaTeX +\vspace*{-\baselineskip} +\caption[Greek letters via Libertinus Sans (italic)]{Greek letters from LibertinusSans in LGR encoding, italic shapes} +\label{table:LibertinusSans italic} +\MakeShortVerb\| +\end{table} + +Here are the commands defined by the package: +\begin{description} +\item[\cs{libgreeksetup}\marg{key=value,...}] The only allowed keys are + |style|, |greek| and |Greek|. And for the latter two only the values |up| + or |it| should be used (or values matching the |upshape| or |itshape| + settings), as it is only possible after package loading time to toggle + between `upright' and `italic' depending on whether the letter is uppercase + or lowercase, but one can not switch to an altogether different shape as + this would require re-declaring the symbol fonts. + + If the |style| key is used, then |greek/Greek| are ignored. However, + one can always naturally reuse later \cs{libgreeksetup} using only the + |greek| and/or |Greek| keys. +\item[\cs{libgreekup}] This is a math alphabet. It is defined only if the + package received the |alphabets| option. +\item[\cs{libgreekit}] This is a math alphabet. It is defined only if the + package received the |alphabets| option. +\end{description} + +Miscellaneous remarks: +\begin{enumerate} +\item Even if not receiving the option |alphabets|, the package will declare + all Greek letters to be of type \cs{mathalpha}. The legacy package on the + other hand declares them all to be of type \cs{mathord}. +\item The \libgreek package ignores global class options. It handles only + options originating from the \cs{usepackage} preamble declaration (or some + options handed over via \cs{PassOptionsToPackage} or options passed to + \cs{libgreeksetup} in the preamble or body). The \libgreek-legacy package + on the other hand handles global class options if it recognizes them. +\end{enumerate} + +\section{Documentation of the \libgreek-legacy package} + +Except for a fix to a problem with \cs{varvarsigma} and \cs{varvarkappa}, and +the handling of option |libertine| (which formerly would have remained +effectless if used after |biolinum|) \libgreek-legacy is functionally +equivalent with the original |1.0| release of \libgreek from |2011/03/14|. + +Compared to the 2022 \libgreek, and apart from the fact that the legacy mode +relies on presence of the files of \ctanpkg{libertine-legacy}, the main +difference is that this legacy version does not define \cs{...up} and +\cs{...it} shape variants, does not provide \cs{libgreekup} and +\cs{libgreekit} math alphabets, and does not define a command +\cs{libgreeksetup} allowing to change the shapes midway in a document. All +Greek letters are defined as math symbols of type \cs{mathord}, whereas the +2022 \libgreek uses type \cs{mathalpha}. + +Also, the legacy package defines even more +control sequences for letters with diacritics or special variant +glyphs, than does the 2022 \libgreek relying on \ctanpkg{libertinus-type1} +LGR-encoded fonts. + +Now to the decription of the recognized options. + +With the exception of |libertine| and |biolinum|, all options are of the +|key=value| type. +\begin{description} +\item[libertine] Configures the package to use the (type1) Libertine font + (i.e.\@ the serif font). This is the default behaviour. +\item[biolinum] Configures the package to use the (type1) Biolinum font + (i.e.\@ the sans serif font). +\item[scale=\meta{factor}] will scale the font by the given + factor, relative to nominal size (when the + Libertine/Biolinum fonts are used elsewhere in the + document, they will also be scaled by this + factor). Note that the similar option of the + \ctanpkg{libertine-legacy} package is called |scaled| and has + precisely the same effect. Example: scale=1.2 will + scale by 20\%.\DeleteShortVerb{\|} +\item[style=\meta{\upshape\ttfamily ISO|French|TeX}] + specifies the shape of the Greek\MakeShortVerb{\|} + letters. |ISO| means italic for lowercase and + uppercase, |French| means upright for lowercase and + uppercase, |TeX| means italic for lowercase and upright + for uppercase. This option will + override any |greek| or |Greek| + option. The package defaults to |style=TeX|. +\item[greek=\meta{shape}] specifies the shape (|n|, |it|, or |sl|) for both + the lowercase and uppercase Greek letters. So |greek=it| is + like |style=ISO|, and |greek=n| is like |style=French|. +\item[Greek=\meta{shape}] specifies the shape (|n|, |it|, or |sl|) + for only the uppercase Greek letters. To have lowercase + upright and uppercase italic, use |greek=n,Greek=it|. +\item[series=\meta{series}] tells which series to use. The + default is the value of \cs{seriesdefault} at the time of + loading the package. See the \ctanpkg{libertine-legacy} package + documentation for the admissible values (they include |m|, + |b|, |bx| (=|b|) for Libertine and |m|, |b|, |bx| (=|b|), |o|, |s| for + Biolinum). +\item[boldseries=\meta{series}] tells which series to use in + bold math. Default is + \cs{bfdefault} at the time of loading the + package. +\end{description} +\begin{enumerate}[(1)] +\item the bold italic Greek Libertine glyphs are missing from |libertine v5| + and later versions up to |libertine-legacy| (or some bug in the font + definition files triggers usage of \TeX{} font files not having the glyphs): + the log file will contain ``Missing character'' entries, and the PDF will + simply display nothing. With |\tracinglostchars=3| and \TeX Live 2021 or + later, these ``Missing character'''s will be reported as build errors by \TeX, + as they should. Use bold slanted instead. +\item the bold lowercase Greek Biolinum letters +are in fact not bold. +\end{enumerate} + +Advanced example of use (we use slanted rather than italic +to circumvent the problem mentioned above): +\begin{verbatim} +\documentclass{article} +\usepackage[scale=2,series=b,greek=sl,Greek=n]{libgreek} +\begin{document} +$\alpha\beta\gamma\phi\psi \Alpha\Beta\Gamma\Phi\Psi$ +\end{document} +\end{verbatim} + +As shown in the \autoref{table:libertine}, the package also defines control +sequences to access quite a few letters with diacritics. The displayed glyphs +correspond to using |libgreek-legacy| with its default, i.e.\@ the serif font +(Libertine) is used, the lowercase italic letters are italic, and the +uppercase are upright. + +\begin{table}[htbp] +\capstart +\DeleteShortVerb\|% a effet global ! +\let\s\string +\ttfamily +% attention un center modifierait le \\ aussi pour l'intérieur de multicols +% (je suppose que j'aurais dû essayer en mettant le multicols dans un minipage) +\begin{multicols}{3} +\s\Alphatonos\hfill$\Alphatonos$\kern1em\\ +\s\Epsilontonos\hfill$\Epsilontonos$\kern1em\\ +\s\Etatonos\hfill$\Etatonos$\kern1em\\ +\s\Iotadieresis\hfill$\Iotadieresis$\kern1em\\ +\s\Iotatonos\hfill$\Iotatonos$\kern1em\\ +\s\Omicrontonos\hfill$\Omicrontonos$\kern1em\\ +\s\Upsilontonos\hfill$\Upsilontonos$\kern1em\\ +\s\varUpsilontonos\hfill$\varUpsilontonos$\kern1em\\ +\s\Upsilondieresis\hfill$\Upsilondieresis$\kern1em\\ +\s\varUpsilondieresis\hfill$\varUpsilondieresis$\kern1em\\ +\s\Omegatonos\hfill$\Omegatonos$\kern1em\\ +\s\alphatonos\hfill$\alphatonos$\kern1em\\ +\s\epsilontonos\hfill$\epsilontonos$\kern1em\\ +\s\etatonos\hfill$\etatonos$\kern1em\\ +\s\iotatonos\hfill$\iotatonos$\kern1em\\ +\s\iotadieresis\hfill$\iotadieresis$\kern1em\\ +\s\iotadieresistonos\hfill$\iotadieresistonos$\kern1em\\ +\s\upsilontonos\hfill$\upsilontonos$\kern1em\\ +\s\upsilondieresis\hfill$\upsilondieresis$\kern1em\\ +\s\upsilondieresistonos\hfill$\upsilondieresistonos$\kern1em\\ +\s\omicrontonos\hfill$\omicrontonos$\kern1em\\ +\s\omegatonos\hfill$\omegatonos$\kern1em\\ +\s\anoteleia\hfill$\anoteleia$\kern1em\\ +\s\tonos\hfill$\tonos$\kern1em\\ +\s\dieresistonos\hfill$\dieresistonos$\kern1em\par +\end{multicols} +\medskip +\centeredline{% +\begin{tabular}{|lc|lc|lc|lc|} +\hline +% heureusement qu'il y a Emacs et les copié-collés rectangulaires +% j'ai envisagé plusieurs autres approches dont du \halign à l'intérieur +% de multicols mais finalement je fais donc un tabular +\s\Alpha&$\Alpha$& \s\Nu&$\Nu$& \s\alpha&$\alpha$& \s\nu&$\nu$\\ +\s\Beta&$\Beta$& \s\Xi&$\Xi$& \s\beta&$\beta$& \s\xi&$\xi$\\ +\s\Gamma&$\Gamma$& \s\Omicron&$\Omicron$& \s\gamma&$\gamma$& \s\omicron&$\omicron$\\ +\s\Delta&$\Delta$& \s\Pi&$\Pi$& \s\delta&$\delta$& \s\pi&$\pi$\\ +\s\Epsilon&$\Epsilon$& \s\Rho&$\Rho$& \s\epsilon&$\epsilon$& \s\rho&$\rho$\\ +\s\Zeta&$\Zeta$& \s\Sigma&$\Sigma$& \s\zeta&$\zeta$& \s\sigma&$\sigma$\\ +\s\Eta&$\Eta$& \s\Tau&$\Tau$& \s\eta&$\eta$& \s\tau&$\tau$\\ +\s\Theta&$\Theta$& \s\Upsilon&$\Upsilon$& \s\theta&$\theta$& \s\upsilon&$\upsilon$\\ +\s\Iota&$\Iota$& \s\Phi&$\Phi$& \s\iota&$\iota$& \s\phi&$\phi$\\ +\s\Kappa&$\Kappa$& \s\Chi&$\Chi$& \s\kappa&$\kappa$& \s\chi&$\chi$\\ +\s\Lambda&$\Lambda$& \s\Psi&$\Psi$& \s\lambda&$\lambda$& \s\psi&$\psi$\\ +\s\Mu&$\Mu$& \s\Omega&$\Omega$& \s\mu&$\mu$& \s\omega&$\omega$\\ +\hline +\end{tabular}} +\medskip +% il faut mettre le \columnbreak avant le \\ ... +\begin{multicols}{3}\def\foo{\kern1cm}\raggedcolumns +\s\varsigma\hfill$\varsigma$\foo\\ +\s\varvarsigma\hfill$\varvarsigma$\foo\\ +\s\vartheta\hfill$\vartheta$\foo\\ +\s\varphi\hfill$\varphi$\foo\\ +\s\varpi\hfill$\varpi$\foo\\ +\s\varkappa\hfill$\varkappa$\foo\\ +\s\varvarkappa\hfill$\varvarkappa$\foo\columnbreak\\ +\s\varepsilon\hfill$\varepsilon$\foo\\ +\s\reversedvarepsilon\hfill$\reversedvarepsilon$\foo\\ +\s\varrho\hfill$\varrho$\foo\\ +\s\digamma\hfill$\digamma$\foo\\ +\s\koppa\hfill$\koppa$\foo\\ +\s\sampi\hfill$\sampi$\foo\columnbreak\\ +\s\varTheta\hfill$\varTheta$\foo\\ +\s\varUpsilon\hfill$\varUpsilon$\foo\\ +\s\Digamma\hfill$\Digamma$\foo\\ +\s\Koppa\hfill$\Koppa$\foo\\ +\s\Sampi\hfill$\Sampi$\foo +\par +\end{multicols} +% il y a bien sûr d'horribles espacements verticaux typiques de LaTeX +\vspace*{-\baselineskip} +\caption[Greek letters via libgreek-legacy and Linux Libertine] +{Greek letters via libgreek-legacy and default configuration + (i.e. no options, or equivalently options \texttt{[libertine,style=TeX]} giving + upright uppercase, italic lowercase, and usage of the Libertine glyphs). In + the \texttt{1.0} \libgreek release of 2011 the \cs{varvarkappa} and + \cs{varvarsigma} would have been upright like the uppercase letters, due to + a bug which was fixed for the 2022 transformation into \libgreek-legacy.} +\label{table:libertine} +\end{table} + + +\MakeShortVerb\| + +\section{Release history} + +\libgreek was initially developed on a computer equipped with \TeX Live 2010 +and was released on March 14, 2011. It got a documentation update on September 23, +2012, but its source code and version number 1.0 did not change then. + +The initial release used files as included in the v4 version of the +\ctanpkg{libertine} package then maintained by Michael~\textsc{Niedermair} and +which allowed traditional non-Unicode \TeX{} engines to access glyphs of the +Unicode Linux Libertine fonts as designed by Philipp~H.~\textsc{Poll}. + +By the time of \TeX Live 2012 (and even earlier), the files needed by \libgreek +had been moved to the \ctanpkg{libertine-legacy} package (maintained by +Bob~\textsc{Tennent}). This documentation was updated in September 2012 +to mention this. + +But around circa 2018 (I think) \ctanpkg{libertine-legacy} package was moved +to the ``Obsolete'' section of CTAN, and stopped being included in new \TeX +Live releases. This means that \ctanpkg{libgreek}, although still included in +\TeX Live, was actually broken on new installations. Theoretically the user +could still install \ctanpkg{libertine-legacy} +manually, but this is not easy +as it is not distributed as a |.tds.zip| archive on CTAN mirrors, and +furthermore the |libertine.map| may need to be renamed before being listed in +some |updmap.cfg| file, else it would clash with the |libertine.map| from the +current \ctanpkg{libertine} package (maintained by Bob~\textsc{Tennent}, and +which now can be used on all engines as it auto-detects the context). + +This situation, and the fact that the \ctanpkg{libertinus-type1} package +(also maintained by Bob~\textsc{Tennent}, thanks Bob!) provides support files +for the LGR encoding, thus allowing to access Greek glyphs, motivated the 2022 +release of \libgreek. + +Thanks to Antoine~\textsc{Missier} (author of \ctanpkg{frenchmath}) for making +the author aware that \libgreek had ceased functioning and was in need of an +update, and indeed for quite some years already. + + +\StopEventually{\end{document}\endinput} +\cleardoublepage +%\newgeometry{hmarginratio=3:2} +\small + +\makeatletter + +\section{Implementation of the \libgreek package} + +% https://github.com/latex3/latex2e/issues/563 +\AddToHook{env/macrocode/after}{\@nobreakfalse} +\AddToHook{env/macrocode/begin}{\partopsep0pt\relax} + +% The catcode hackery next is to avoid to have the guard be listed +% in the commented source code... (here <*legacy>) +% (c) 2012/11/19 jf burnol ;-) + +\def\gardesactifs {\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 } +\def\gardesinactifs {\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12 } +\gardesactifs +\let\relax +\let<*sty>\gardesinactifs + +\MakePercentIgnore +% +%<*sty> +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{libgreek} + [2022/11/11 1.1 Greek in math mode via libertinus-type1 (JFB)] +\@ifpackageloaded{libgreek-legacy}{% + \PackageWarning{libgreek}% + {libgreek-legacy loaded previously, now aborting\@gobble}% + \endinput +}{}% +% \end{macrocode} +% We will use \ctanpkg{kvoptions} to handle options with |key=value| syntax. +% First let's check for some hint that \ctanpkg{libertine-legacy} is present +% and then hand over to the |libgreek-legacy|, but only if only legacy +% options have been used. +% \begin{macrocode} +\RequirePackage{kvoptions} +\IfFileExists{ufxl03.fd}{% + \define@key{libgreek}{libertinus}[0]{\global\let\libgreek@nolegacy\@empty} + \define@key{libgreek}{serif}[0]{\global\let\libgreek@nolegacy\@empty} + \define@key{libgreek}{libertine}[0]{} + \define@key{libgreek}{sans}[0]{\global\let\libgreek@nolegacy\@empty} + \define@key{libgreek}{biolinum}[0]{} + \define@key{libgreek}{scale}[0]{} + \define@key{libgreek}{upshape}[0]{\global\let\libgreek@nolegacy\@empty} + \define@key{libgreek}{itshape}[0]{\global\let\libgreek@nolegacy\@empty} + \define@key{libgreek}{style}[0]{} + \define@key{libgreek}{Greek}[0]{} + \define@key{libgreek}{greek}[0]{} + \define@key{libgreek}{series}[0]{} + \define@key{libgreek}{boldseries}[0]{} + \define@key{libgreek}{alphabets}[0]{\global\let\libgreek@nolegacy\@empty} +% \end{macrocode} +% Good that this will do only scope-obeying things. +% \begin{macrocode} + {\ProcessLocalKeyvalOptions*}% + \ifdefined\libgreek@nolegacy\expandafter\@gobble\else\expandafter\@firstofone\fi + {% + \PackageInfo{libgreek}{% + ****************************************************\MessageBreak + File ufxl03.fd exists!\MessageBreak + Thus, now handing over to libgreek-legacy.\MessageBreak + To avoid this, use libertinus option.\MessageBreak + ****************************************************\@gobbletwo + }% +% \end{macrocode} +% Let's transfer all options to |libgreek-legacy| without trying some shortcut. +% \begin{macrocode} + \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{libgreek-legacy}}% + \ProcessOptions\relax + \endinput + \RequirePackage{libgreek-legacy}% + }% + }{}% +% \end{macrocode} +% To minimize the author's task, we keep close to original code with minimal +% adaptations. In particular I decided to keep the fact that |style| option +% makes the |Greek| and |greek| options ignored. But there are some +% complications originating in the addition of the \cs{libgreeksetup}, which +% requires to keep a trace of various things, for example if |style| option is +% used at package level and then later on using \cs{libgreeksetup} the user +% employs the |Greek/greek| options. % -% \StopEventually{} -% \clearpage -% \section{Implementation} +% Although the user interface is kept in a maximally backwards compatible way +% (i.e.\@{} even if not falling back to ``legacy'' the option behaviour should +% be stable), the underlying architecture of the symbol fonts is completely +% different because this package assigns two symbol fonts, one for upright, +% the other one for italic-like, whereas the legacy package assigns one or two +% symbol fonts depending on whether lowercase and uppercase letters have been +% assigned or not the same shape. In the legacy package the symbol fonts are +% mapped to either lowercase or uppercase, but in this more modern package, +% the symbol fonts are for the `upright' and `italic' shapes. % +% The new |upshape| and |itshape| keys allow to configure what the \cs{...up} +% and \cs{...it} macros will actually use as shapes. +% \begin{macrocode} +\def\libgreek@fontfamily{LibertinusSerif} +\def\libgreek@scale{1} +\def\libgreek@upshape{n} +\def\libgreek@itshape{it} +\newif\iflibgreek@upper@up\libgreek@upper@uptrue +\newif\iflibgreek@lower@up +\edef\libgreek@series{\seriesdefault} +\edef\libgreek@boldseries{\bfdefault} +\def\libgreek@upper@shape{\libgreek@upshape} +\def\libgreek@lower@shape{\libgreek@itshape} +\def\libgreek@style{TeX} +\newif\iflibgreek@sty +% \end{macrocode} +% We use the \ctanpkg{keyval} interface mostly to not have to rework +% everything, if at all possible, into the \ctanpkg{kvoptions} declarative +% interface. It is a very good thing that the latter package can be used +% without forcing on the user its own declarative interface... however this +% means that inputs such as |serif=false| do not generate errors but are +% handled exactly the same as |serif=true|... +% \begin{macrocode} +\define@key{libgreek}{libertinus}[true]{} +\define@key{libgreek}{serif}[true]{\def\libgreek@fontfamily{LibertinusSerif}} +\define@key{libgreek}{libertine}[true]{\def\libgreek@fontfamily{LibertinusSerif}} +\define@key{libgreek}{sans}[true]{\def\libgreek@fontfamily{LibertinusSans}} +\define@key{libgreek}{biolinum}[true]{\def\libgreek@fontfamily{LibertinusSans}} +\define@key{libgreek}{scale}[1]{\def\libgreek@scale{#1}} +\define@key{libgreek}{upshape}{\edef\libgreek@upshape{#1}} +\define@key{libgreek}{itshape}{\edef\libgreek@itshape{#1}} +\define@key{libgreek}{style}{\edef\libgreek@style{#1}\libgreek@stytrue} +\define@key{libgreek}{Greek}{\edef\libgreek@upper@shape{#1}} +\define@key{libgreek}{greek}{\edef\libgreek@lower@shape{#1}% + \edef\libgreek@upper@shape{#1}} +\define@key{libgreek}{series}{\edef\libgreek@series{#1}} +\define@key{libgreek}{boldseries}{\edef\libgreek@boldseries{#1}} +% \end{macrocode} +% The single truly Boolean option... +% \begin{macrocode} +\DeclareBoolOption[false]{alphabets} +% \end{macrocode} +% We need some auxiliaries to handle the |style| values. As mentioned +% already, some extra stuff is executed for reasons of various scenarii +% with \cs{libgreeksetup}. +% \begin{macrocode} +\def\libgreek@style@ISO{% + \libgreek@upper@upfalse + \libgreek@lower@upfalse + \let\libgreek@upper@shape\libgreek@itshape + \let\libgreek@lower@shape\libgreek@itshape +} +\def\libgreek@style@French{% + \libgreek@upper@uptrue + \libgreek@lower@uptrue + \let\libgreek@upper@shape\libgreek@upshape + \let\libgreek@lower@shape\libgreek@upshape +} +\def\libgreekk@style@TeX{% + \libgreek@upper@uptrue + \libgreek@lower@upfalse + \let\libgreek@upper@shape\libgreek@upshape + \let\libgreek@lower@shape\libgreek@itshape +} +% \end{macrocode} +% This always resets the \cs{iflibgreek@sty} to false for \cs{libgreeksetup} +% being usable with |greek| and |Greek| keys. +% \begin{macrocode} +\def\libgreek@process@style{% + \libgreek@styfalse + \ifcsname libgreek@style@\libgreek@style\endcsname + \csname libgreek@style@\libgreek@style\endcsname + \else + \PackageWarning{libgreek}{Unknown style `\libgreek@style'}% + \fi +} +% \end{macrocode} +% This stuff is a bit involved, but this is done for maximal backwards +% compatibility in terms of stability of behaviour (of course the real maximal +% stability is when the ``legacy'' mode gets activated). +% \begin{macrocode} +\def\libgreek@process@shapes{% + \edef\libgreek@upper@shape{\libgreek@upper@shape}% + \edef\libgreek@lower@shape{\libgreek@lower@shape}% + \ifx\libgreek@upper@shape\libgreek@upshape + \libgreek@upper@uptrue + \else + \ifx\libgreek@upper@shape\libgreek@itshape + \libgreek@upper@upfalse + \else + \expandafter\in@\expandafter{\expandafter.\libgreek@upper@shape,}{.up,}% + \ifin@\libgreek@upper@uptrue + \else + \expandafter\in@\expandafter{\expandafter.\libgreek@upper@shape,}{.it,}% + \ifin@\libgreek@upper@upfalse + \else + \libgreek@process@upper@lastresort + \fi\fi\fi\fi + \ifx\libgreek@lower@shape\libgreek@itshape + \libgreek@lower@upfalse + \else + \ifx\libgreek@lower@shape\libgreek@upshape + \libgreek@lower@uptrue + \else + \expandafter\in@\expandafter{\expandafter.\libgreek@lower@shape,}{.it,}% + \ifin@\libgreek@lower@upfalse + \else + \expandafter\in@\expandafter{\expandafter.\libgreek@lower@shape,}{.up,}% + \ifin@\libgreek@lower@uptrue + \else + \libgreek@process@lower@lastresort + \fi\fi\fi\fi +}% +\def\libgreek@process@upper@lastresort{% + \libgreek@upper@uptrue + \let\libgreek@upshape\libgreek@upper@shape +} +\def\libgreek@process@lower@lastresort{% + \libgreek@lower@upfalse + \let\libgreek@itshape\libgreek@lower@shape +} +% \end{macrocode} +% The fact that packages may be handed global options is rather dangerous. +% Fortunately \ctanpkg{kvoptions} has an interface to handle only local options. +% \begin{macrocode} +\ProcessLocalKeyvalOptions* +% \end{macrocode} +% This is as per the |libertinus-type1.sty| code. +% \begin{macrocode} +\expandafter\edef\csname\libgreek@fontfamily @scale\endcsname{\libgreek@scale} +% \end{macrocode} +% We now do the post-processing regarding the shape configuration after +% option parsing. Once this is done we will reconfigure slightly +% \cs{libgreek@process@shapes} for usability in the document preamble or body, +% after the symbol fonts have been declared. As is well-known the \LaTeX{} +% interface to math fonts is full of ``only-preamble'' restrictions. +% \begin{macrocode} +\iflibgreek@sty + \libgreek@process@style +\else + \libgreek@process@shapes +\fi +\def\libgreek@process@upper@lastresort{% + \PackageWarning{libgreek}{% + Too late for the shape `\libgreek@upper@shape'\MessageBreak + originating in Greek or greek option. Ignored.\MessageBreak + Use `up' or `it'}% +} +\def\libgreek@process@lower@lastresort{% + \PackageWarning{libgreek}{% + Too late for the shape `\libgreek@lower@shape'\MessageBreak + originating in greek option. Ignored.\MessageBreak + Use `up' or `it'}% +} +\def\libgreeksetup#1{% + \setkeys{libgreek}{#1}% + \iflibgreek@sty\libgreek@process@style\else\libgreek@process@shapes\fi + \libgreek@setgreekcs +} +% \end{macrocode} +% Almost all options must be restricted to the package loading time only. +% \begin{macrocode} +\DisableKeyvalOption{libgreek}{libertinus} +\DisableKeyvalOption{libgreek}{serif} +\DisableKeyvalOption{libgreek}{libertine} +\DisableKeyvalOption{libgreek}{sans} +\DisableKeyvalOption{libgreek}{biolinum} +\DisableKeyvalOption{libgreek}{scale} +\DisableKeyvalOption{libgreek}{upshape} +\DisableKeyvalOption{libgreek}{itshape} +\DisableKeyvalOption{libgreek}{series} +\DisableKeyvalOption{libgreek}{boldseries} +\DisableKeyvalOption{libgreek}{alphabets} +% \end{macrocode} +% Declarations of the two symbol fonts, one for `upright' (or whatever is +% configured by the |upshape| key), one for `italic' (or whatever is configured +% by the |itshape| key). One can not specify distinct series, both +% `upright' and `italic' use the same font series. This could be added but I +% doubt anyone will use the package to start with... +% \begin{macrocode} +\DeclareFontEncoding{LGR}{}{} +\DeclareSymbolFont{libgreekup}{LGR}{\libgreek@fontfamily-TLF} + {\libgreek@series} + {\libgreek@upshape} +\SetSymbolFont{libgreekup}{bold}{LGR}{\libgreek@fontfamily-TLF} + {\libgreek@boldseries} + {\libgreek@upshape} +\DeclareSymbolFont{libgreekit}{LGR}{\libgreek@fontfamily-TLF} + {\libgreek@series} + {\libgreek@itshape} +\SetSymbolFont{libgreekit}{bold}{LGR}{\libgreek@fontfamily-TLF} + {\libgreek@boldseries} + {\libgreek@itshape} +% \end{macrocode} +% As all Greek letters are already available in \cs{...up} and \cs{...it} +% variants, it is indeed not immediately pressing to have math alphabets, so +% let's not do it by default. +% \begin{macrocode} +\iflibgreek@alphabets + \DeclareSymbolFontAlphabet{\libgreekup}{libgreekup} + \DeclareSymbolFontAlphabet{\libgreekit}{libgreekit} +\fi +% \end{macrocode} +% Definition of the `|up|' \cs{mathchar}'s. There are 48 `standard' +% ones plus 8 extras and 11 with diacritics for a total of 67 ones. % +% Hesitation whether I should declare with \cs{mathalpha} \emph{only} if +% |alphabets| is passed to the package. +% \begin{macrocode} +\DeclareMathSymbol{\Alphaup}{\mathalpha}{libgreekup}{65} +\DeclareMathSymbol{\Betaup}{\mathalpha}{libgreekup}{66} +\DeclareMathSymbol{\Gammaup}{\mathalpha}{libgreekup}{71} +\DeclareMathSymbol{\Deltaup}{\mathalpha}{libgreekup}{68} +\DeclareMathSymbol{\Epsilonup}{\mathalpha}{libgreekup}{69} +\DeclareMathSymbol{\Zetaup}{\mathalpha}{libgreekup}{90} +\DeclareMathSymbol{\Etaup}{\mathalpha}{libgreekup}{72} +\DeclareMathSymbol{\Thetaup}{\mathalpha}{libgreekup}{74} +\DeclareMathSymbol{\Iotaup}{\mathalpha}{libgreekup}{73} +\DeclareMathSymbol{\Kappaup}{\mathalpha}{libgreekup}{75} +\DeclareMathSymbol{\Lambdaup}{\mathalpha}{libgreekup}{76} +\DeclareMathSymbol{\Muup}{\mathalpha}{libgreekup}{77} +\DeclareMathSymbol{\Nuup}{\mathalpha}{libgreekup}{78} +\DeclareMathSymbol{\Xiup}{\mathalpha}{libgreekup}{88} +\DeclareMathSymbol{\Omicronup}{\mathalpha}{libgreekup}{79} +\DeclareMathSymbol{\Piup}{\mathalpha}{libgreekup}{80} +\DeclareMathSymbol{\Rhoup}{\mathalpha}{libgreekup}{82} +\DeclareMathSymbol{\Sigmaup}{\mathalpha}{libgreekup}{83} +\DeclareMathSymbol{\Tauup}{\mathalpha}{libgreekup}{84} +\DeclareMathSymbol{\Upsilonup}{\mathalpha}{libgreekup}{85} +\DeclareMathSymbol{\Phiup}{\mathalpha}{libgreekup}{70} +\DeclareMathSymbol{\Chiup}{\mathalpha}{libgreekup}{81} +\DeclareMathSymbol{\Psiup}{\mathalpha}{libgreekup}{89} +\DeclareMathSymbol{\Omegaup}{\mathalpha}{libgreekup}{87} +\DeclareMathSymbol{\alphaup}{\mathalpha}{libgreekup}{97} +\DeclareMathSymbol{\betaup}{\mathalpha}{libgreekup}{98} +\DeclareMathSymbol{\gammaup}{\mathalpha}{libgreekup}{103} +\DeclareMathSymbol{\deltaup}{\mathalpha}{libgreekup}{100} +\DeclareMathSymbol{\epsilonup}{\mathalpha}{libgreekup}{101} +\DeclareMathSymbol{\zetaup}{\mathalpha}{libgreekup}{122} +\DeclareMathSymbol{\etaup}{\mathalpha}{libgreekup}{104} +\DeclareMathSymbol{\thetaup}{\mathalpha}{libgreekup}{106} +\DeclareMathSymbol{\iotaup}{\mathalpha}{libgreekup}{105} +\DeclareMathSymbol{\kappaup}{\mathalpha}{libgreekup}{107} +\DeclareMathSymbol{\lambdaup}{\mathalpha}{libgreekup}{108} +\DeclareMathSymbol{\muup}{\mathalpha}{libgreekup}{109} +\DeclareMathSymbol{\nuup}{\mathalpha}{libgreekup}{110} +\DeclareMathSymbol{\xiup}{\mathalpha}{libgreekup}{120} +\DeclareMathSymbol{\omicronup}{\mathalpha}{libgreekup}{111} +\DeclareMathSymbol{\piup}{\mathalpha}{libgreekup}{112} +\DeclareMathSymbol{\rhoup}{\mathalpha}{libgreekup}{114} +\DeclareMathSymbol{\sigmaup}{\mathalpha}{libgreekup}{115} +\DeclareMathSymbol{\tauup}{\mathalpha}{libgreekup}{116} +\DeclareMathSymbol{\upsilonup}{\mathalpha}{libgreekup}{117} +\DeclareMathSymbol{\phiup}{\mathalpha}{libgreekup}{102} +\DeclareMathSymbol{\chiup}{\mathalpha}{libgreekup}{113} +\DeclareMathSymbol{\psiup}{\mathalpha}{libgreekup}{121} +\DeclareMathSymbol{\omegaup}{\mathalpha}{libgreekup}{119} +% \end{macrocode} +% Defintion of the `|it|' \cs{mathchar}'s. +% \begin{macrocode} +\DeclareMathSymbol{\Alphait}{\mathalpha}{libgreekit}{65} +\DeclareMathSymbol{\Betait}{\mathalpha}{libgreekit}{66} +\DeclareMathSymbol{\Gammait}{\mathalpha}{libgreekit}{71} +\DeclareMathSymbol{\Deltait}{\mathalpha}{libgreekit}{68} +\DeclareMathSymbol{\Epsilonit}{\mathalpha}{libgreekit}{69} +\DeclareMathSymbol{\Zetait}{\mathalpha}{libgreekit}{90} +\DeclareMathSymbol{\Etait}{\mathalpha}{libgreekit}{72} +\DeclareMathSymbol{\Thetait}{\mathalpha}{libgreekit}{74} +\DeclareMathSymbol{\Iotait}{\mathalpha}{libgreekit}{73} +\DeclareMathSymbol{\Kappait}{\mathalpha}{libgreekit}{75} +\DeclareMathSymbol{\Lambdait}{\mathalpha}{libgreekit}{76} +\DeclareMathSymbol{\Muit}{\mathalpha}{libgreekit}{77} +\DeclareMathSymbol{\Nuit}{\mathalpha}{libgreekit}{78} +\DeclareMathSymbol{\Xiit}{\mathalpha}{libgreekit}{88} +\DeclareMathSymbol{\Omicronit}{\mathalpha}{libgreekit}{79} +\DeclareMathSymbol{\Piit}{\mathalpha}{libgreekit}{80} +\DeclareMathSymbol{\Rhoit}{\mathalpha}{libgreekit}{82} +\DeclareMathSymbol{\Sigmait}{\mathalpha}{libgreekit}{83} +\DeclareMathSymbol{\Tauit}{\mathalpha}{libgreekit}{84} +\DeclareMathSymbol{\Upsilonit}{\mathalpha}{libgreekit}{85} +\DeclareMathSymbol{\Phiit}{\mathalpha}{libgreekit}{70} +\DeclareMathSymbol{\Chiit}{\mathalpha}{libgreekit}{81} +\DeclareMathSymbol{\Psiit}{\mathalpha}{libgreekit}{89} +\DeclareMathSymbol{\Omegait}{\mathalpha}{libgreekit}{87} +\DeclareMathSymbol{\alphait}{\mathalpha}{libgreekit}{97} +\DeclareMathSymbol{\betait}{\mathalpha}{libgreekit}{98} +\DeclareMathSymbol{\gammait}{\mathalpha}{libgreekit}{103} +\DeclareMathSymbol{\deltait}{\mathalpha}{libgreekit}{100} +\DeclareMathSymbol{\epsilonit}{\mathalpha}{libgreekit}{101} +\DeclareMathSymbol{\zetait}{\mathalpha}{libgreekit}{122} +\DeclareMathSymbol{\etait}{\mathalpha}{libgreekit}{104} +\DeclareMathSymbol{\thetait}{\mathalpha}{libgreekit}{106} +\DeclareMathSymbol{\iotait}{\mathalpha}{libgreekit}{105} +\DeclareMathSymbol{\kappait}{\mathalpha}{libgreekit}{107} +\DeclareMathSymbol{\lambdait}{\mathalpha}{libgreekit}{108} +\DeclareMathSymbol{\muit}{\mathalpha}{libgreekit}{109} +\DeclareMathSymbol{\nuit}{\mathalpha}{libgreekit}{110} +\DeclareMathSymbol{\xiit}{\mathalpha}{libgreekit}{120} +\DeclareMathSymbol{\omicronit}{\mathalpha}{libgreekit}{111} +\DeclareMathSymbol{\piit}{\mathalpha}{libgreekit}{112} +\DeclareMathSymbol{\rhoit}{\mathalpha}{libgreekit}{114} +\DeclareMathSymbol{\sigmait}{\mathalpha}{libgreekit}{115} +\DeclareMathSymbol{\tauit}{\mathalpha}{libgreekit}{116} +\DeclareMathSymbol{\upsilonit}{\mathalpha}{libgreekit}{117} +\DeclareMathSymbol{\phiit}{\mathalpha}{libgreekit}{102} +\DeclareMathSymbol{\chiit}{\mathalpha}{libgreekit}{113} +\DeclareMathSymbol{\psiit}{\mathalpha}{libgreekit}{121} +\DeclareMathSymbol{\omegait}{\mathalpha}{libgreekit}{119} +% \end{macrocode} +% Alternate shapes and other glyphs. +% \begin{macrocode} +\DeclareMathSymbol{\varsigmaup}{\mathalpha}{libgreekup}{99} +\DeclareMathSymbol{\varvarsigmaup}{\mathalpha}{libgreekup}{6} +\DeclareMathSymbol{\varSigmaup}{\mathalpha}{libgreekup}{22} +\DeclareMathSymbol{\Sampiup}{\mathalpha}{libgreekup}{23} +\DeclareMathSymbol{\sampiup}{\mathalpha}{libgreekup}{27} +\DeclareMathSymbol{\digammaup}{\mathalpha}{libgreekup}{147} +\DeclareMathSymbol{\Digammaup}{\mathalpha}{libgreekup}{195} +\DeclareMathSymbol{\koppaup}{\mathalpha}{libgreekup}{18} +\DeclareMathSymbol{\varsigmait}{\mathalpha}{libgreekit}{99} +\DeclareMathSymbol{\varvarsigmait}{\mathalpha}{libgreekit}{6} +\DeclareMathSymbol{\varSigmait}{\mathalpha}{libgreekit}{22} +\DeclareMathSymbol{\Sampiit}{\mathalpha}{libgreekit}{23} +\DeclareMathSymbol{\sampiit}{\mathalpha}{libgreekit}{27} +\DeclareMathSymbol{\digammait}{\mathalpha}{libgreekit}{147} +\DeclareMathSymbol{\Digammait}{\mathalpha}{libgreekit}{195} +\DeclareMathSymbol{\koppait}{\mathalpha}{libgreekit}{18} +% \end{macrocode} +% Some glyphs with diacritics. I hesitated keeping this, +% which comes from some file I had constituted in September 2011 +% to use LGR encoded fonts, and which I am reusing here. +% I hesitated also defining for them both `|up|' and `|it|' shapes. +% \begin{macrocode} +\DeclareMathSymbol{\alphatonosup}{\mathalpha}{libgreekup}{136} +\DeclareMathSymbol{\epsilontonosup}{\mathalpha}{libgreekup}{232} +\DeclareMathSymbol{\etatonosup}{\mathalpha}{libgreekup}{160} +\DeclareMathSymbol{\iotatonosup}{\mathalpha}{libgreekup}{208} +\DeclareMathSymbol{\omicrontonosup}{\mathalpha}{libgreekup}{236} +\DeclareMathSymbol{\upsilontonosup}{\mathalpha}{libgreekup}{212} +\DeclareMathSymbol{\omegatonosup}{\mathalpha}{libgreekup}{184} +\DeclareMathSymbol{\upsilondieresistonosup}{\mathalpha}{libgreekup}{246} +\DeclareMathSymbol{\iotadieresisup}{\mathalpha}{libgreekup}{240} +\DeclareMathSymbol{\iotadieresistonosup}{\mathalpha}{libgreekup}{242} +\DeclareMathSymbol{\upsilondieresisup}{\mathalpha}{libgreekup}{244} +\DeclareMathSymbol{\alphatonosit}{\mathalpha}{libgreekit}{136} +\DeclareMathSymbol{\epsilontonosit}{\mathalpha}{libgreekit}{232} +\DeclareMathSymbol{\etatonosit}{\mathalpha}{libgreekit}{160} +\DeclareMathSymbol{\iotatonosit}{\mathalpha}{libgreekit}{208} +\DeclareMathSymbol{\omicrontonosit}{\mathalpha}{libgreekit}{236} +\DeclareMathSymbol{\upsilontonosit}{\mathalpha}{libgreekit}{212} +\DeclareMathSymbol{\omegatonosit}{\mathalpha}{libgreekit}{184} +\DeclareMathSymbol{\upsilondieresistonosit}{\mathalpha}{libgreekit}{246} +\DeclareMathSymbol{\iotadieresisit}{\mathalpha}{libgreekit}{240} +\DeclareMathSymbol{\iotadieresistonosit}{\mathalpha}{libgreekit}{242} +\DeclareMathSymbol{\upsilondieresisit}{\mathalpha}{libgreekit}{244} +% \end{macrocode} +% Definition of the \cs{mathchar}'s without `|up/it|' postfix. There are 27 +% uppercase and 40 lowercase letters, for a total of 67 glyphs. Actually, as +% stated above, I had done some work with LGR in September 2011 when I +% realized that bold italic had gone missing from the ``8bit'' font support of +% libertine v5 compared to libertine v4, and was vaguely hoping that going via +% the LGR encoded font definition files would help, but it did not. I kept +% the file around, and basically only had to replace the font family name, or +% so I thought about ten days ago when I started re-examining the matter. But +% at no point did I go back to check if I had done exhaustive work in 2011 and +% whether some other glyphs could be accounted for by LGR (I did re-check an +% old file about the LGR encoding I had from that 2011 work, but did not try +% to check for updates). Anyway, it is very doubtful whether it made any +% sense for \libgreek to define control sequences for Greek letters with +% diacritics... +% \begin{macrocode} +\def\libgreek@setgreekcs{% + \iflibgreek@upper@up + \let\Alpha\Alphaup + \let\Beta\Betaup + \let\Gamma\Gammaup + \let\Delta\Deltaup + \let\Epsilon\Epsilonup + \let\Zeta\Zetaup + \let\Eta\Etaup + \let\Theta\Thetaup + \let\Iota\Iotaup + \let\Kappa\Kappaup + \let\Lambda\Lambdaup + \let\Mu\Muup + \let\Nu\Nuup + \let\Xi\Xiup + \let\Omicron\Omicronup + \let\Pi\Piup + \let\Rho\Rhoup + \let\Sigma\Sigmaup + \let\Tau\Tauup + \let\Upsilon\Upsilonup + \let\Phi\Phiup + \let\Chi\Chiup + \let\Psi\Psiup + \let\Omega\Omegaup + \let\Sampi\Sampiup + \let\Digamma\Digammaup + \let\varSigma\varSigmaup + \else + \let\Alpha\Alphait + \let\Beta\Betait + \let\Gamma\Gammait + \let\Delta\Deltait + \let\Epsilon\Epsilonit + \let\Zeta\Zetait + \let\Eta\Etait + \let\Theta\Thetait + \let\Iota\Iotait + \let\Kappa\Kappait + \let\Lambda\Lambdait + \let\Mu\Muit + \let\Nu\Nuit + \let\Xi\Xiit + \let\Omicron\Omicronit + \let\Pi\Piit + \let\Rho\Rhoit + \let\Sigma\Sigmait + \let\Tau\Tauit + \let\Upsilon\Upsilonit + \let\Phi\Phiit + \let\Chi\Chiit + \let\Psi\Psiit + \let\Omega\Omegait + \let\Sampi\Sampiit + \let\Digamma\Digammait + \let\varSigma\varSigmait + \fi + \iflibgreek@lower@up + \let\alpha\alphaup + \let\beta\betaup + \let\gamma\gammaup + \let\delta\deltaup + \let\epsilon\epsilonup + \let\zeta\zetaup + \let\eta\etaup + \let\theta\thetaup + \let\iota\iotaup + \let\kappa\kappaup + \let\lambda\lambdaup + \let\mu\muup + \let\nu\nuup + \let\xi\xiup + \let\omicron\omicronup + \let\pi\piup + \let\rho\rhoup + \let\sigma\sigmaup + \let\tau\tauup + \let\upsilon\upsilonup + \let\phi\phiup + \let\chi\chiup + \let\psi\psiup + \let\omega\omegaup + \let\varsigma\varsigmaup + \let\varvarsigma\varvarsigmaup + \let\sampi\sampiup + \let\digamma\digammaup + \let\koppa\koppaup + \let\alphatonos\alphatonosup + \let\epsilontonos\epsilontonosup + \let\etatonos\etatonosup + \let\iotatonos\iotatonosup + \let\omicrontonos\omicrontonosup + \let\upsilontonos\upsilontonosup + \let\omegatonos\omegatonosup + \let\upsilondieresistonos\upsilondieresistonosup + \let\iotadieresis\iotadieresisup + \let\iotadieresistonos\iotadieresistonosup + \let\upsilondieresis\upsilondieresisup + \else + \let\alpha\alphait + \let\beta\betait + \let\gamma\gammait + \let\delta\deltait + \let\epsilon\epsilonit + \let\zeta\zetait + \let\eta\etait + \let\theta\thetait + \let\iota\iotait + \let\kappa\kappait + \let\lambda\lambdait + \let\mu\muit + \let\nu\nuit + \let\xi\xiit + \let\omicron\omicronit + \let\pi\piit + \let\rho\rhoit + \let\sigma\sigmait + \let\tau\tauit + \let\upsilon\upsilonit + \let\phi\phiit + \let\chi\chiit + \let\psi\psiit + \let\omega\omegait + \let\varsigma\varsigmait + \let\varvarsigma\varvarsigmait + \let\sampi\sampiit + \let\digamma\digammait + \let\koppa\koppait + \let\alphatonos\alphatonosit + \let\epsilontonos\epsilontonosit + \let\etatonos\etatonosit + \let\iotatonos\iotatonosit + \let\omicrontonos\omicrontonosit + \let\upsilontonos\upsilontonosit + \let\omegatonos\omegatonosit + \let\upsilondieresistonos\upsilondieresistonosit + \let\iotadieresis\iotadieresisit + \let\iotadieresistonos\iotadieresistonosit + \let\upsilondieresis\upsilondieresisit + \fi +}% +\libgreek@setgreekcs +% \end{macrocode} +% And we have now reached the end of the \libgreek package code. The actual +% |.sty| file will contain an \cs{endinput} added by the DocStrip extraction. +%\MakePercentComment +% +%<*dtx> +\section{Implementation of the \libgreek-legacy package} +\gardesactifs +\let\relax +\let<*legacy>\gardesinactifs +\global\c@CodelineNo\z@ +\MakePercentIgnore +We use a rather short summary line because the package name is long and we are +maniac and want the thing to occupy only one line in the log file... +% +%<*legacy> % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{libgreek} - [2011/03/14 1.0 Libertine/Biolinum Greek in math mode (jfB)] -\RequirePackage{keyval} +\ProvidesPackage{libgreek-legacy} + [2022/11/11 1.1 libertine-legacy math Greek (JFB)] +% \end{macrocode} +% The font support from obsolete package \ctanpkg{libertine-legacy} must be +% present. The legacy code used one of two possible font definition files for +% the LaTeX font system with |U| encoding, either associated with Libertine or +% Biolinum. We check if the Libertine-associated file exists, else abort with +% an Error. +% \begin{macrocode} +\IfFileExists{ufxl03.fd}{% + }{% +\PackageError{libgreek-legacy}{% + Required font support file not present% + }{% + Is (now obsolete) libertine-legacy or earlier libertine v4 or v5\MessageBreak + package installed on your system?\MessageBreak + Maybe you meant to use libgreek not libgreek-legacy?\MessageBreak + Try again with libgreek, not libgreek-legacy. Will abort now, sorry}% + \endinput +} +% \end{macrocode} +% Now back to the old 2011 code. +% \begin{macrocode} \def\libgreek@font{fxl03} \def\libgreek@shape{it} \def\libgreek@uppershape{n} @@ -163,9 +1551,26 @@ \edef\libgreek@series{\seriesdefault} \edef\libgreek@boldseries{\bfdefault} \newif\iflibgreek@sty -%% +% \end{macrocode} +% Original package used only \ctanpkg{keyval} package and handled options via +% a \cs{ProcessOptionsWithKV} which had been copied-pasted from some forgotten +% source. Let's rather load \ctanpkg{kvoptions}. But we will not use its +% declarative interface, only \cs{define@key} directly. +% +% No need for a \cs{fxb@scale} for Biolinum as file |ufxb03.fd| also uses \cs{fxl@scale}. +% \begin{macrocode} +\RequirePackage{kvoptions} \define@key{libgreek}{scale}[1]{\def\fxl@scale{#1}} -\define@key{libgreek}{libertine}[true]{} +% \end{macrocode} +% The |1.0| code did not let the |libertine| key do the \cs{def} as has been +% added at |1.1|, thus in situation with |biolinum,libertine| it did not +% revert action of |biolinum|. +% +% By the way this \ctanpkg{keyval} strange syntax means that +% |libertine=false| will have exact same effect |libertine=true|... it is only +% there to allow its usage without a |=value| part... +% \begin{macrocode} +\define@key{libgreek}{libertine}[true]{\def\libgreek@font{fxl03}} \define@key{libgreek}{biolinum}[true]{\def\libgreek@font{fxb03}} \define@key{libgreek}{style}{\libgreek@stytrue\edef\libgreek@style{#1}} \define@key{libgreek}{Greek}{\def\libgreek@Greekshape{#1}} @@ -173,43 +1578,31 @@ \edef\libgreek@uppershape{#1}} \define@key{libgreek}{series}{\edef\libgreek@series{#1}} \define@key{libgreek}{boldseries}{\edef\libgreek@boldseries{#1}} -%% -\def\ProcessOptionsWithKV#1{% - \let\@tempc\relax - \let\libgreek@tempa\@empty - \@for\CurrentOption:=\@classoptionslist\do{% - \@ifundefined{KV@#1@\CurrentOption}% - {}% - {% - \edef\libgreek@tempa{\libgreek@tempa,\CurrentOption,}% - \@expandtwoargs\@removeelement\CurrentOption - \@unusedoptionlist\@unusedoptionlist - }% - }% - \edef\libgreek@tempa{% - \noexpand\setkeys{#1}{% - \libgreek@tempa\@ptionlist{\@currname.\@currext}% - }% - }% - \libgreek@tempa - \let\CurrentOption\@empty -} -\ProcessOptionsWithKV{libgreek} -\AtEndOfPackage{% - \let\@unprocessedoptions\relax -} -%% +% \end{macrocode} +% Now we call the \ctanpkg{kvoptions} interface. We did not change the family +% key from legacy code so we have to inform \ctanpkg{kvoptions} about that. +% Then \cs{ProcessKeyvalOptions} replaces the |1.0| definition of some +% \cs{ProcessOptionsWithKV}. No need to set the |prefix| key as we don't +% use \ctanpkg{kvoptions} declarative interface. +% \begin{macrocode} +\SetupKeyvalOptions{family=libgreek} +\ProcessKeyvalOptions* +% \end{macrocode} +% The |1.0| code uses one or two Symbol fonts, depending on whether the shape +% for uppercase is same or differs from the shape for lowercase. Indeed it +% assigns one symbol font to lowercase and one symbol font for uppercase. +% \begin{macrocode} \def\lbg@ISO{ISO} \def\lbg@French{French} \iflibgreek@sty - \ifx\libgreek@style\lbg@ISO + \ifx\libgreek@style\lbg@ISO \def\libgreek@shape{it} \libgreek@twoshapesfalse \else - \ifx\libgreek@style\lbg@French + \ifx\libgreek@style\lbg@French \def\libgreek@shape{n} \libgreek@twoshapesfalse - \else + \else \def\libgreek@shape{it} \def\libgreek@uppershape{n} \fi\fi @@ -218,7 +1611,9 @@ \else\edef\libgreek@uppershape{\libgreek@Greekshape}\fi \ifx\libgreek@shape\libgreek@uppershape\libgreek@twoshapesfalse\fi \fi -%% +% \end{macrocode} +% The |libgreekfont| is the one for lowercase (and perhaps uppercase). +% \begin{macrocode} \DeclareSymbolFont{libgreekfont}{U}{\libgreek@font} {\libgreek@series} {\libgreek@shape} @@ -226,7 +1621,9 @@ {\libgreek@boldseries} {\libgreek@shape} \def\libgreek@Greek{libgreekfont} -%% +% \end{macrocode} +% If a separate one is needed for uppercase it is |libGreekfont|. +% \begin{macrocode} \iflibgreek@twoshapes \DeclareSymbolFont{libGreekfont}{U}{\libgreek@font} {\libgreek@series} @@ -236,7 +1633,22 @@ {\libgreek@uppershape} \def\libgreek@Greek{libGreekfont} \fi -%% +% \end{macrocode} +% The macro \cs{libgreek@Greek} holds the symbol font name for uppercase. +% +% Here the legacy code has all definitions done in the order of the +% codepoint; this was a bit perilous as lowercase may be intermixed with +% uppercase, and indeed on two occasions (\cs{varvarkappa} and +% \cs{varvarsigma}) the possibly wrong font was assigned. +% +% Apart from that, it is not exactly clear why I decided to define control +% sequences for letters with diacritics; it was not even really documented, +% as the user was only invited to check a |libgreekcheck.tex| file (now not +% included anymore among extracted files from the |.dtx|). +% +% Another thing to notice is that all those Greek letters are here defined to +% be of type \cs{mathord}. +% \begin{macrocode} \DeclareMathSymbol{\Alphatonos}{\mathord}{\libgreek@Greek}{134} \DeclareMathSymbol{\anoteleia}{\mathord}{libgreekfont}{135} \DeclareMathSymbol{\Epsilontonos}{\mathord}{\libgreek@Greek}{136} @@ -307,15 +1719,19 @@ \DeclareMathSymbol{\omicrontonos}{\mathord}{libgreekfont}{204} \DeclareMathSymbol{\upsilontonos}{\mathord}{libgreekfont}{205} \DeclareMathSymbol{\omegatonos}{\mathord}{libgreekfont}{206} -%% \DeclareMathSymbol{\vartheta}{\mathord}{libgreekfont}{209} \DeclareMathSymbol{\varUpsilon}{\mathord}{\libgreek@Greek}{210} \DeclareMathSymbol{\varUpsilontonos}{\mathord}{\libgreek@Greek}{211} \DeclareMathSymbol{\varUpsilondieresis}{\mathord}{\libgreek@Greek}{212} \DeclareMathSymbol{\varphi}{\mathord}{libgreekfont}{213} \DeclareMathSymbol{\varpi}{\mathord}{libgreekfont}{214} -\DeclareMathSymbol{\varvarkappa}{\mathord}{\libgreek@Greek}{215} -\DeclareMathSymbol{\varvarsigma}{\mathord}{\libgreek@Greek}{219} +% \end{macrocode} +% The |1.0| code used \cs{libgreek@Greek} here for the next two but +% this was a bug, so after some hesitation I fix it for the |1.1| release, +% eleven years later... +% \begin{macrocode} +\DeclareMathSymbol{\varvarkappa}{\mathord}{libgreekfont}{215} +\DeclareMathSymbol{\varvarsigma}{\mathord}{libgreekfont}{219} \DeclareMathSymbol{\Digamma}{\mathord}{\libgreek@Greek}{220} \DeclareMathSymbol{\digamma}{\mathord}{libgreekfont}{221} \DeclareMathSymbol{\Koppa}{\mathord}{\libgreek@Greek}{222} @@ -327,36 +1743,18 @@ \DeclareMathSymbol{\varTheta}{\mathord}{\libgreek@Greek}{244} \DeclareMathSymbol{\varepsilon}{\mathord}{libgreekfont}{245} \DeclareMathSymbol{\reversedvarepsilon}{\mathord}{libgreekfont}{246} -%% +% \end{macrocode} +% Those for some reason got listed here last, despite having lower +% codepoints. +% \begin{macrocode} \DeclareMathSymbol{\tonos}{\mathord}{libgreekfont}{132} \DeclareMathSymbol{\dieresistonos}{\mathord}{libgreekfont}{133} -\endinput % \end{macrocode} -% \iffalse -% +% And we have now reached the end of the \libgreek-legacy package code. The actual +% |.sty| file will contain an \cs{endinput} added by the DocStrip extraction. +%\MakePercentComment +% %<*dtx> -% \fi -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -% \iffalse -% -% \fi -% -% \CheckSum{} -% \Finale -\endinput \ No newline at end of file +\Finale +%% +%% End of file `libgreek.dtx'. -- cgit v1.2.3