diff options
author | Norbert Preining <norbert@preining.info> | 2022-11-14 03:04:08 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-11-14 03:04:08 +0000 |
commit | 1638c7bf59f91caa61849a5c5d73be504d07a49a (patch) | |
tree | 1000754f2cc885bb216b9b4173cb101c13159785 /macros/latex/contrib | |
parent | 1b59c3c45170420996d629b296e2214933ee1add (diff) |
CTAN sync 202211140304
Diffstat (limited to 'macros/latex/contrib')
44 files changed, 2771 insertions, 624 deletions
diff --git a/macros/latex/contrib/eolang/eolang.dtx b/macros/latex/contrib/eolang/eolang.dtx index 3b2db126a4..49a30283bb 100644 --- a/macros/latex/contrib/eolang/eolang.dtx +++ b/macros/latex/contrib/eolang/eolang.dtx @@ -50,7 +50,7 @@ %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{eolang} %<*package> -[2022-11-05 0.4.0 Formulas and Graphs for EO Programming Language] +[2022-11-13 0.5.0 Formulas and Graphs for EO Programming Language] %</package> %<*driver> \documentclass{ltxdoc} @@ -100,8 +100,8 @@ % \usepackage{eolang} % \begin{document} % \begin{phiquation*} -% a -> [[ -% ^ !-> $.b, +% a -> [[ % it's abstract! +% ^ !-> $.b.^{^2}, 0-> TRUE, % b -> [[ c -> |fn|(56), % @ -> |hello|($), % \Delta ..> 01-FE-C3 ]]]],\\ @@ -141,15 +141,22 @@ % \end{itemize} % Also, a few symbols are supported for $\varphi$PU architecture: % \begin{itemize}\setlength\itemsep{0em} -% \item ``|-abc>|'' maps to ``$\xrightarrow{\text{\sffamily\scshape abc}}$'' -% (|\xrightarrow{\text{\sffamily\scshape abc}}|), +% \item ``|-abc>|'' maps to ``$\phiSlot{abc}$'' +% (|\phiSlot{abc}|), % \item ``|:=|'' maps to ``$\vDash$'' % (|\vDash|). % \end{itemize} +% Before any arrow you can put a number, which will be rendered as |\alpha| with an index. + +% Numbers are automatically converted to fixed-width font, no need to always decorate them with vertical bars. + +% |TRUE| and |FALSE| are automatically converted to fixed-width font too. + % \DescribeMacro{\phiq} % The command |\phiq| lets you inline a $\varphi$-calculus expressions % using the same simple plain-text notation: +% \docshotOptions{firstline=4,lastline=10} % \begin{docshot} % \documentclass{article} % \pagestyle{empty} @@ -171,12 +178,12 @@ % \usepackage{eolang} % \begin{document} % \begin{sodg} -% v0 \\ v0=> \\ v0!A +% v0 \\ v0===> \\ v0!!A % v1 xy:v0,-.8,2.8 data:42 \\ =>v1 % v0->v1 a:x rho % v2 xy:v0,+1,+1 atom:\xi.x+1 % v1->v2 a:|hi| bend:-15 -% v2->v0 pi bend:10 +% v2->v0 pi bend:10 % a comment % \end{sodg} % \end{document} % \end{docshot} @@ -195,6 +202,7 @@ % \item ``|box:<txt>|'' attaches a ``|<box>|'' to it, % \item ``|xy:<v>,<r>,<d>|'' places this vertex in a position relative to the vertex ``|<v>|,'' % shifting it right by ``|<r>|'' and down by ``|<d>|'' centimetres. +% \item ``|+:<v>|'' makes a copy of an existing vertex and all its kids. % \end{itemize} % The following markers are supported for an edge: @@ -208,11 +216,17 @@ % It is also possible to put transformation arrows to the graph, with the help of ``|v0=>v1|'' syntax. The arrow % will be placed exactly between two vertices. You can also put an arrow from a vertex to the right, -% saying for example ``|v3=>|'', of from the left to the vertes, by saying for example ``|=>v5|.'' +% saying for example ``|v3=>|'', of from the left to the vertes, by saying for example ``|=>v5|.'' If you +% want the arrow to stay further away from the vertex than usually, use a few ``|=|'' symbols, for example ``|===>v0|.'' % You can also put a marker at the left side of a vertex, using ``|v5!A|'' syntax, where ``|v5|'' is the vertex % and ``|A|'' is the text in the marker. They are useful when you put a few graphs on a picture -% explaining how one graph is transformed to another one and so forth. +% explaining how one graph is transformed to another one and so forth. You can make a distance between the vertex +% and the marker a bit larger by using a few exclamation marks, +% for example ``|v5!!!A|'' will make a distance three times bigger. + +% You can make a clone of an existing vertex together with all its dependants, by using this syntax: ``|v0+a|.'' +% Here, we make a copy of ``|v0|'' and call it ``|v0a|.'' See the example below. % Be aware, unrecognized markers are simply ignored, without any error reporting. @@ -223,6 +237,7 @@ % \eolang{} language. It understands |anonymous| mode of \href{https://ctan.org/pkg/acmart}{acmart} and prints itself % differently, to double-blind your paper. There is also |\phic| command to print % the name of \phic{}, also sensitive to |anonymous| mode. The macro |\xmir| prints "XMIR". +% \docshotOptions{firstline=4,lastline=10} % \begin{docshot} % \documentclass[anonymous]{acmart} % \thispagestyle{empty} @@ -230,22 +245,53 @@ % \begin{document} % In our research we use \eolang{}, \\ % an experimental object-oriented \\ -% dataflow language, \phic{}, \\ -% as its formal foundation, and \xmir{} \\ -% --- its XML-based presentation. +% dataflow language, \phic{}, as its \\ +% formal foundation, and \xmir{} --- \\ +% its XML-based presentation. % \end{document} % \end{docshot} % \DescribeMacro{\phiConst} -% A simple commands is defined to help you render an arrow for a constant attribute. -% It is recommende not to use it directly, but use |!->| instead. However, if you +% \DescribeMacro{\phiWave} +% \DescribeMacro{\phiDotted} +% A few simple commands are defined to help you render arrows. +% It is recommende not to use them directly, but use |!->| instead. However, if you % want to use |\phiConst|, wrap it in |\mathrel| for better display: +% \docshotOptions{firstline=6,lastline=12} % \begin{docshot} % \documentclass{article} % \pagestyle{empty} +% \usepackage[paperwidth=3in]{geometry} % \usepackage{eolang} -% \begin{document} -% \phiq{[[ x \mathrel{\phiConst} y ]]} +% \begin{document}\noindent +% If $x$ is an identifier and $y$ is +% an objects, then $x \phiConst y$ +% makes $y$ a constant, +% $x \phiWave y$ makes it a decoratee +% of arbitrary number of control-flow +% objects, while $x \phiDotted y$ +% makes it a special attribute. +% \end{document} +% \end{docshot} + +% \DescribeMacro{\phiMany} +% Sometimes you may need to simplify the way you describe an object: +% \docshotOptions{firstline=6,lastline=14} +% \begin{docshot} +% \documentclass{article} +% \pagestyle{empty} +% \usepackage[paperwidth=3in]{geometry} +% \usepackage{eolang} +% \begin{document}\noindent +% The expression +% \phiq{[[ 1-> x_1, +% 2-> x_2, \dots, +% \alpha_n -> x_n ]]} +% and expression +% \phiq{[[ \alpha_i +% \phiMany{->}{i=1}{n} x_i ]]} +% are syntactically different but +% semantically equivalent. % \end{document} % \end{docshot} @@ -269,6 +315,7 @@ % new lines in the formula. If you don't want this to happen and want to parse % the next line as the a continuation of the current line, you can use a single % backslash as it's done here: +% \docshotOptions{firstline=6,lastline=11} % \begin{docshot} % \documentclass{article} % \usepackage{amsmath} @@ -286,6 +333,7 @@ % This is how you can use |\dfrac| from |amsmath| for large inference rules, % with the help of |\begin{split}| and |\end{split}|: +% \docshotOptions{firstline=6,lastline=15} % \begin{docshot} % \documentclass{article} % \usepackage{amsmath} @@ -295,11 +343,11 @@ % \begin{phiquation*} % \dfrac{\begin{split} % x->[[@->y, z->42, -% \alpha_0->?, \alpha_1->42]] +% 0->?, 1->42]] % \end{split}}{\begin{split} % x->[[@->y, z->?, f ~> |pi|( -% \alpha_0->[[ \psi !-> |hello|(12) ]], -% \alpha_1->42)]] +% 0->[[ \psi !-> |hello|(12) ]], +% 1->42)]] % \end{split}}\text{R2}. % \end{phiquation*} % \end{document} @@ -320,8 +368,28 @@ % \end{document} % \end{docshot} +% It's possible to use |\label| inside |phiquation| environment: +% \docshotOptions{firstline=6,lastline=13} +% \begin{docshot} +% \documentclass{article} +% \usepackage[paperwidth=3in]{geometry} +% \usepackage{eolang} +% \pagestyle{empty} +% \begin{document}\noindent +% Discriminant can be calculated using +% the following simple formula: +% \begin{phiquation} +% D = b{^2} - 4ac. +% \label{d} +% \end{phiquation} +% Eq.~\ref{d} is also widely used in +% number theory and polynomial factoring. +% \end{document} +% \end{docshot} + % The |phiquation| environment will automatically align formulas by the first % arrow, if there are only left-aligned formulas: +% \docshotOptions{firstline=5,lastline=10} % \begin{docshot} % \documentclass{acmart} % \usepackage{eolang} @@ -330,23 +398,109 @@ % \begin{phiquation*} % x(\pi) -> [[\lambda ..> f_1]], \\ % x(a,b,c) -> [[ \alpha_0 -> ?, \ -% @ -> |hello|($) ]], \\ +% @ -> |hello|($), x -> |FALSE| ]], \\ % \Delta = |43-09|. % \end{phiquation*} % \end{document} % \end{docshot} -% Inside |phiquation| environment you can use labels too (just put |\label| after the formula): +% If not a single line is indented in |phiquation|, all formulas will be centered: +% \docshotOptions{firstline=5,lastline=9} +% \begin{docshot} +% \documentclass{acmart} +% \usepackage{eolang} +% \thispagestyle{empty} +% \begin{document} +% \begin{phiquation*} +% [[ b -> ? ]], \\ +% [[ @ -> TRUE, \Delta ..> 42 ]], \\ +% \Delta = |43-09|. +% \end{phiquation*} +% \end{document} +% \end{docshot} + +% You can make a copy of a vertex together with its kids: +% \docshotOptions{firstline=5,lastline=15} +% \begin{docshot} +% \documentclass{article} +% \pagestyle{empty} +% \usepackage{eolang} +% \begin{document} +% \begin{sodg} +% v0 \\ v0!!A +% v1 xy:v0,.7,1 +% v0->v1 a:x bend:-10 +% v2 xy:v1,-1.3,.8 +% v1->v2 a:|foo| bend:-20 +% v0+a xy:v0,3,0 +% v3a xy:v0a,-.7,1 +% v0a->v3a a:e bend:-15 +% v0=>v0a \\ v0a!B +% \end{sodg} +% \end{document} +% \end{docshot} + +% You can make a copy from a copy: +% \docshotOptions{firstline=5,lastline=15} % \begin{docshot} % \documentclass{article} +% \pagestyle{empty} % \usepackage{eolang} -% \usepackage[paperwidth=2in]{geometry} +% \begin{document} +% \begin{sodg} +% v0 +% v1 xy:v0,.7,1 +% v0->v1 a:x bend:-10 +% v0+a xy:v0,3,0 \\ v0=>v0a +% v2a xy:v1a,-.8,1.3 +% v1a->v2a a:e +% v0a+b xy:v0a,3,0 \\ v0a=>v0b +% v3b xy:v2b,-1,-1 +% v2b->v3b a:\psi +% \end{sodg} +% \end{document} +% \end{docshot} + +% You can have ``broken'' edges, using ``|break|'' attribute of an edge. +% The attribute must have a value, which is the percentange of the path +% between vertices that the arrow should take (can't be more than 80 and less than 20). +% This may be convenient when you can't fit all edges into the graph, +% for example: +% \docshotOptions{firstline=5,lastline=14} +% \begin{docshot} +% \documentclass{article} % \pagestyle{empty} +% \usepackage{eolang} % \begin{document} -% \begin{phiquation} -% x -> [[\Delta -> 42]]. \label{eq:A} -% \end{phiquation} -% Eq.~\ref{eq:A} is easy to read. +% \begin{sodg} +% v0 +% v1 xy:v0,-1,1 +% v0->v1 a:x +% v2 xy:v0,0,1 +% v0->v2 a:y +% v3 xy:v0,1,1 +% v0->v3 a:z +% v3->v1 a:f bend:-75 break:30 +% \end{sodg} +% \end{document} +% \end{docshot} + +% You can add \href{https://en.wikipedia.org/wiki/PGF/TikZ}{TikZ} commands to |sodg| graph, for example: +% \docshotOptions{firstline=6,lastline=13} +% \begin{docshot} +% \documentclass{article} +% \pagestyle{empty} +% \usepackage{eolang} +% \usetikzlibrary{fit} +% \begin{document} +% \begin{sodg} +% v0 +% v1 xy:v0,-1,1 \\ v0->v1 +% v2 xy:v0,0,1 \\ v0->v2 +% v3 xy:v0,1,1 \\ v0->v3 +% \node[draw=red,rounded corners,\ +% dotted,fit=(v1) (v2)] {}; +% \end{sodg} % \end{document} % \end{docshot} @@ -424,6 +578,8 @@ % \changes{0.1.0}{2022/10/26}{A new Perl script "\texttt{eolang-phi.pl}" added for parsing of phi expressions.} % \changes{0.2.0}{2022/10/29}{Numbers automatically render as \texttt{\char`\\texttt}. No need to use vertical bars around them anymore.} % \changes{0.3.0}{2022/10/30}{New arrow added, that looks like \texttt{\char`\\leadsto}.} +% \changes{0.5.0}{2022/11/11}{Automated formatting of \texttt{TRUE} and \texttt{FALSE} added.} +% \changes{0.5.0}{2022/11/13}{A new syntax introduced for \texttt{\char`\\alpha}-attributes: \texttt{0->}.} % Then, we create a Perl script for |phiquation| processing using |VerbatimOut| from % \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}: % \begin{macrocode} @@ -445,31 +601,16 @@ foreach my $t (@lines) { print '% ', $t, "\n"; } print '% ---', "\n"; -if ($env eq 'phiq') { - print '$'; -} else { - print '\begin{', $env, '}\begin{split}'; -} +$tex =~ s/%.*\n/\n/g; $tex =~ s/^\s+|\s+$//g; +my $gathered = (0 == $tex =~ /\n\s+/g); if ($env ne 'phiq') { $tex =~ s/\s+\\\n\s*//g; $tex =~ s/\\\\\n/\n\n/g; + $tex =~ s/\n*(\\label\{[^\}]+\})\n*/\1/g; } -$tex =~ s/([\s,>\(])([0-9A-F][0-9A-F-]*)/\1|\2|/g; -$tex =~ s/\?/\\varnothing{}/g; -$tex =~ s/@/\\varphi{}/g; $tex =~ s/&/\\sigma{}/g; -$tex =~ s/\^/\\rho{}/g; -$tex =~ s/\$/\\xi{}/g; -$tex =~ s/-([a-z]+)>/\\mathrel{\\xrightarrow{\\text{\\sffamily\\scshape \1}}}/g; -$tex =~ s/!->/\\mathrel{\\phiConst}/g; -$tex =~ s/->/\\mathrel{\\mapsto}/g; -$tex =~ s/~>/\\mathrel{\\phiWave}/g; -$tex =~ s/:=/\\mathrel{\\vDash}/g; -$tex =~ s/..>/\\mathrel{\\phiDotted}/g; -$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}{}/g; -$tex =~ s/\[\[/\\llbracket\\mathrel{}/g; -$tex =~ s/\]\]/\\mathrel{}\\rrbracket{}/g; +$tex =~ s/(\s|^)([0-9]+)(->|\.\.>|~>|:=|!->)/\1\\alpha_{\2} \3/g; if ($env ne 'phiq') { $tex =~ s/\\begin\{split\}\n/\\begin{split}&/g; $tex =~ s/\n\s*\\end\{split\}/\\end{split}/g; @@ -477,20 +618,57 @@ if ($env ne 'phiq') { $tex =~ s/\n/\\\\[-4pt]&/g; $tex =~ s/([^&\s])\s{2}([^\s])/\1 \2/g; $tex =~ s/\s{2}/ \\quad{}/g; - my @leads = $tex =~ /&[^\s]+\s/g; + my @leads = $tex =~ /&[^\s]+\s(->|:=|=)/g; my @eols = $tex =~ /&/g; $tex = '&' . $tex; if (0+@leads == 0+@eols && 0+@eols > 0) { - $tex =~ s/&([^\s]+)\s/\1&/g; + $tex =~ s/&([^\s\}]+)\s/\1&/g; + $gathered = 0; } } +$tex =~ s/\$/\\xi{}/g; +$tex =~ s/(?<!\{)\^/\\rho{}/g; +$tex =~ s/\[\[/\\llbracket\\mathrel{}/g; +$tex =~ s/\]\]/\\mathrel{}\\rrbracket{}/g; +$tex =~ s/([\s,>\(])([0-9A-F]{2}(?:-[0-9A-F]{2})+|[0-9]+(?:\.[0-9]+)?)/\1|\2|/g; +$tex =~ s/TRUE/|TRUE|/g; +$tex =~ s/FALSE/|FALSE|/g; +$tex =~ s/\?/\\varnothing{}/g; +$tex =~ s/@/\\varphi{}/g; +$tex =~ s/-([a-z]+)>/\\mathrel{\\phiSlot{\1}}/g; +$tex =~ s/!->/\\mathrel{\\phiConst}/g; +$tex =~ s/->/\\mathrel{\\mapsto}/g; +$tex =~ s/~>/\\mathrel{\\phiWave}/g; +$tex =~ s/:=/\\mathrel{\\vDash}/g; +$tex =~ s/\.\.>/\\mathrel{\\phiDotted}/g; +$tex =~ s/\|{2,}/|/g; +$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}{}/g; +if ($env eq 'phiq') { + print '$' if ($tex ne ''); +} else { + print '\begin{', $env, '}'; + if ($gathered) { + print '\begin{gathered}'; + } else { + print '\begin{split}'; + } +} +if ($gathered) { + $tex =~ s/(\\\\(?:\[[^\]]+\])?)&/\1/g; + $tex =~ s/^&//g; +} print $tex; if ($env eq 'phiq') { - print '$'; + print '$' if ($tex ne ''); } else { - print '\end{split}\end{', $env, '}'; + if ($gathered) { + print '\end{gathered}'; + } else { + print '\end{split}'; + } + print '\end{', $env, '}'; } -print '\endinput', "\n"; +print '\endinput%'; \end{VerbatimOut} \message{eolang: File with Perl script '\eolang@tmpdir/eolang-phi.pl' saved^^J}% @@ -556,6 +734,10 @@ print '\endinput', "\n"; % \changes{0.4.0}{2022/10/31}{Labels on the edges are automatically printed as math formulas. Also, boxes are prefixed with \texttt{\char`\\Delta} and \texttt{\char`\\lambda} commands.} % \changes{0.4.0}{2022/10/31}{Relative positioning of vertices fixed.} % \changes{0.4.0}{2022/10/31}{Transforming arrows added with \texttt{=>} syntax, also markers with exclamation mark syntax.} +% \changes{0.5.0}{2022/11/09}{New syntax introduced that allows to make clones of vertices and all their dependants.} +% \changes{0.5.0}{2022/11/09}{Now edges may have \texttt{break} attribute, to make them shorter.} +% \changes{0.5.0}{2022/11/10}{It is possible to use multiple ``equaltion sign'' symbols for transition arrows \texttt{=>}.} +% \changes{0.5.0}{2022/11/12}{It is possible to use tikz commands inside \texttt{sodg} environment.} % Then, we create a Perl script for |sodg| graphs processing using |VerbatimOut| from % \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}: % \begin{macrocode} @@ -571,53 +753,78 @@ sub fmt { $tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}/g; return $tex; } +sub vertex { + my ($v) = @_; + if (index($v, 'v0') == 0) { + return '\Phi'; + } else { + $v =~ s/^v/v_/g; + $v =~ s/[^0-9]$//g; + return $v; + } +} +sub tailor { + my ($t, $m) = @_; + $t =~ s/<([A-Z]?${m}[A-Z]?):([^>]+)>/\2/g; + $t =~ s/<[A-Z]+:[^>]+>//g; + return $t; +} open(my $fh, '<', $ARGV[0]); my $tex; { local $/; $tex = <$fh>; } -print '% This file is auto-generated', "\n"; -print '% There are ', length($tex), - ' chars in the input: ', $ARGV[0], "\n"; -print '% ---', "\n"; if (index($tex, "\t") > 0) { print "TABS are prohibited!"; exit 1; } +print '% This file is auto-generated', "\n%\n"; +print '% --- there are ', length($tex), + ' chars in the input (', $ARGV[0], "):\n"; foreach my $t (split (/\n/g, $tex)) { print '% ', $t, "\n"; } -print '% ---', "\n"; -$tex =~ s/^\s+|\s+$//g; +print "% ---\n"; $tex =~ s/\\\\/\n/g; +$tex =~ s/\\\n//g; $tex =~ s/(\\[a-zA-Z]+) +/\1/g; -$tex =~ s/\n\s+/\n/g; -my @cmds = split (/\n/g, $tex); +$tex =~ s/\n{2,}/\n/g; +my @cmds = split(/\n/g, $tex); +print '% --- before processing:' . "\n"; +foreach my $t (split (/\n/g, $tex)) { + print '% ', $t, "\n"; +} +print '% ---'; +print ' (' . (0+@cmds) . " lines)\n"; print '\begin{phicture}', "\n"; -foreach my $c (@cmds) { - my ($head, $tail) = split (/ /, $c, 2); +for (my $c = 0; $c < 0+@cmds; $c++) { + my $cmd = $cmds[$c]; + $cmd =~ s/^\s+//g; + $cmd =~ s/%.*//g; + my ($head, $tail) = split(/ /, $cmd, 2); my %opts = {}; - foreach my $p (split (/ /, $tail)) { - my ($q, $t) = split (/:/, $p); + foreach my $p (split(/ /, $tail)) { + my ($q, $t) = split(/:/, $p); $opts{$q} = $t; } if (index($head, '->') >= 0) { - print '\draw['; + my $draw = '\draw['; if (exists $opts{'pi'}) { - print ',phi-pi'; + $draw = $draw . '<MB:phi-pi><F:draw=none>'; if (not exists $opts{'a'}) { $opts{'a'} = '\pi'; } } - print ']'; + $draw = $draw . ']'; my ($from, $to) = split (/->/, $head); - print ' (', $from, ') '; + $draw = $draw . " (${from}) "; if (exists $opts{'bend'}) { - print 'edge [bend right=', num($opts{'bend'}), ']'; + $draw = $draw . 'edge [<F:draw=none,><MF:bend right=' . + num($opts{'bend'}) . '>]'; } else { - print '--'; + $draw = $draw . '--'; } if (exists $opts{'rho'} or exists $opts{'rrho'}) { - print ' pic[sloped,phi-rho]{parallel arrow={'; - print '-' if not exists $opts{'rrho'}; - print '0.3,-0.15}}'; + $draw = $draw . ' pic[sloped,phi-rho]{parallel arrow={'; + $draw = $draw . '-' if not exists $opts{'rrho'}; + $draw = $draw . '0.3,-0.15}}'; } if (exists $opts{'a'}) { my $a = $opts{'a'}; @@ -626,27 +833,102 @@ foreach my $c (@cmds) { } else { $a = fmt($a); } - print ' node [phi-attr] {', $a, '}'; + $draw = $draw . '<MB: node [phi-attr] {' . $a . '}>'; + } + if (exists $opts{'break'}) { + $draw = $draw . '<F: coordinate [pos=' . + ($opts{'break'} / 100) . '] (break)>'; + } + $draw = $draw . " (<MF:${to}><B:break-v>)"; + if (exists $opts{'break'}) { + print tailor($draw, 'F') . ";\n"; + print ' \node[outer sep=.1cm,inner sep=0cm] ' . + 'at (break) (break-v) {$' . vertex($to) . + '$};' . "\n"; + print ' ' . tailor($draw, 'B'); + } else { + print tailor($draw, 'M'); } - print ' (', $to, ')'; } elsif (index($head, '=>') >= 0) { - my ($from, $to) = split (/=>/, $head); + my ($from, $to) = split (/=+>/, $head); + my $size = () = $head =~ /=/g; if ($from eq '') { - print '\node [phi-arrow, left=.6cm of ' . - $to . ']'; + print '\node [phi-arrow, left=' . ($size * 0.6) . 'cm of ' . + $to . '.center]'; } elsif ($to eq '') { - print '\node [phi-arrow, right=.6cm of ' . - $from . ']'; + print '\node [phi-arrow, right=' . ($size * 0.6) . 'cm of ' . + $from . '.center]'; } else { print '\node [phi-arrow] at ($(' . $from . ')!0.5!(' . $to . ')$)'; } print '{}'; } elsif (index($head, '!') >= 0) { - my ($v, $marker) = split (/!/, $head); - print '\node [phi-marker, left=.6cm of ' . - $v . ']{' . fmt($marker) . '}'; - } else { + my ($v, $marker) = split (/!+/, $head); + my $size = () = $head =~ /!/g; + print '\node [phi-marker, left=' . + ($size * 0.6) . 'cm of ' . + $v . '.center]{' . fmt($marker) . '}'; + } elsif (index($head, '+') >= 0) { + my ($v, $suffix) = split (/\+/, $head); + my @friends = ($v); + foreach my $c (@cmds) { + $e = $c; + $e =~ s/^\s+//g; + my $h = $e; + $h = substr($e, 0, index($e, ' ')) if index($e, ' ') >= 0; + foreach my $f (@friends) { + my $add = ''; + if (index($h, $f . '->') >= 0) { + $add = substr($h, index($h, '->') + 2); + } + if ($h =~ /->\Q${f}\E$/) { + $add = substr($h, 0, index($h, '->')); + } + if (index($e, ' xy:' . $f . ',') >= 0) { + $add = $h; + } + if (index($add, '+') == -1 + and $add ne '' + and not(grep(/^\Q${add}\E$/, @friends))) { + push(@friends, $add); + } + } + } + my @extra = (); + foreach my $e (@cmds) { + $m = $e; + if ($m =~ /^\s*\Q${v}\E\s/) { + next; + } + if ($m =~ /^\s*[^\s]+\+/ and not($m =~ /^\s*\Q${head}\E\s/)) { + next; + } + foreach my $f (@friends) { + my $h = $f; + $h =~ s/[a-z]$//g; + if ($m =~ s/^(\s*)\Q${f}\E\+\Q${suffix}\E\s?/\1${h}${suffix} /g) { + last; + } + $m =~ s/^(\s*)\Q${f}\E\s/\1${h}${suffix} /g; + $m =~ s/^(\s*)\Q${f}\E->/\1${h}${suffix}->/g; + $m =~ s/\sxy:\Q${f}\E,/ xy:${h}${suffix},/g; + $m =~ s/->\Q${f}\E\s/->${h}${suffix} /g; + } + if ($m ne $e) { + push(@extra, ' ' . $m); + } + } + splice(@extra, 0, 0, @extra[-1]); + splice(@extra, -1, 1); + splice(@extra, 0, 0, '% clone of ' . $v . ' (' . $head . + '), friends: [' . join(', ', @friends) . '] in ' . + (0+@cmds) . ' lines'); + splice(@cmds, $c, 1, @extra); + print '% cloned ' . $v . ' at line no.' . $c . + ' (+' . (0+@extra) . ' lines -> ' . + (0+@cmds) . ' lines total)'; + } elsif ($head =~ /^v[0-9]+[a-z]?$/) { print '\node['; if (exists $opts{'xy'}) { my ($v, $right, $down) = split(/,/, $opts{'xy'}); @@ -663,7 +945,7 @@ foreach my $c (@cmds) { } print ',' . $loc . '='; print abs(num($down)) . 'cm and ' . - abs(num($right)) . 'cm of ' . $v; + abs(num($right)) . 'cm of ' . $v . '.center'; } if (exists $opts{'data'}) { print ',phi-data'; @@ -693,25 +975,24 @@ foreach my $c (@cmds) { } print ']'; print ' (', $head, ')'; - print ' {$'; - if (index($head, 'v0') == 0) { - print '\Phi'; - } else { - $name = $head; - $name =~ s/^v/v_/g; - $name =~ s/[^0-9]$//g; - print $name; - } - print '$}'; + print ' {$' . vertex($head) . '$}'; if (exists $opts{'box'}) { print ' node[phi-box] at ('; print $head, '.south east) {'; print $opts{'box'}, '}'; } + } else { + print $cmd; } print ";\n"; } -print '\end{phicture}', "\n", '\endinput'; +print '\end{phicture}%', "\n"; +print "% --- after processing:\n%"; +foreach my $c (@cmds) { + print '% ', $c, "\n"; +} +print '% --- (' . (0+@cmds) . " lines)\n"; +print '\endinput%'; \end{VerbatimOut} \message{eolang: File with Perl script '\eolang@tmpdir/eolang-sodg.pl' saved^^J}% @@ -735,12 +1016,11 @@ print '\end{phicture}', "\n", '\endinput'; \RequirePackage{tikz} \usetikzlibrary{arrows} \usetikzlibrary{shapes} + \usetikzlibrary{snakes} \usetikzlibrary{decorations} \usetikzlibrary{decorations.pathmorphing} - \usetikzlibrary{intersections} \usetikzlibrary{positioning} \usetikzlibrary{calc} - \usetikzlibrary{shapes.arrows} % \end{macrocode} % \end{macro} @@ -839,7 +1119,7 @@ print '\end{phicture}', "\n", '\endinput'; % \begin{macrocode} \newcommand\xmir{% \ifdefined\anon% - \anon[XML']{XMIR}% + \anon[XML$^+$]{XMIR}% \else% XMIR% \fi% @@ -868,6 +1148,24 @@ print '\end{phicture}', "\n", '\endinput'; % \end{macrocode} % \end{macro} +% \begin{macro}{\phiSlot} +% \changes{0.5.0}{2022/11/10}{New command \texttt{\char`\\phiSlot} added to denote a link to a slot in a basket.} +% Then, we define a command to render an arrow for a slot in a basket: +% \begin{macrocode} +\newcommand\phiSlot[1]{% + \xrightarrow{\text{\sffamily\scshape #1}}} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\phiMany} +% \changes{0.5.0}{2022/11/10}{New command \texttt{\char`\\phiMany} enables iterating over an arrow.} +% Then, we define a command to an arrow with iterating indecies: +% \begin{macrocode} +\newcommand\phiMany[3]{% + \overunderset{\scriptscriptstyle #3}{\scriptscriptstyle #2}{#1}} +% \end{macrocode} +% \end{macro} + % \begin{macro}{\phiDotted} % \changes{0.1.0}{2022/10/27}{New command \texttt{\char`\\phiDotted} added to denote a link to a special attribute.} % Then, we define a command to render an arrow for a special attribute, diff --git a/macros/latex/contrib/eolang/eolang.pdf b/macros/latex/contrib/eolang/eolang.pdf Binary files differindex 73fcd9885e..763d5bf07b 100644 --- a/macros/latex/contrib/eolang/eolang.pdf +++ b/macros/latex/contrib/eolang/eolang.pdf diff --git a/macros/latex/contrib/hyperref/ChangeLog.txt b/macros/latex/contrib/hyperref/ChangeLog.txt index 2b72f66824..a3190b351d 100644 --- a/macros/latex/contrib/hyperref/ChangeLog.txt +++ b/macros/latex/contrib/hyperref/ChangeLog.txt @@ -1,3 +1,14 @@ +2022-22-11 Ulrike Fischer/David Carlisle + * don't set the pagesize if \mag is different from 1000, see issue #1138 in latex3. + * avoid error from old labels if hyperref is loaded, issue #261 + * fixed issue #260 + * fixed a nopatch command, issue #258 + * Use protected commands in \contentsline to allow the use of \MakeUppercase, issue #121 + +2022-09-22 Ulrike Fischer/David Carlisle + * adapt setpagesize option to changes in LaTeX (stockwidth is always defined) + * Use hooks instead of auxhook package + 2022-06-20 Ulrike Fischer/David Carlisle * don't redefine \@secondoffive and \@fifthoffive, issue #238 * add interface to access some pdf related values unchanged (needed by hyperxmp). diff --git a/macros/latex/contrib/hyperref/README.md b/macros/latex/contrib/hyperref/README.md index 71ecefab3e..666a1d850a 100644 --- a/macros/latex/contrib/hyperref/README.md +++ b/macros/latex/contrib/hyperref/README.md @@ -1,6 +1,6 @@ # README for hyperref bundle -Version 2022-09-22 v7.00t +Version 2022-11-13 v7.00u ## INTRODUCTION diff --git a/macros/latex/contrib/hyperref/doc/backref.pdf b/macros/latex/contrib/hyperref/doc/backref.pdf Binary files differindex 0f2ad5cc10..1b7f41e6fb 100644 --- a/macros/latex/contrib/hyperref/doc/backref.pdf +++ b/macros/latex/contrib/hyperref/doc/backref.pdf diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.css b/macros/latex/contrib/hyperref/doc/hyperref-doc.css index 1b4e83d6c6..f6c9350717 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc.css +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.css @@ -235,6 +235,8 @@ table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } .hline td, .cline td{ padding: 0; } .hline hr, .cline hr{border:none;border-top:1px solid black;} .hline {border-top: 1px solid black;} +.hline + .vspace:last-child{display:none;} +.hline:first-child{border-bottom:1px solid black;border-top:none;} .tabbing-right {text-align:right;} div.float, div.figure {margin-left: auto; margin-right: auto;} div.float img {text-align:center;} @@ -297,6 +299,8 @@ table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } .hline td, .cline td{ padding: 0; } .hline hr, .cline hr{border:none;border-top:1px solid black;} .hline {border-top: 1px solid black;} +.hline + .vspace:last-child{display:none;} +.hline:first-child{border-bottom:1px solid black;border-top:none;} div.array {text-align:center;} table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } table.longtable{border-collapse: collapse; border-spacing: 0;} diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.html b/macros/latex/contrib/hyperref/doc/hyperref-doc.html index aee3f8ddd2..64466b39ad 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc.html +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.html @@ -25,7 +25,7 @@ href="https://github.com/latex3/hyperref/issues" class="url" ><span class="ec-lmvtt-10x-x-120">https://github.com/latex3/hyperref/issues</span></a><span class="ec-lmr-12">)</span></div><br /> <div class="date" ><span -class="ec-lmr-12">2022-09-22 v7.00t</span></div> +class="ec-lmr-12">2022-11-13 v7.00u</span></div> </div> <h3 class="likesectionHead"><a id="x1-1000"></a>Contents</h3> diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf Binary files differindex b9244c8f3f..3ffbe3e714 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex index 1cc482538b..fe44eb889a 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex @@ -166,7 +166,7 @@ } \makeatother \title{Hypertext marks in \hologo{LaTeX}: a manual for \xpackage{hyperref}} -\date{2022-09-22 v7.00t} +\date{2022-11-13 v7.00u} \begin{document} diff --git a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf Binary files differindex 44cc9b0b06..e9de52c516 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf +++ b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf diff --git a/macros/latex/contrib/hyperref/doc/hyperref.pdf b/macros/latex/contrib/hyperref/doc/hyperref.pdf Binary files differindex b52703cc40..7eca5a7272 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref.pdf +++ b/macros/latex/contrib/hyperref/doc/hyperref.pdf diff --git a/macros/latex/contrib/hyperref/doc/nameref.pdf b/macros/latex/contrib/hyperref/doc/nameref.pdf Binary files differindex 420f41424e..591097484e 100644 --- a/macros/latex/contrib/hyperref/doc/nameref.pdf +++ b/macros/latex/contrib/hyperref/doc/nameref.pdf diff --git a/macros/latex/contrib/hyperref/hluatex.dtx b/macros/latex/contrib/hyperref/hluatex.dtx index 3675cd0cec..4a4eb9af12 100644 --- a/macros/latex/contrib/hyperref/hluatex.dtx +++ b/macros/latex/contrib/hyperref/hluatex.dtx @@ -1,6 +1,6 @@ % \iffalse % Source File: hluatex.dtx -% 2022-09-22 v7.00t +% 2022-11-13 v7.00u % % Copyright % 2016-2019 Oberdiek Package Support Group @@ -31,7 +31,7 @@ % % \begin{macrocode} %<*luatex> -%% 2022-09-22 v7.00t +%% 2022-11-13 v7.00u %% force unicode encoding, see issue #101 %% code mostly copied from hxetex.def \HyPsd@LoadUnicode diff --git a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx index d31a2009e2..5d6799a206 100644 --- a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx +++ b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx @@ -53,7 +53,7 @@ % }^^A % } % -% \date{Version 2022-09-22 v7.00t} +% \date{Version 2022-11-13 v7.00u} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/hyperref/hyperref-patches.dtx b/macros/latex/contrib/hyperref/hyperref-patches.dtx index ebe25f7f62..b7c0f828e3 100644 --- a/macros/latex/contrib/hyperref/hyperref-patches.dtx +++ b/macros/latex/contrib/hyperref/hyperref-patches.dtx @@ -55,7 +55,7 @@ % }^^A % } % -% \date{Version 2022-09-22 v7.00t} +% \date{Version 2022-11-13 v7.00u} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/hyperref/hyperref.dtx b/macros/latex/contrib/hyperref/hyperref.dtx index fb6aefd9b2..bc8d936c81 100644 --- a/macros/latex/contrib/hyperref/hyperref.dtx +++ b/macros/latex/contrib/hyperref/hyperref.dtx @@ -52,7 +52,7 @@ %<puvnenc>\ProvidesFile{puvnenc.def} %<puarenc>\ProvidesFile{puarenc.def} %<psdextra>\ProvidesFile{psdextra.def} -%<!none&!packageEnd> [2022-09-22 v7.00t % +%<!none&!packageEnd> [2022-11-13 v7.00u % %<package> Hypertext links for LaTeX] %<nohyperref> Dummy hyperref (SR)] %<driver> Hyperref documentation driver file] @@ -8226,8 +8226,8 @@ % \end{macro} % \begin{macro}{\HyperDestRename} % \begin{macrocode} -% \end{macrocode} \let\HyperDestRename\ltx@gobbletwo +% \end{macrocode} % \end{macro} % \begin{macrocode} \fi @@ -12016,7 +12016,14 @@ % \begin{macro}{\contentsline} % The page number might be empty. In this case the link for the % page number is suppressed to avoid little link boxes. +% +% change 2022-11-13: To avoid problems if |MakeUppercase| is used +% around the entry we use special protected commands: +% % \begin{macrocode} +\protected\def\Hy@toclinkstart{\hyper@linkstart{link}{\Hy@tocdestname}} +\protected\def\Hy@toclinkend{\hyper@linkend} + \def\contentsline#1#2#3#4{% \begingroup \Hy@safe@activestrue @@ -12030,7 +12037,7 @@ \csname l@#1\endcsname{#2}{#3}% \or % section \csname l@#1\endcsname{% - \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend + \Hy@toclinkstart{#2}\Hy@toclinkend }{#3}% \or % page \def\Hy@temp{#3}% @@ -12038,20 +12045,20 @@ \csname l@#1\endcsname{#2}{#3}% \else \csname l@#1\endcsname{{#2}}{% - \hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend + \Hy@toclinkstart{#3}\Hy@toclinkend }% \fi \else % all \def\Hy@temp{#3}% \ifx\Hy@temp\ltx@empty \csname l@#1\endcsname{% - \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend + \Hy@toclinkstart{#2}\Hy@toclinkend }{}% \else \csname l@#1\endcsname{% - \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend + \Hy@toclinkstart{#2}\Hy@toclinkend }{% - \hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend + \Hy@toclinkstart{#3}\Hy@toclinkend }% \fi \fi @@ -12442,6 +12449,8 @@ % normal text (which is used as an anchor). % (|\endinput| have to be on the same line like |\fi|, or you % have to use |\expandafter| before.) +% +% change 2022-11-13: added an |\@empty| for issue\#261. % \begin{macrocode} \ifHy@texht \expandafter\endinput @@ -12455,7 +12464,7 @@ Reference `#3' on page \thepage \space undefined% }% \else - \expandafter\Hy@setref@link#1\@empty\@empty\@nil{#2}% + \expandafter\Hy@setref@link#1\@empty\@empty\@empty\@nil{#2}% \fi } % \end{macrocode} @@ -13527,24 +13536,26 @@ \fi \fi }{% - \ifdim\stockwidth>\z@ - \ifdim\stockheight>\z@ - \setlength{\pdfpagewidth}{\stockwidth}% - \setlength{\pdfpageheight}{\stockheight}% - \else - \ifdim\paperwidth>\z@ - \ifdim\paperheight>\z@ - \setlength{\pdfpagewidth}{\paperwidth}% - \setlength{\pdfpageheight}{\paperheight}% + \ifnum\mag=\@m + \ifdim\stockwidth>\z@ + \ifdim\stockheight>\z@ + \setlength{\pdfpagewidth}{\stockwidth}% + \setlength{\pdfpageheight}{\stockheight}% + \else + \ifdim\paperwidth>\z@ + \ifdim\paperheight>\z@ + \setlength{\pdfpagewidth}{\paperwidth}% + \setlength{\pdfpageheight}{\paperheight}% + \fi \fi \fi - \fi - \else - \ifdim\stockwidth=\z@ - \ifdim\paperwidth>\z@ - \ifdim\paperheight>\z@ - \setlength{\pdfpagewidth}{\paperwidth}% - \setlength{\pdfpageheight}{\paperheight}% + \else + \ifdim\stockwidth=\z@ + \ifdim\paperwidth>\z@ + \ifdim\paperheight>\z@ + \setlength{\pdfpagewidth}{\paperwidth}% + \setlength{\pdfpageheight}{\paperheight}% + \fi \fi \fi \fi @@ -14600,6 +14611,7 @@ \AtBeginShipoutFirst{% \ifHy@setpagesize \begingroup + \ifnum\mag=\@m \ifdim\stockwidth>\z@ \ifdim\stockheight>\z@ \special{papersize=\the\stockwidth,\the\stockheight}% @@ -14619,6 +14631,7 @@ \fi \fi \fi + \fi \endgroup \fi \Hy@DisableOption{setpagesize}% @@ -14757,6 +14770,7 @@ \ifcsname mediaheight\endcsname \ifHy@setpagesize \providecommand*{\VTeXInitMediaSize}{% + \ifnum\mag=\@m \ifdim\stockwidth>\z@ \ifdim\stockheight>\z@ \setlength\mediaheight\stockheight @@ -14779,6 +14793,7 @@ \fi \fi \fi + \fi }% \Hy@AtBeginDocument{\VTeXInitMediaSize}% \fi @@ -16409,6 +16424,7 @@ \AtBeginShipoutFirst{% \ifHy@setpagesize \begingroup + \ifnum\mag=\@m \ifdim\stockwidth>\z@ \ifdim\stockheight>\z@ \special{papersize=\the\stockwidth,\the\stockheight}% @@ -16428,6 +16444,7 @@ \fi \fi \fi + \fi \endgroup \fi \Hy@DisableOption{setpagesize}% diff --git a/macros/latex/contrib/hyperref/nameref.dtx b/macros/latex/contrib/hyperref/nameref.dtx index 0c2c3b9606..e2b9624c01 100644 --- a/macros/latex/contrib/hyperref/nameref.dtx +++ b/macros/latex/contrib/hyperref/nameref.dtx @@ -535,7 +535,7 @@ % \begin{macrocode} \ltx@IfUndefined{descriptionlabel}{% }{% - \@ifundefined{NR@nopatch@longtable} + \@ifundefined{NR@nopatch@lists} {\let\NRorg@descriptionlabel\descriptionlabel \def\descriptionlabel#1{% \NR@gettitle{#1}% diff --git a/macros/latex/contrib/hyperref/xr-hyper.sty b/macros/latex/contrib/hyperref/xr-hyper.sty index 9472448b3a..9bed6dae69 100644 --- a/macros/latex/contrib/hyperref/xr-hyper.sty +++ b/macros/latex/contrib/hyperref/xr-hyper.sty @@ -61,7 +61,7 @@ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{xr-hyper} - [2022-09-22 v7.00t eXternal References (DPC)] + [2022-11-13 v7.00u eXternal References (DPC)] \def\externaldocument{\@testopt\XR@cite{}} \let\externalcitedocument\externaldocument diff --git a/macros/latex/contrib/libgreek/README b/macros/latex/contrib/libgreek/README index 2cc6120233..2393b00837 100644 --- a/macros/latex/contrib/libgreek/README +++ b/macros/latex/contrib/libgreek/README @@ -1,42 +1,67 @@ +-------------------------------------------+ - + libgreek + - + `Libertine/Biolinum Greek in math mode' + - + + - + jfbu (at) free.fr + + + libgreek + + + Greek letters in math mode from + + + Libertinus or Linux Libertine + + + jfbu (at) free (dot) fr + +-------------------------------------------+ -This is the README file for the LaTeX2e package `libgreek', -version 1.0, 2011/03/14 + This is the README file for the LaTeX2e package + `libgreek', version 1.1 of 2022/11/11. -\usepackage{libgreek} for using the Linux-Libertine font for -the Greek letters in math mode. + Copyright (C) 2011-2012, 2022 Jean-Francois Burnol. -\usepackage[biolinum]{libgreek} for using the Biolinum font -instead. + This Work may be distributed and/or modified + under the conditions of the LaTeX Project Public License, + version 1.3c. 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. -The fonts themselves and their LaTeX support files as -provided in the libertine-legacy (or earlier libertine) -package must be present on the system. + This Work includes libgreek.sty, libgreek-legacy.sty, as + well as the documentation libgreek.pdf, this README and + the source file libgreek.dtx. -Other options are of the key=value type: +With \usepackage{libgreek} the Greek letters in math mode +will be extracted from font support files included with the +`libertinus-type1' package maintained by Bob Tennent. -style=TeX: lowercase Greek italic and uppercase upright, -style=ISO: lowercase and uppercase italic, -style=French: lowercase and uppercase upright. +The shape of the Greek letters are configured via package +options, and they also come in \...up and \...it variants. -See the pdf documentation for the further options. -Compile or look at libgreekcheck.tex to see the available -Greek macros in math mode. +On old systems having kept the now obsolete `libertine-legacy' +(also maintained by Bob Tennent), `libgreek' will hand over +automatically to a secondary package `libgreek-legacy' which +for backwards compatibility is almost identical to the initial +1.0 release of 2011/03/14 of `libgreek'. This legacy mode +does not provide the \...up and \...it control sequences. -Copyright (C) 2011, 2012 by Jean-Francois Burnol. +Manual installation: +------------------- - The files of this package 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. +Execute This creates + + etex libgreek.dtx libgreek.sty + libgreek-legacy.sty + libgreek.tex - 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. +The first two are the package files. The last one is for +building the PDF documentation. + +To build the PDF: + + latexmk libgreek.tex + dvipdfmx libgreek.dvi + +********** This is possible only on a system with the +********** libertine-legacy package available to LaTeX. + +The PDF documentation then includes the commented source code. + +It is possible to run latex + dvipdfmx, pdflatex, lualatex, or +xelatex directly on libgreek.dtx rather than on libgreek.tex. +The PDF will then not included the commented source code. + +Whether with or without source code, PDF produced via latex + +dvipdfmx or xelatex has smaller size than the one from +pdflatex or lualatex due to font compression differences. 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 +%% <jfbu at free dot fr> +%% +%</dtx> +%<*tex> +\def\libgreekversion{1.1} +\def\libgreekdate{2022/11/11} +%</tex> +%<*dtx> +\iffalse %</dtx> -% -%<*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<space> by 1<space> for no source code +\input libgreek.dtx +%%% Local Variables: +%%% mode: latex +%%% End: +%</tex> +%<*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} -%</driver> -% \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</dtx>\relax +\let<*sty>\gardesinactifs + +\MakePercentIgnore +%</dtx> +%<*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 +%</sty> +%<*dtx> +\section{Implementation of the \libgreek-legacy package} +\gardesactifs +\let</dtx>\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... +%</dtx> +%<*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 -%</code> +% 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 +%</legacy> %<*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 -%</dtx> -% \fi -% -% \CheckSum{} -% \Finale -\endinput
\ No newline at end of file +\Finale +%% +%% End of file `libgreek.dtx'. diff --git a/macros/latex/contrib/libgreek/libgreek.ins b/macros/latex/contrib/libgreek/libgreek.ins deleted file mode 100644 index 359893b078..0000000000 --- a/macros/latex/contrib/libgreek/libgreek.ins +++ /dev/null @@ -1,80 +0,0 @@ -%% -%% Copyright (C) 2011, 2012 by Jean-Francois Burnol -%% -%% Please report errors to jfbu (at) free.fr -%% -%% This file 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. -%% -%% --------------- start of docstrip commands ------------------ -%% -\def\filedate{2011/03/14} -\def\batchfile{libgreek.ins} -\input docstrip.tex - -{\ifx\generate\undefined -\Msg{**********************************************} -\Msg{*} -\Msg{* This installation requires docstrip} -\Msg{* version 2.3c or later.} -\Msg{*} -\Msg{* An older version of docstrip has been input} -\Msg{*} -\Msg{**********************************************} -\errhelp{Move or rename old docstrip.tex.} -\errmessage{Old docstrip in input path} -\batchmode -\csname @@end\endcsname -\fi} - -\declarepreamble\mainpreamble -This is a generated file. - - Copyright (C) 2011, 2012 by Jean-Francois Burnol - - Please report errors to jfbu (at) free.fr - - 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. - -\endpreamble - -\keepsilent - -\usedir{tex/latex/libgreek} - -\usepreamble\mainpreamble - -\askforoverwritefalse - -\generate{\file{libgreek.sty}{\from{libgreek.dtx}{code}} - } - -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* \space\space libgreek.sty} -\Msg{*} -\Msg{* To produce the documentation run libgreek.dtx through} -\Msg{* LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} - - -\endbatchfile diff --git a/macros/latex/contrib/libgreek/libgreek.pdf b/macros/latex/contrib/libgreek/libgreek.pdf Binary files differindex 8e1c8c4c89..7bf88d48eb 100644 --- a/macros/latex/contrib/libgreek/libgreek.pdf +++ b/macros/latex/contrib/libgreek/libgreek.pdf diff --git a/macros/latex/contrib/libgreek/libgreekcheck.tex b/macros/latex/contrib/libgreek/libgreekcheck.tex deleted file mode 100644 index f125242a5a..0000000000 --- a/macros/latex/contrib/libgreek/libgreekcheck.tex +++ /dev/null @@ -1,120 +0,0 @@ -%% -%% Copyright (C) 2011, 2012 by Jean-Francois Burnol -%% -%% Please report errors to jfbu (at) free.fr -%% -%% This file 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. -%% -%% Provides additional documentation for libgreek package -%% -\documentclass[a4paper,12pt]{article} -\usepackage[hscale=.8]{geometry} -\usepackage{multicol} - -\usepackage{libgreek} -%\usepackage[biolinum]{libgreek} - -\begin{document} - -\begin{multicols}{4} -\noindent -Alphatonos\ $\Alphatonos$\\ -anoteleia\ $\anoteleia$\\ -Epsilontonos\ $\Epsilontonos$\\ -Etatonos\ $\Etatonos$\\ -Iotatonos\ $\Iotatonos$\\ -Omicrontonos\ $\Omicrontonos$\\ -Upsilontonos\ $\Upsilontonos$\\ -Omegatonos\ $\Omegatonos$\\ -iotadieresistonos\ $\iotadieresistonos$\\ -Alpha\ $\Alpha$\\ -Beta\ $\Beta$\\ -Gamma\ $\Gamma$\\ -Delta\ $\Delta$\\ -Epsilon\ $\Epsilon$\\ -Zeta\ $\Zeta$\\ -Eta\ $\Eta$\\ -Theta\ $\Theta$\\ -Iota\ $\Iota$\\ -Kappa\ $\Kappa$\\ -Lambda\ $\Lambda$\\ -Mu\ $\Mu$\\ -Nu\ $\Nu$\\ -Xi\ $\Xi$\\ -Omicron\ $\Omicron$\\ -Pi\ $\Pi$\\ -Rho\ $\Rho$\\ -Sigma\ $\Sigma$\\ -Tau\ $\Tau$\\ -Upsilon\ $\Upsilon$\\ -Phi\ $\Phi$\\ -Chi\ $\Chi$\\ -Psi\ $\Psi$\\ -Omega\ $\Omega$\\ -Iotadieresis\ $\Iotadieresis$\\ -Upsilondieresis\ $\Upsilondieresis$\\ -alphatonos\ $\alphatonos$\\ -epsilontonos\ $\epsilontonos$\\ -etatonos\ $\etatonos$\\ -iotatonos\ $\iotatonos$\\ -upsilondieresistonos\ $\upsilondieresistonos$\\ -alpha\ $\alpha$\\ -beta\ $\beta$\\ -gamma\ $\gamma$\\ -delta\ $\delta$\\ -epsilon\ $\epsilon$\\ -zeta\ $\zeta$\\ -eta\ $\eta$\\ -theta\ $\theta$\\ -iota\ $\iota$\\ -kappa\ $\kappa$\\ -lambda\ $\lambda$\\ -mu\ $\mu$\\ -nu\ $\nu$\\ -xi\ $\xi$\\ -omicron\ $\omicron$\\ -pi\ $\pi$\\ -rho\ $\rho$\\ -varsigma\ $\varsigma$\\ -sigma\ $\sigma$\\ -tau\ $\tau$\\ -upsilon\ $\upsilon$\\ -phi\ $\phi$\\ -chi\ $\chi$\\ -psi\ $\psi$\\ -omega\ $\omega$\\ -iotadieresis\ $\iotadieresis$\\ -upsilondieresis\ $\upsilondieresis$\\ -omicrontonos\ $\omicrontonos$\\ -upsilontonos\ $\upsilontonos$\\ -omegatonos\ $\omegatonos$\\ -vartheta\ $\vartheta$\\ -varUpsilon\ $\varUpsilon$\\ -varUpsilontonos\ $\varUpsilontonos$\\ -varUpsilondieresis\ $\varUpsilondieresis$\\ -varphi\ $\varphi$\\ -varpi\ $\varpi$\\ -varvarkappa\ $\varvarkappa$\\ -varvarsigma\ $\varvarsigma$\\ -Digamma\ $\Digamma$\\ -digamma\ $\digamma$\\ -Koppa\ $\Koppa$\\ -koppa\ $\koppa$\\ -Sampi\ $\Sampi$\\ -sampi\ $\sampi$\\ -varkappa\ $\varkappa$\\ -varrho\ $\varrho$\\ -varTheta\ $\varTheta$\\ -varepsilon\ $\varepsilon$\\ -reversedvarepsilon\ $\reversedvarepsilon$\\ -\end{multicols} - -\end{document} -\endinput diff --git a/macros/latex/contrib/photobook/Makefile b/macros/latex/contrib/photobook/Makefile index fd760d0352..24fa243a4f 100644 --- a/macros/latex/contrib/photobook/Makefile +++ b/macros/latex/contrib/photobook/Makefile @@ -58,7 +58,8 @@ MODULE := photobook VERSION = $(strip $(shell \ cat $(MODULE).cls \ | grep 'VERSION{' \ - | sed 's/.*{\(.*\)}.*/\1/')) + | sed 's/.*{\(.*\)}.*/\1/' \ + | sed 's/v//')) DATE = $(strip $(shell date "+%Y%m%d%H%M")) COMMIT = $(strip $(shell git rev-parse HEAD)) @@ -266,10 +267,6 @@ manual: mv manual/*.pdf . -%.zipnote: %.zip - zipnote $< > $@ - - .PHONY: dist dist: $(DIST_FILES) $(MD) $(DIST_DIR) @@ -279,9 +276,30 @@ dist: $(DIST_FILES) | sed 's/^\@ \([^(].*\)$$/@ \1\n@=$(MODULE)\/\1/' \ | zipnote -w $(DIST_DIR)/$(DIST_NAME).zip -CTAN: dist - $(MD) $(DIST_DIR)/CTAN - cp $(DIST_DIR)/$(DIST_NAME).zip $(DIST_DIR)/CTAN/$(MODULE).zip + +# this is used to create a CTAN-compatible dist archive... +.PHONY: ctan-dist +ctan-dist: dist + cp -f $(DIST_DIR)/$(DIST_NAME).zip $(DIST_DIR)/$(MODULE).zip + + + +.PHONY: tag +tag: + @echo "Will create and publish git tag:" + @echo " $(VERSION)" + @echo "Last 5 tags:" + @git tag -l '[0-9]*'\ + | tail -n 5 \ + | sed 's/^/ /' + @echo "Note that this must be done after a commit." + @read -p "(press any key to continue or ctrl-c to cancel)" + git tag "$(VERSION)" + git commit origin "$(VERSION)" + + +#.PHONY: publish +#publish: dist .PHONY: all diff --git a/macros/latex/contrib/photobook/README.md b/macros/latex/contrib/photobook/README.md index cbab31c280..8a1aea8caa 100644 --- a/macros/latex/contrib/photobook/README.md +++ b/macros/latex/contrib/photobook/README.md @@ -18,6 +18,12 @@ ## Build / Install +The package is available on: +- CTAN: https://ctan.org/pkg/photobook +- GitHub: https://github.com/flynx/photobook + + +To install from source: ```shell # get the source... $ git clone https://github.com/flynx/photobook.git @@ -35,7 +41,6 @@ $ make pdf For more info on `make` targets see the: [./Makefile](./Makefile) - ## Authors [Alex A. Naanou](https://github.com/flynx) diff --git a/macros/latex/contrib/photobook/photobook.cls b/macros/latex/contrib/photobook/photobook.cls index c4f2d56c05..408acee173 100644 --- a/macros/latex/contrib/photobook/photobook.cls +++ b/macros/latex/contrib/photobook/photobook.cls @@ -58,7 +58,7 @@ %%% NOTE: \def\<module-name>@[A-Z]+ macros will be visible to both the %%% code and the generated docs... -\edef\photobook@FILEVERSION{v0.1} +\edef\photobook@FILEVERSION{v0.1.3} \edef\photobook@FILEDATE{2021-07-28} @@ -926,14 +926,25 @@ \else \def\pdfpagelayout{\photobook@pdfpagelayout}\fi % items to ignore in different layouts... - % XXX is this the correct way to go??? \ifcoverlayout - \setlength\coverflap{\photobook@coverflap} + \setlength\coverflap{ + \ifx\coverflap\empty + \photobook@coverflap + \else + \coverflap \fi} \else \setlength\coverflap{0pt}\fi \ifjacketlayout - \setlength\jacketwrap{\photobook@jacketwrap} - \setlength\jacketflap{\photobook@jacketflap} + \setlength\jacketwrap{ + \ifx\jacketwrap\empty + \photobook@jacketwrap + \else + \jacketwrap \fi} + \setlength\jacketflap{ + \ifx\jacketflap\empty + \photobook@jacketflap + \else + \jacketflap \fi} \else \setlength\jacketwrap{0pt} \setlength\jacketflap{0pt}\fi @@ -1803,7 +1814,6 @@ \end{inlinecell*}% \end{turn}} - %% \DescribeEnv{cliptocell} % %% Clip content to parent cell. @@ -3697,7 +3707,7 @@ %% \begin{minipage}{\textwidth} %% \begin{verbatim} %% -%% backflap spline/vspine frontflap +%% backflap spine/vspine frontflap %% . backcover . frontcover . %% v v v v v %% +---+---------------+---+---------------+---+ @@ -3711,6 +3721,11 @@ %% \end{verbatim} %% \end{minipage} %% +%% Note that when typesetting a spine with both top-down and bottom-up +%% text it is recommended to use |topdown|/|bottomup| in |zinlinecell|'s +%% in a normal |spine| rather than using a |vspine| and trying to rotate +%% part of the content. +%% \newenvironment{frontcover}{% \begin{cell*}{ \bleed diff --git a/macros/latex/contrib/photobook/photobook.pdf b/macros/latex/contrib/photobook/photobook.pdf Binary files differindex 42b6a53eb4..505e80f057 100644 --- a/macros/latex/contrib/photobook/photobook.pdf +++ b/macros/latex/contrib/photobook/photobook.pdf diff --git a/macros/latex/contrib/photobook/scripts/make-images.sh b/macros/latex/contrib/photobook/scripts/make-images.sh index 7be3a53cf8..7be3a53cf8 100644..100755 --- a/macros/latex/contrib/photobook/scripts/make-images.sh +++ b/macros/latex/contrib/photobook/scripts/make-images.sh diff --git a/macros/latex/contrib/postnotes/CHANGELOG.md b/macros/latex/contrib/postnotes/CHANGELOG.md index 6df07b54a7..5ae69925f0 100644 --- a/macros/latex/contrib/postnotes/CHANGELOG.md +++ b/macros/latex/contrib/postnotes/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog -## [Unreleased](https://github.com/gusbrs/postnotes/compare/v0.1.6...HEAD) +## [Unreleased](https://github.com/gusbrs/postnotes/compare/v0.1.7...HEAD) + +## [v0.1.7](https://github.com/gusbrs/postnotes/compare/v0.1.6...v0.1.7) (2022-11-13) + +### Added +- German localization (see issue + [#2](https://github.com/gusbrs/postnotes/issues/2)). ## [v0.1.6](https://github.com/gusbrs/postnotes/compare/v0.1.5...v0.1.6) (2022-08-01) diff --git a/macros/latex/contrib/postnotes/postnotes-code.pdf b/macros/latex/contrib/postnotes/postnotes-code.pdf Binary files differindex a47aefa002..ac52fa60c3 100644 --- a/macros/latex/contrib/postnotes/postnotes-code.pdf +++ b/macros/latex/contrib/postnotes/postnotes-code.pdf diff --git a/macros/latex/contrib/postnotes/postnotes.dtx b/macros/latex/contrib/postnotes/postnotes.dtx index aa53abda40..2ab7308ace 100644 --- a/macros/latex/contrib/postnotes/postnotes.dtx +++ b/macros/latex/contrib/postnotes/postnotes.dtx @@ -147,7 +147,7 @@ % % % \begin{macrocode} -\ProvidesExplPackage {postnotes} {2022-08-01} {0.1.6} +\ProvidesExplPackage {postnotes} {2022-11-13} {0.1.7} {Endnotes for LaTeX} % \end{macrocode} % @@ -2640,7 +2640,8 @@ % % \subsection*{French} % -% French localization validated by \texttt{Pika78} at \githubissue{1}. +% French localization validated by \contributor{\texttt{Pika78}} at +% \githubissue{1}. % % \begin{macrocode} \@@_define_language:nn { french } @@ -2659,6 +2660,29 @@ % \end{macrocode} % % +% \subsection*{German} +% +% German localization provided by \contributor{Herbert Voß} at +% \githubissue{2}. +% +% \begin{macrocode} +\@@_define_language:nn { german } + { + \tl_set:Nn \pntitle { Endnoten } + \tl_set:Nn \pnhdnotes { Endnoten } + \tl_set:Nn \pnhdtopage { zu~Seite } + \tl_set:Nn \pnhdtopages { zu~Seiten } + } +\@@_set_babel_language:nn { german } { german } +\@@_set_babel_language:nn { ngerman } { german } +\@@_set_babel_language:nn { austrian } { german } +\@@_set_babel_language:nn { naustrian } { german } +\@@_set_babel_language:nn { swissgerman } { german } +\@@_set_babel_language:nn { nswissgerman } { german } +\@@_set_polyglossia_language:nn { german } { german } +% \end{macrocode} +% +% % \begin{macrocode} %</package> % \end{macrocode} diff --git a/macros/latex/contrib/postnotes/postnotes.pdf b/macros/latex/contrib/postnotes/postnotes.pdf Binary files differindex 758ad81528..e82c9195b4 100644 --- a/macros/latex/contrib/postnotes/postnotes.pdf +++ b/macros/latex/contrib/postnotes/postnotes.pdf diff --git a/macros/latex/contrib/postnotes/postnotes.tex b/macros/latex/contrib/postnotes/postnotes.tex index 1ab3172592..04ea7ccc27 100644 --- a/macros/latex/contrib/postnotes/postnotes.tex +++ b/macros/latex/contrib/postnotes/postnotes.tex @@ -831,9 +831,9 @@ don't have to worry about them. These strings will automatically adjust to the document language, set either by \pkg{babel} or by \pkg{polyglossia}, \emph{if} the language is supported by -\pkg{postnotes}. Currently supported are English, French, Portuguese, and -their variants. Either way, you can always change these variables to the -values of your preference. If you are not using either \pkg{babel} or +\pkg{postnotes}. Currently supported are English, German, French, and +Portuguese. Either way, you can always change these variables to the values +of your preference. If you are not using either \pkg{babel} or \pkg{polyglossia}, you can do so directly, for example, with: \begin{pnsnippet} \renewcommand*{\pntitle}{My title} @@ -965,8 +965,10 @@ provided by (in chronological order): % 2022-04-05: https://tex.stackexchange.com/q/597359#comment1594585_597389 The package's language support have been provided or improved thanks to: - `\texttt{Pika78}' (French). + `\texttt{Pika78}' (French) % 2022-04-25: https://github.com/gusbrs/postnotes/issues/1#issuecomment-1108634938 + and Herbert Voß (German). + % 2022-11-12: https://github.com/gusbrs/postnotes/issues/2 If I have inadvertently left anyone off the list I apologize, and please let me know, so that I can correct the oversight. diff --git a/macros/latex/contrib/ragged2e/LICENSE.md b/macros/latex/contrib/ragged2e/LICENSE.md new file mode 100644 index 0000000000..6d9b4ac41e --- /dev/null +++ b/macros/latex/contrib/ragged2e/LICENSE.md @@ -0,0 +1,409 @@ +# The LaTeX Project Public License + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +## PREAMBLE + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +## DEFINITIONS + + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +## CONDITIONS ON DISTRIBUTION AND MODIFICATION + + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +## NO WARRANTY + + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +## MAINTENANCE OF THE WORK + + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. + + +## WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE + + +This section contains important instructions, examples, and +recommendations for authors who are considering distributing their +works under this license. These authors are addressed as `you' in +this section. + +### Choosing This License or Another License + +If for any part of your work you want or need to use *distribution* +conditions that differ significantly from those in this license, then +do not refer to this license anywhere in your work but, instead, +distribute your work under a different license. You may use the text +of this license as a model for your own license, but your license +should not refer to the LPPL or otherwise give the impression that +your work is distributed under the LPPL. + +The document `modguide.tex' in the base LaTeX distribution explains +the motivation behind the conditions of this license. It explains, +for example, why distributing LaTeX under the GNU General Public +License (GPL) was considered inappropriate. Even if your work is +unrelated to LaTeX, the discussion in `modguide.tex' may still be +relevant, and authors intending to distribute their works under any +license are encouraged to read it. + +### A Recommendation on Modification Without Distribution + +It is wise never to modify a component of the Work, even for your own +personal use, without also meeting the above conditions for +distributing the modified component. While you might intend that such +modifications will never be distributed, often this will happen by +accident -- you may forget that you have modified that component; or +it may not occur to you when allowing others to access the modified +version that you are thus distributing it and violating the conditions +of this license in ways that could have legal implications and, worse, +cause problems for the community. It is therefore usually in your +best interest to keep your copy of the Work identical with the public +one. Many works provide ways to control the behavior of that work +without altering any of its licensed components. + +### How to Use This License + +To use this license, place in each of the components of your work both +an explicit copyright notice including your name and the year the work +was authored and/or last substantially modified. Include also a +statement that the distribution and/or modification of that +component is constrained by the conditions in this license. + +Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2005 M. Y. Name + % + % This work 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 2005/12/01 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + +Given such a notice and statement in a file, the conditions +given in this license document would apply, with the `Work' referring +to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being +generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' +referring to any `LaTeX-Format', and both `Copyright Holder' and +`Current Maintainer' referring to the person `M. Y. Name'. + +If you do not want the Maintenance section of LPPL to apply to your +Work, change `maintained' above into `author-maintained'. +However, we recommend that you use `maintained', as the Maintenance +section was added in order to ensure that your Work remains useful to +the community even when you can no longer maintain and support it +yourself. + +### Derived Works That Are Not Replacements + +Several clauses of the LPPL specify means to provide reliability and +stability for the user community. They therefore concern themselves +with the case that a Derived Work is intended to be used as a +(compatible or incompatible) replacement of the original Work. If +this is not the case (e.g., if a few lines of code are reused for a +completely different task), then clauses 6b and 6d shall not apply. + + +### Important Recommendations + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. + diff --git a/macros/latex/contrib/ragged2e/README.md b/macros/latex/contrib/ragged2e/README.md index 03999a85a4..cc7f6fa363 100644 --- a/macros/latex/contrib/ragged2e/README.md +++ b/macros/latex/contrib/ragged2e/README.md @@ -1,8 +1,8 @@ # The `ragged2e' package -Copyright (C) Martin Schröder, 1996–2019, Marei Peischl (peiTeX) <marei@peitex.de>, 2021 +Copyright (C) Martin Schröder, 1996–2019, Marei Peischl (peiTeX) <marei@peitex.de>, 2021–2022 - ragged2e 2021/12/15 v3.1 + ragged2e 2022/11/13 v3.2 *************************************************************************** @@ -39,5 +39,6 @@ or want to report a suggestion for improvement, please visit ## Version History * 3.0 Move from everysel package to lthooks * 3.1 Robustify the user macros (Thanks for Markus Kohm for the hint) + * 3.2 Fix bug adding a parskip when using `\newline` within the raggged2e alignments (Thanks to Maurice Hansen for reporting) diff --git a/macros/latex/contrib/ragged2e/ragged2e.dtx b/macros/latex/contrib/ragged2e/ragged2e.dtx index 397b810b40..ecc4ff40a3 100644 --- a/macros/latex/contrib/ragged2e/ragged2e.dtx +++ b/macros/latex/contrib/ragged2e/ragged2e.dtx @@ -2,7 +2,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Copyright (C) Martin Schröder, 1996–2019 -% Marei Peischl (peiTeX) <marei@peitex.de>, 2021 +% Marei Peischl (peiTeX) <marei@peitex.de>, 2021–2022 % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c @@ -29,9 +29,9 @@ % % \fi % \iffalse -\NeedsTeXFormat{LaTeX2e}[2017/03/29] +\NeedsTeXFormat{LaTeX2e}[2021/06/01] %<package>\ProvidesPackage{ragged2e} -%<package> [2021/12/15 v3.1 ragged2e Package] +%<package> [2022/11/13 v3.2 ragged2e Package] % %<*driver> \documentclass[a4paper]{ltxdoc} @@ -42,10 +42,10 @@ \usepackage{array} \usepackage{tabularx} \usepackage{gitinfo2} -\usepackage{hypdoc} \usepackage{geometry} \usepackage{booktabs} \usepackage[document]{ragged2e} +\usepackage{hyperref} \setlength{\RaggedRightRightskip}{0pt plus 4em}% \GetFileInfo{ragged2e.sty} \EnableCrossrefs @@ -76,7 +76,7 @@ \end{document} %</driver> % \fi -% \CheckSum{486} +% \CheckSum{490} % %% \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 @@ -591,6 +591,8 @@ % features.\newline % Jordan Firth (\url{jafirth@ncsu.edu}) provided the final push for % version~2.2. +% Maurice Hansen reported and helped testing the fix for the bug adding +% an additional parskip fixed in version 3.2. % % ^^A ----------------------------- % @@ -1141,7 +1143,21 @@ \let\@raggedtwoe@saved@gnewline\@gnewline % \end{macrocode} % \end{macro} -% +% \begin{macro}{\@raggedtwoe@centercrNoindent} +% \changes{v3.2}{2022/11/13}{New macro} +% With the bugfix in version 3.2 we also take care of the indent which +% might be set when ragged2e's newline definition or \cs{@centercr} are +% triggered. This can be easily archieved using the ltpara hooks. +% This is not a final solution for this because on the long run one +% has to replace the paragraph break within \cs{@centercr} to match +% the content structure for tagging. +% \begin{macrocode} +\def\@raggedtwoe@centercrNoindent{% + \AddToHookNext{para/begin}{\OmitIndent}% + \@centercr% +} +% \end{macrocode} +% \end{macro} % \begin{macro}{\@raggedtwoe@gnewline} % The following definition of a \cs{@gnewline} used by the ragged % commands was suggested by Markus Kohm: @@ -1157,11 +1173,14 @@ \unskip \ifmmode % \end{macrocode} -% In formulas we use the original code of \cs{@gnewline}. +% In formulas we adjusted the original code of \cs{g@newline} to a negative fill to match the alignment of text. +% Outside those we use \cs{@centercr} to remove the added parskip. +% \changes{v3.2}{2022/11/13}{Fix bug adding parskip with newline} % \begin{macrocode} - \reserved@e {\reserved@f #1}\nobreak \hfil \break + \reserved@e {\reserved@f #1}\nobreak \hskip\z@ \break \else - \reserved@e {\reserved@f #1}{\parskip\z@\par}% + \reserved@e {\reserved@f #1}% + \@raggedtwoe@centercrNoindent \fi \fi } @@ -1189,7 +1208,7 @@ % \begin{macrocode} \DeclareRobustCommand{\Centering}{% \ifx\\\@raggedtwoe@savedcr - \let\\\@centercr + \let\\\@raggedtwoe@centercrNoindent \fi \let\@gnewline\@raggedtwoe@gnewline \leftskip\CenteringLeftskip @@ -1212,7 +1231,7 @@ % \begin{macrocode} \DeclareRobustCommand{\RaggedLeft}{% \ifx\\\@raggedtwoe@savedcr - \let\\\@centercr + \let\\\@raggedtwoe@centercrNoindent \fi \let\@gnewline\@raggedtwoe@gnewline \leftskip\RaggedLeftLeftskip @@ -1235,7 +1254,7 @@ % \begin{macrocode} \DeclareRobustCommand{\RaggedRight}{% \ifx\\\@raggedtwoe@savedcr - \let\\\@centercr + \let\\\@raggedtwoe@centercrNoindent \fi \let\@gnewline\@raggedtwoe@gnewline \leftskip\RaggedRightLeftskip diff --git a/macros/latex/contrib/ragged2e/ragged2e.ins b/macros/latex/contrib/ragged2e/ragged2e.ins index e2134b7620..1b4945c821 100644 --- a/macros/latex/contrib/ragged2e/ragged2e.ins +++ b/macros/latex/contrib/ragged2e/ragged2e.ins @@ -1,11 +1,7 @@ \input docstrip.tex -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{ragged2e.ins} - [2020/02/05 v3.0 Installation script for Ragged2e Package] - \preamble -Copyright (C) 1996–2019 Martin Schröder, 2021 Marei Peischl (peiTeX) <marei@peitex.de> +Copyright (C) 1996–2019 Martin Schröder, 2021–2022 Marei Peischl (peiTeX) <marei@peitex.de> This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c diff --git a/macros/latex/contrib/ragged2e/ragged2e.pdf b/macros/latex/contrib/ragged2e/ragged2e.pdf Binary files differindex f9999f907d..6d462050b9 100644 --- a/macros/latex/contrib/ragged2e/ragged2e.pdf +++ b/macros/latex/contrib/ragged2e/ragged2e.pdf diff --git a/macros/latex/contrib/unicodefonttable/README.md b/macros/latex/contrib/unicodefonttable/README.md index b1f92c1fd0..98db6e28ee 100644 --- a/macros/latex/contrib/unicodefonttable/README.md +++ b/macros/latex/contrib/unicodefonttable/README.md @@ -16,7 +16,7 @@ The official package source can be found at: https://github.com/FrankMittelbach/fmitex-unicodefonttable/ -The license is LPPL. +The license is LPPL 1.3c. For version information see the .dtx file. diff --git a/macros/latex/contrib/unicodefonttable/changes.txt b/macros/latex/contrib/unicodefonttable/changes.txt index f263869602..7643d00353 100644 --- a/macros/latex/contrib/unicodefonttable/changes.txt +++ b/macros/latex/contrib/unicodefonttable/changes.txt @@ -1,3 +1,19 @@ +2022-11-12 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * unicodefonttable.dtx (subsection{The overall table layout}): + Change default statistics text so that it makes + more sense if only a portion of the font is displayed (gh/4) + + (subsection{User interface commands}): + Test for luatex without harfbuzz and display of private area-A + and warn that this gives strange results (gh/8) + + Support use in twocolumn mode if inside a table* float (gh/7) + + (subsection{Handling a single row}): + Add key hex-digits-row-format to allow customizing the row title + on the left (gh/3)} + 2021-10-29 Frank Mittelbach <Frank.Mittelbach@latex-project.org> * unicodefonttable.dtx (subsection{The overall table layout}): diff --git a/macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdf b/macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdf Binary files differindex e664caa49a..367638b1b5 100644 --- a/macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdf +++ b/macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdf diff --git a/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf b/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf Binary files differindex ac2835f67e..f810f5b2f6 100644 --- a/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf +++ b/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf diff --git a/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf b/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf Binary files differindex 735199f552..846fc12b68 100644 --- a/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf +++ b/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf diff --git a/macros/latex/contrib/unicodefonttable/unicodefonttable.dtx b/macros/latex/contrib/unicodefonttable/unicodefonttable.dtx index 8374b8d279..1604048c0f 100644 --- a/macros/latex/contrib/unicodefonttable/unicodefonttable.dtx +++ b/macros/latex/contrib/unicodefonttable/unicodefonttable.dtx @@ -17,8 +17,8 @@ % for those people who are interested or want to report an issue. % -\def\unicodefonttabledate {2021/10/29} -\def\unicodefonttableversion{v1.0f} +\def\unicodefonttabledate {2022/11/12} +\def\unicodefonttableversion{v1.0g} %<*driver> @@ -269,7 +269,8 @@ % % \begin{variable}{ % display-block, -% hex-digits, color, +% hex-digits, hex-digits-font,hex-digits-row-format, +% color, % } % These keys handle the inner parts of the table. % @@ -318,6 +319,18 @@ % The font to use for the hex digits, by default % \underline{\cs{ttfamily}\cs{scriptsize}}.{\hfuzz=2.7pt\par} % +% \item[\key{hex-digits-row-format}] +% This key defines the format for the hex digits shown on the left +% of each row. It accepts one argument hold the hex values for the +% row except for the last digit, e.g, \texttt{0A3} for the values +% from \texttt{0A30} to \texttt{0A3F}. The default formatting is +% \underline{\ttfamily U+\#10\cs{,}-\cs{,}\#1F} and without further +% adjustments it is automaticaly set +% in \cs{footnotesize} \cs{ttfamily} and in the color +% specified by the \key{color} key. +% +% +% % \item[\key{color}] % This key determines the color for parts of the table (hex digits % and Unicode ranges). It can be either \kval{none} or a color @@ -461,7 +474,14 @@ % higher planes. But if you want to see everything of the font (as % far as supported by this package) and are prepared to wait for % the higher -% planes to be scanned, you can go up to a value of \texttt{FFFFF}. +% planes to be scanned, you can go up to a value of \texttt{FFFFF}. +% +% However, please note that the \LuaTeX{} fontloader uses the +% \enquote{Supplementary Private Use Area-A}, which starts at +% \texttt{F0000}, as its own playground and places remapping into +% it, so by default you see random data instead of font data there. You +% either have to use the \XeTeX{} engine or load the font with +% \texttt{Renderer=HarfBuzz} in \LuaTeX{}. % % These keys are also quite useful in combination with the previous % \key{compare-with} key, to display only, for example, the Greek @@ -555,6 +575,13 @@ % places, but for \TUB{} this is not practical, so we % use black and gray. % +% Please note that this documentation was produced with +% \LuaTeX{}. If you reuse the examples with \XeTeX{}, you may have +% to specify the font names differently (i.e., following to the +% \pkg{fontspec} documentation for this engine). +% +% +% % \subsection{Computer Modern Sans --- 7-bit font} % % Our first example is the original Computer Modern Sans, with @@ -573,12 +600,13 @@ % % This example shows the \TeX\ Gyre Heros 8-bit font, % in the T1 encoding, with character codes $\le 255$. -% Command used: +% We used \key{hex-digits-row-format} to shorten the row titles on +% the left: %\begin{verbatim} -% \displayfonttable*[color=none]{ec-qhvr} +% \displayfonttable*[color=none,hex-digits-row-format=U+#1]{ec-qhvr} %\end{verbatim} % -%\displayfonttable*[color=none]{ec-qhvr} +%\displayfonttable*[color=none,hex-digits-row-format=U+#1]{ec-qhvr} % % \fi % @@ -619,7 +647,7 @@ % \fi % % -% \IfImplementationShownTF{}{\newpage} +% ^^A \IfImplementationShownTF{}{\newpage} % % \subsection{Latin Modern Math compared to New Computer Modern Math} % @@ -805,6 +833,21 @@ \fontspec{#2}[#3] \keys_set:nn{@@}{#1} % \end{macrocode} +% If the \LuaTeX{} engine is used without HarfBuzz and the display +% range includes code points above \texttt{U+EFFFF} the output shows +% remappings and not what is in the font, so we issue a warning. +% \changes{v1.0g}{2022/11/12}{Test for luatex without harfbuzz and +% private area A and warn (gh/8)} +% \begin{macrocode} + \bool_lazy_and:nnT + { \sys_if_engine_luatex_p: } + { \int_compare_p:nNn { "EFFFF } < { "\l_@@_range_end_tl } } + { + \directlua{token.put_next(token.create(font.getfont(font.current()).hb~ + and~ 'use_none:n'~ or~ 'use:n'))} + { \msg_warning:nn {unicodefonttable}{noharfbuzz} } + } +% \end{macrocode} % If the user has asked for a comparsion to some other font we need to set this up: % \begin{macrocode} \tl_if_empty:NTF \l_@@_compare_with_tl @@ -815,6 +858,16 @@ \@@_handle_missing_glyph_compare:n } % \end{macrocode} +% Typesetting the font tables in twocolumn mode makes little sense +% due to their width, and if \env{longtable} is used it will +% complain. However there is one case where it should work: in a +% page-wide float. To make this happen we claim that we are not in +% twocolumn mode if the display is inside a vertical box. +% \changes{v1.0g}{2022/11/12}{Support use in twocolumn mode if inside +% a table* float (gh/7)} +% \begin{macrocode} + \if_mode_vertical: \if_mode_inner: \@twocolumnfalse \fi: \fi: +% \end{macrocode} % Then we start the table with 17 columns. We use \texttt{longtable} % if we produce a caption and \texttt{longtable*} if not (so that % the table number is not increased, which would look odd if you @@ -842,8 +895,24 @@ } % \end{macrocode} % \end{macro} - - +% +% +% \begin{macrocode} +\msg_new:nnn {unicodefonttable}{noharfbuzz} + { You~ asked~ for~ displaying~ glyphs~ with~ code \iow_newline: + points~ above~ U+EFFFF~ \msg_line_context: ,~ i.e.,~ from~ the~ + 'Supplementary~ Private~ Use~ Area-A'\iow_newline: + without~ specifying~ '[Renderer=Harfbuzz]'~ when~ + loading~ the~ font. + \iow_newline:\iow_newline: + With~ LuaLaTeX,~ this~ Unicode~ region~ is~ used~ + for~ remappings~ (if~ the~ HarfBuzz~ engine~ is~ not~ used).~ + Thus,~ the~ results~ shown~ do~ not~ reflect~ what~ + is~ in~ the~ font! + } +% \end{macrocode} +% +% % % \begin{macro}{\fonttableglyphcount} % \begin{macro}{\g_@@_glyph_int,\g_@@_glyph_only_B_int,\g_@@_glyph_also_B_int} @@ -1044,6 +1113,15 @@ ,hex-digits-font .tl_set:N = \l_@@_hex_digits_font_tl ,hex-digits-font .initial:n = \ttfamily \scriptsize % \end{macrocode} +% Customizing the row header (on the left) can be done with this +% key. Defaults for font, fontsize, and color is set on the outside, but can, of +% course, be overwritten inside if that is desired. +% \changes{v1.0g}{2022/11/12}{Add key hex-digits-row-format to allow +% customizing the row title on the left (gh/3)} +% \begin{macrocode} + ,hex-digits-row-format .cs_set:Np = \@@_format_row_hex_digits:n #1 + ,hex-digits-row-format .initial:n = U+#1 0 \, - \, #1 F +% \end{macrocode} % The \key{color} key is used in most places that get colored; some % have their own key but default to the main color. % \begin{macrocode} @@ -1130,9 +1208,11 @@ % And here we have the default text. There is only space for a % single line. If more text is needed one needs to provide some % explicit \cs{parbox}. +% \changes{v1.0g}{2022/11/12}{Change default text so that it makes +% more sense if only a portion of the font is displayed (gh/4)} % \begin{macrocode} ,statistics-format .cs_set:Np = \@@_format_stats:nn #1#2 - ,statistics-format .initial:n = Total~ number~ of~ glyphs~ in~ #1:~#2 + ,statistics-format .initial:n = Total~ number~ of~ glyphs~ shown~ from~ #1:~#2 } % \end{macrocode} % \end{macro} @@ -1461,12 +1541,14 @@ % \end{macrocode} % If we run a comparison we show different statistics that have % their own key. +% \changes{v1.0g}{2022/11/12}{Change default text so that it makes +% more sense if only a portion of the font is displayed (gh/4)} % \begin{macrocode} ,statistics-compare-format .cs_set:Np = \@@_format_compare_stats:nnnnnn #1#2#3#4#5#6 ,statistics-compare-format .initial:n = \parbox{\linewidth}{ - Total~ number~ of~ glyphs~ in~ \texttt{#1}:~#2\\ + Total~ number~ of~ glyphs~ shown~ from~ \texttt{#1}:~#2\\ Comparison~ font~ \texttt{#3}~ has~ #5~ missing~ and~ #6~ extra~ glyphs} } @@ -1602,9 +1684,11 @@ % % \begin{macro}{\@@_format_row_title:n} % The function to format the row title on the left, as used above. +% \changes{v1.0g}{2022/11/12}{Add key hex-digits-row-format to allow +% customizing the row title on the left (gh/3)} % \begin{macrocode} \cs_new:Npn \@@_format_row_title:n #1 { - \texttt { \footnotesize \l_@@_color_tl U+#1 0 \, - \, #1 F } + \texttt { \footnotesize \l_@@_color_tl \@@_format_row_hex_digits:n {#1} } } % \end{macrocode} % \end{macro} @@ -1782,8 +1866,8 @@ } % \end{macrocode} % \end{macro} - - +% +% % % % \subsection{Handling block titles} @@ -2103,7 +2187,6 @@ } % \end{macrocode} % -% % That's all of the programming using the L3 layer. % \begin{macrocode} \ExplSyntaxOff |