summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-11-14 03:04:08 +0000
committerNorbert Preining <norbert@preining.info>2022-11-14 03:04:08 +0000
commit1638c7bf59f91caa61849a5c5d73be504d07a49a (patch)
tree1000754f2cc885bb216b9b4173cb101c13159785 /macros/latex/contrib
parent1b59c3c45170420996d629b296e2214933ee1add (diff)
CTAN sync 202211140304
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/eolang/eolang.dtx492
-rw-r--r--macros/latex/contrib/eolang/eolang.pdfbin1106103 -> 1415294 bytes
-rw-r--r--macros/latex/contrib/hyperref/ChangeLog.txt11
-rw-r--r--macros/latex/contrib/hyperref/README.md2
-rw-r--r--macros/latex/contrib/hyperref/doc/backref.pdfbin205447 -> 205447 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.css4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.html2
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.pdfbin318245 -> 318263 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.tex2
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdfbin443137 -> 430121 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref.pdfbin2367878 -> 2370057 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/nameref.pdfbin180076 -> 180085 bytes
-rw-r--r--macros/latex/contrib/hyperref/hluatex.dtx4
-rw-r--r--macros/latex/contrib/hyperref/hyperref-linktarget.dtx2
-rw-r--r--macros/latex/contrib/hyperref/hyperref-patches.dtx2
-rw-r--r--macros/latex/contrib/hyperref/hyperref.dtx65
-rw-r--r--macros/latex/contrib/hyperref/nameref.dtx2
-rw-r--r--macros/latex/contrib/hyperref/xr-hyper.sty2
-rw-r--r--macros/latex/contrib/libgreek/README83
-rw-r--r--macros/latex/contrib/libgreek/libgreek.dtx1810
-rw-r--r--macros/latex/contrib/libgreek/libgreek.ins80
-rw-r--r--macros/latex/contrib/libgreek/libgreek.pdfbin56899 -> 159869 bytes
-rw-r--r--macros/latex/contrib/libgreek/libgreekcheck.tex120
-rw-r--r--macros/latex/contrib/photobook/Makefile34
-rw-r--r--macros/latex/contrib/photobook/README.md7
-rw-r--r--macros/latex/contrib/photobook/photobook.cls29
-rw-r--r--macros/latex/contrib/photobook/photobook.pdfbin134431 -> 135441 bytes
-rwxr-xr-x[-rw-r--r--]macros/latex/contrib/photobook/scripts/make-images.sh0
-rw-r--r--macros/latex/contrib/postnotes/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/postnotes/postnotes-code.pdfbin814509 -> 815249 bytes
-rw-r--r--macros/latex/contrib/postnotes/postnotes.dtx28
-rw-r--r--macros/latex/contrib/postnotes/postnotes.pdfbin176261 -> 176944 bytes
-rw-r--r--macros/latex/contrib/postnotes/postnotes.tex10
-rw-r--r--macros/latex/contrib/ragged2e/LICENSE.md409
-rw-r--r--macros/latex/contrib/ragged2e/README.md5
-rw-r--r--macros/latex/contrib/ragged2e/ragged2e.dtx43
-rw-r--r--macros/latex/contrib/ragged2e/ragged2e.ins6
-rw-r--r--macros/latex/contrib/ragged2e/ragged2e.pdfbin695933 -> 696260 bytes
-rw-r--r--macros/latex/contrib/unicodefonttable/README.md2
-rw-r--r--macros/latex/contrib/unicodefonttable/changes.txt16
-rw-r--r--macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdfbin1032003 -> 989747 bytes
-rw-r--r--macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdfbin851938 -> 822431 bytes
-rw-r--r--macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdfbin742583 -> 733738 bytes
-rw-r--r--macros/latex/contrib/unicodefonttable/unicodefonttable.dtx115
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
index 73fcd9885e..763d5bf07b 100644
--- a/macros/latex/contrib/eolang/eolang.pdf
+++ b/macros/latex/contrib/eolang/eolang.pdf
Binary files differ
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
index 0f2ad5cc10..1b7f41e6fb 100644
--- a/macros/latex/contrib/hyperref/doc/backref.pdf
+++ b/macros/latex/contrib/hyperref/doc/backref.pdf
Binary files differ
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
index b9244c8f3f..3ffbe3e714 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
Binary files differ
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
index 44cc9b0b06..e9de52c516 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref.pdf b/macros/latex/contrib/hyperref/doc/hyperref.pdf
index b52703cc40..7eca5a7272 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/nameref.pdf b/macros/latex/contrib/hyperref/doc/nameref.pdf
index 420f41424e..591097484e 100644
--- a/macros/latex/contrib/hyperref/doc/nameref.pdf
+++ b/macros/latex/contrib/hyperref/doc/nameref.pdf
Binary files differ
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
index 8e1c8c4c89..7bf88d48eb 100644
--- a/macros/latex/contrib/libgreek/libgreek.pdf
+++ b/macros/latex/contrib/libgreek/libgreek.pdf
Binary files differ
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
index 42b6a53eb4..505e80f057 100644
--- a/macros/latex/contrib/photobook/photobook.pdf
+++ b/macros/latex/contrib/photobook/photobook.pdf
Binary files differ
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
index a47aefa002..ac52fa60c3 100644
--- a/macros/latex/contrib/postnotes/postnotes-code.pdf
+++ b/macros/latex/contrib/postnotes/postnotes-code.pdf
Binary files differ
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
index 758ad81528..e82c9195b4 100644
--- a/macros/latex/contrib/postnotes/postnotes.pdf
+++ b/macros/latex/contrib/postnotes/postnotes.pdf
Binary files differ
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
index f9999f907d..6d462050b9 100644
--- a/macros/latex/contrib/ragged2e/ragged2e.pdf
+++ b/macros/latex/contrib/ragged2e/ragged2e.pdf
Binary files differ
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
index e664caa49a..367638b1b5 100644
--- a/macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdf
+++ b/macros/latex/contrib/unicodefonttable/unicodefonttable-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf b/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf
index ac2835f67e..f810f5b2f6 100644
--- a/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf
+++ b/macros/latex/contrib/unicodefonttable/unicodefonttable-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf b/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf
index 735199f552..846fc12b68 100644
--- a/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf
+++ b/macros/latex/contrib/unicodefonttable/unicodefonttable-samples.pdf
Binary files differ
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