summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-04-19 03:03:47 +0000
committerNorbert Preining <norbert@preining.info>2023-04-19 03:03:47 +0000
commit10bb4d468226c290e5e87e3fa367dc6fd2dcb84b (patch)
tree0e3fae0643d2bed385e6b758a246aaa2edf61133 /macros/latex
parent80e82c6cd5fb165fa720a1ce3a25f357ea11b9fc (diff)
CTAN sync 202304190303
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/lettrine/README.md26
-rw-r--r--macros/latex/contrib/lettrine/contrib.dtx376
-rw-r--r--macros/latex/contrib/lettrine/contrib.ins59
-rw-r--r--macros/latex/contrib/lettrine/contrib/optfile.cfl28
-rw-r--r--macros/latex/contrib/lettrine/contrib/pacl.cfl84
-rw-r--r--macros/latex/contrib/lettrine/contrib/padl.cfl85
-rw-r--r--macros/latex/contrib/lettrine/contrib/pzc2.cfl45
-rw-r--r--macros/latex/contrib/lettrine/contrib/pzc3.cfl45
-rw-r--r--macros/latex/contrib/lettrine/doc/lettrine-demo-de.pdfbin57736 -> 128266 bytes
-rw-r--r--macros/latex/contrib/lettrine/doc/lettrine-demo-fr.pdfbin62638 -> 139142 bytes
-rw-r--r--macros/latex/contrib/lettrine/doc/lettrine-demo-lua.pdfbin73141 -> 74184 bytes
-rw-r--r--macros/latex/contrib/lettrine/doc/lettrine.pdfbin97444 -> 122711 bytes
-rw-r--r--macros/latex/contrib/lettrine/lettrine-2022-09-25.sty302
-rw-r--r--macros/latex/contrib/lettrine/lettrine.dtx494
-rw-r--r--macros/latex/contrib/lettrine/lettrine.ins84
-rw-r--r--macros/latex/contrib/pagecolor/README13
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor-crop-example.pdfbin101140 -> 101137 bytes
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor-example.pdfbin93660 -> 93660 bytes
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor.dtx247
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor.pdfbin341917 -> 342199 bytes
-rw-r--r--macros/latex/contrib/prettytok/DEPENDS.txt1
-rw-r--r--macros/latex/contrib/prettytok/README7
-rwxr-xr-xmacros/latex/contrib/prettytok/prettytok-decode-8bit.py12
-rw-r--r--macros/latex/contrib/prettytok/prettytok-test.tex17
-rw-r--r--macros/latex/contrib/prettytok/prettytok.lua198
-rw-r--r--macros/latex/contrib/prettytok/prettytok.pdfbin369580 -> 485548 bytes
-rw-r--r--macros/latex/contrib/prettytok/prettytok.sty378
-rw-r--r--macros/latex/contrib/prettytok/prettytok.tex409
-rw-r--r--macros/latex/contrib/prettytok/prettytok_template.html76
-rw-r--r--macros/latex/contrib/se2thesis/CHANGELOG.md25
-rw-r--r--macros/latex/contrib/se2thesis/se2colors.dtx2
-rw-r--r--macros/latex/contrib/se2thesis/se2fonts.dtx2
-rw-r--r--macros/latex/contrib/se2thesis/se2packages.dtx788
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdfbin1101240 -> 1101208 bytes
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex40
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.dtx339
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.ins10
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.pdfbin345472 -> 382546 bytes
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.tex1
-rw-r--r--macros/latex/contrib/se2thesis/test.pdfbin23939 -> 1102663 bytes
-rw-r--r--macros/latex/contrib/se2thesis/test.tex167
-rw-r--r--macros/latex/required/babel/base/README.md32
-rw-r--r--macros/latex/required/babel/base/babel.dtx129
-rw-r--r--macros/latex/required/babel/base/babel.ins2
-rw-r--r--macros/latex/required/babel/base/babel.pdfbin911845 -> 912577 bytes
-rw-r--r--macros/latex/required/babel/base/bbcompat.dtx2
46 files changed, 2919 insertions, 1606 deletions
diff --git a/macros/latex/contrib/lettrine/README.md b/macros/latex/contrib/lettrine/README.md
index f62a7c20c6..57f41e59ff 100644
--- a/macros/latex/contrib/lettrine/README.md
+++ b/macros/latex/contrib/lettrine/README.md
@@ -9,10 +9,10 @@ This package is meant for typesetting dropped capitals in LaTeX documents.
Documentation
-------------
-Have a look at one of the PDF files, demo-fr.pdf (in French),
-demo-de.pdf (in German) or demo-lua.pdf in the doc directory,
-to see how different layouts for dropped capitals can be achieved.
-You can also play with the source files demo-*.tex.
+Have a look at one of the PDF files, lettrine-demo-fr.pdf (in French),
+lettrine-demo-de.pdf (in German) or lettrine-demo-lua.pdf in the doc
+directory, to see different layouts for dropped capitals.
+You can also play with the source files lettrine-demo-*.tex.
Have a look at lettrine.pdf in the doc directory, if you are interested
in the complete documentation and code.
@@ -31,20 +31,24 @@ Installation
This bundle is included in most TeX distributions, but if you need
to install it by yourself
-1. run lualatex on lettrine.dtx to get the documentation (lettrine.pdf);
-2. run luatex on lettrine.ins to strip the comments and create
+1. run luatex on lettrine.dtx to strip the comments and create
lettrine.sty and lettrine.cfg;
-3. run luatex on contrib.dtx to produce the *.cfl files.
+2. run lualatex on lettrine.dtx to get the documentation (lettrine.pdf).
Files lettrine.sty, lettrine.cfg, lettrine-*.sty and *.cfl go to to
a directory searched by TeX, typically $TEXMF/tex/latex/lettrine.
-Files README, demo*, *.pdf go to a doc directory, typically
-$TEXMF/doc/latex/lettrine.
+Files README, lettrine-demo*, lettrine.pdf go to a doc directory,
+typically $TEXMF/doc/latex/lettrine.
-Files *.dtx, *.ins go to a source directory, typically
+Files lettrine.dtx goes to a source directory, typically
$TEXMF/source/latex/lettrine
+Changes
+-------
+
+See the included manual lettrine.pdf, section "Change History".
+
--
-Copyright 1999--2022 Daniel Flipo
+Copyright 1999--2023 Daniel Flipo
E-mail: daniel (dot) flipo (at) free (dot) fr
diff --git a/macros/latex/contrib/lettrine/contrib.dtx b/macros/latex/contrib/lettrine/contrib.dtx
deleted file mode 100644
index 63d23d094b..0000000000
--- a/macros/latex/contrib/lettrine/contrib.dtx
+++ /dev/null
@@ -1,376 +0,0 @@
-% \iffalse meta-comment
-%
-% This program can be distributed and/or modified under the terms
-% of the LaTeX Project Public License either version 1.3c 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.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This file has the LPPL maintenance status "maintained".
-%
-% \fi
-%
-% \iffalse
-%<*opt>
-% \fi
-% \begin{macrocode}
-%% This is an example of config file *for syntax only*.
-%%
-%% Copy it to your document's directory and add
-%% \renewcommand{\DefaultOptionsFile}{optfile.cfl}
-%% to your document's preamble to use it.
-%%
-%% The settings below are just *examples*, they are not meant to be good!
-%% Proper values heavily depend on the font used!
-%%
-%% Letters not listed below, will get either the default parameters,
-%% or those given as optional argument of \lettrine, if any.
-%%
-%% The values of the parameters set in this file can be overridden locally
-%% using the optional argument of \lettrine.
-%%
-%% A
-\LettrineOptionsFor{A}{slope=0.1\LettrineWidth, findent=-.5em, nindent=.7em}
-%% Same parameters for À (utf-8)
-\LettrineOptionsFor{À}{slope=0.1\LettrineWidth, findent=-.5em, nindent=0.7em}
-%% C'
-\LettrineOptionsFor{C'}{nindent=-0.5em}
-%% I and J hang into the margin
-\LettrineOptionsFor{I}{lhang=1, nindent=0pt}
-\LettrineOptionsFor{J}{lhang=1, nindent=0pt}
-%% Q
-\LettrineOptionsFor{Q}{loversize=-0.1, lraise=0.1}
-%% V
-\LettrineOptionsFor{V}{slope=-0.1\LettrineWidth, lhang=0.5, nindent=0pt}
-% \end{macrocode}
-% \iffalse
-%</opt>
-% \fi
-%
-% \iffalse
-%<*pzc2>
-% \fi
-% \begin{macrocode}
-%%% This is file `pzc2.cfl'.
-%%% It is provided under the LPPL. Copyright is held by Kevin M. Dunn.
-%%% If you modify this file you *MUST* change its name.
-
-%%% This file contains config values to simplify the use of the
-%%% Zapf-Chancery (aka pzc) font with the lettrine package by Daniel Flipo.
-%%% This file provides the parameters for 2 DefaultLines.
-
-%%% If you want to use this file, your document should contain
-%%% the next three lines, without the leading percent signs.
-%%% \setcounter{DefaultLines}{2}
-%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{pzc}\selectfont}
-%%% \renewcommand{\DefaultOptionsFile}{pzc2.cfl}
-
-%%% Comments about this file can be sent to Kevin Dunn
-%%% (cavema2 at cavemanchemistry.com)
-
-\ProvidesFile{pzc2.cfl}[2006/03/19 v0.1 Kevin M. Dunn]
-
-\LettrineOptionsFor{A}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
-\LettrineOptionsFor{B}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.08\LettrineWidth}
-\LettrineOptionsFor{C}{loversize= 0.35,lraise= 0.10,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
-\LettrineOptionsFor{D}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.05\LettrineWidth}
-\LettrineOptionsFor{E}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
-\LettrineOptionsFor{F}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.00\LettrineWidth}
-\LettrineOptionsFor{G}{loversize= 0.35,lraise= 0.10,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.17\LettrineWidth}
-\LettrineOptionsFor{H}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.20\LettrineWidth}
-\LettrineOptionsFor{I}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
-\LettrineOptionsFor{J}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.00\LettrineWidth}
-\LettrineOptionsFor{K}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.13\LettrineWidth}
-\LettrineOptionsFor{L}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=-0.02\LettrineWidth,nindent= 0.30\LettrineWidth}
-\LettrineOptionsFor{M}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{N}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.10\LettrineWidth}
-\LettrineOptionsFor{O}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.08\LettrineWidth}
-\LettrineOptionsFor{P}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.25\LettrineWidth,nindent= 0.05\LettrineWidth}
-\LettrineOptionsFor{Q}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.10\LettrineWidth}
-\LettrineOptionsFor{R}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.08\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{S}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.13\LettrineWidth}
-\LettrineOptionsFor{T}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.20\LettrineWidth}
-\LettrineOptionsFor{U}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{V}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.18\LettrineWidth,nindent=-0.15\LettrineWidth}
-\LettrineOptionsFor{W}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent=-0.05\LettrineWidth}
-\LettrineOptionsFor{X}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.35\LettrineWidth}
-\LettrineOptionsFor{Y}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.05\LettrineWidth}
-\LettrineOptionsFor{Z}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.30\LettrineWidth}
-% \end{macrocode}
-% \iffalse
-%</pzc2>
-% \fi
-%
-% \iffalse
-%<*pzc3>
-% \fi
-% \begin{macrocode}
-%%% This is file `pzc3.cfl'.
-%%% It is provided under the LPPL. Copyright is held by Kevin M. Dunn.
-%%% If you modify this file you *MUST* change its name.
-
-%%% This file contains config values to simplify the use of the
-%%% Zapf-Chancery (aka pzc) font with the lettrine package by Daniel Flipo.
-%%% This file provides the parameters for 3 DefaultLines.
-
-%%% If you want to use this file, your document should contain
-%%% the next three lines, without the leading percent signs.
-%%% \setcounter{DefaultLines}{3}
-%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{pzc}\selectfont}
-%%% \renewcommand{\DefaultOptionsFile}{pzc3.cfl}
-
-%%% Comments about this file can be sent to Kevin Dunn
-%%% (cavema2 at cavemanchemistry.com)
-
-\ProvidesFile{pzc3.cfl}[2006/03/19 v0.1 Kevin M. Dunn]
-
-\LettrineOptionsFor{A}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
-\LettrineOptionsFor{B}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.08\LettrineWidth,slope=-0.08\LettrineWidth}
-\LettrineOptionsFor{C}{loversize= 0.35,lraise= 0.10,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
-\LettrineOptionsFor{D}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.05\LettrineWidth,slope=-0.05\LettrineWidth}
-\LettrineOptionsFor{E}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
-\LettrineOptionsFor{F}{loversize= 0.35,lraise= 0.05,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.00\LettrineWidth}
-\LettrineOptionsFor{G}{loversize= 0.30,lraise= 0.30,lhang= 0.5,findent=0.10\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{H}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.20\LettrineWidth}
-\LettrineOptionsFor{I}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
-\LettrineOptionsFor{J}{loversize= 0.35,lraise= 0.05,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.00\LettrineWidth}
-\LettrineOptionsFor{K}{loversize= 0.30,lraise= 0.20,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.13\LettrineWidth,slope= 0.20\LettrineWidth}
-\LettrineOptionsFor{L}{loversize= 0.35,lraise= 0.00,lhang=0.35,findent=-0.02\LettrineWidth,nindent= 0.30\LettrineWidth}
-\LettrineOptionsFor{M}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{N}{loversize= 0.30,lraise= 0.20,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.10\LettrineWidth,slope= 0.20\LettrineWidth}
-\LettrineOptionsFor{O}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.08\LettrineWidth}
-\LettrineOptionsFor{P}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.25\LettrineWidth,nindent= 0.05\LettrineWidth}
-\LettrineOptionsFor{Q}{loversize= 0.30,lraise= 0.25,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.10\LettrineWidth,slope= 0.20\LettrineWidth}
-\LettrineOptionsFor{R}{loversize= 0.30,lraise= 0.20,lhang= 0.35,findent=0.08\LettrineWidth,nindent= 0.15\LettrineWidth,slope= 0.20\LettrineWidth}
-\LettrineOptionsFor{S}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.13\LettrineWidth}
-\LettrineOptionsFor{T}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.20\LettrineWidth}
-\LettrineOptionsFor{U}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{V}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.18\LettrineWidth,nindent=-0.05\LettrineWidth,slope=-0.15\LettrineWidth}
-\LettrineOptionsFor{W}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.18\LettrineWidth,nindent=-0.05\LettrineWidth,slope=-0.10\LettrineWidth}
-\LettrineOptionsFor{X}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.35\LettrineWidth}
-\LettrineOptionsFor{Y}{loversize= 0.30,lraise= 0.10,lhang= 0.40,findent=0.10\LettrineWidth,nindent= 0.00\LettrineWidth,slope=-0.10\LettrineWidth}
-\LettrineOptionsFor{Z}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.30\LettrineWidth}
-% \end{macrocode}
-% \iffalse
-%</pzc3>
-% \fi
-%
-% \iffalse
-%<*pacl>
-% \fi
-% \begin{macrocode}
-%%% This is file `pacl.cfl'.
-%%% It is provided under the LPPL. Copyright is hold by Pascal Kockaert.
-%%% If you modify this file you *MUST* change its name.
-
-%%% This file contains config values to simplify the use of the
-%%% ACaslon-SwashItalic (aka pacri8s) font from Adobe
-%%% with the lettrine package by Daniel Flipo.
-
-%%% If you want to use this file, your document should contain
-%%% the two next lines, without the leading percent signs.
-%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{pacl}\selectfont}
-%%% \renewcommand{\DefaultOptionsFile}{pacl.cfl}
-
-%%% The fontfamily pacl is defined through the file T1pacl.fd.
-%%% The contents of T1pacl.fd is listed at the end of this file.
-
-%%% The settings below were defined according to my visual tastes.
-%%% No mathematical rule based on the metrices was applied.
-%%% Though the result may not please you, it should be better
-%%% than the default placement. This said, comments are welcome.
-
-%%% Comments about this file can be sent to Pascal.Kockaert
-%%% at the mail server ulb.ac.be.
-
-\ProvidesFile{pacl.cfl}[2003/08/24 v0.1 Pascal Kockaert]
-
-\LettrineOptionsFor{A}{loversize= 0.15,lraise= 0.02,lhang= 0.30,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{B}{loversize= 0.15,lraise= 0.00,lhang= 0.25,findent=-0.05\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{C}{loversize=-0.10,lraise= 0.25,lhang= 0.05,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{D}{loversize= 0.15,lraise= 0.00,lhang= 0.20,findent=-0.07\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{E}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent=-0.10\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{F}{loversize=-0.10,lraise= 0.20,lhang= 0.00,findent= 0.05\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{G}{loversize=-0.10,lraise= 0.20,lhang= 0.05,findent=-0.05\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{H}{loversize= 0.05,lraise= 0.00,lhang= 0.25,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{I}{loversize= 0.15,lraise= 0.00,lhang= 0.00,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{J}{loversize=-0.10,lraise= 0.20,lhang= 0.00,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{K}{loversize=-0.10,lraise= 0.25,lhang= 0.00,findent= 0.00\LettrineWidth,nindent= 0.45\LettrineWidth}
-\LettrineOptionsFor{L}{loversize= 0.00,lraise= 0.20,lhang= 0.00,findent=-0.10\LettrineWidth,nindent= 0.40\LettrineWidth}
-\LettrineOptionsFor{M}{loversize= 0.15,lraise= 0.00,lhang= 0.24,findent=-0.05\LettrineWidth,nindent= 0.10\LettrineWidth}
-\LettrineOptionsFor{N}{loversize=-0.05,lraise= 0.25,lhang= 0.13,findent= 0.05\LettrineWidth,nindent= 0.35\LettrineWidth}
-\LettrineOptionsFor{O}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent=-0.12\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{P}{loversize= 0.15,lraise= 0.00,lhang= 0.25,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{Q}{loversize=-0.15,lraise= 0.25,lhang= 0.10,findent=-0.05\LettrineWidth,nindent= 0.55\LettrineWidth}
-\LettrineOptionsFor{R}{loversize=-0.15,lraise= 0.25,lhang= 0.20,findent=-0.05\LettrineWidth,nindent= 0.45\LettrineWidth}
-\LettrineOptionsFor{S}{loversize=-0.10,lraise= 0.25,lhang=-0.05,findent=-0.05\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{T}{loversize= 0.15,lraise= 0.00,lhang= 0.15,findent= 0.00\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{U}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent= 0.00\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{V}{loversize= 0.15,lraise= 0.00,lhang= 0.20,findent=-0.05\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{W}{loversize= 0.15,lraise= 0.00,lhang= 0.15,findent=-0.05\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{X}{loversize= 0.15,lraise= 0.00,lhang= 0.45,findent= 0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
-\LettrineOptionsFor{Y}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent= 0.20\LettrineWidth,nindent= 0.25\LettrineWidth}
-\LettrineOptionsFor{Z}{loversize= 0.05,lraise= 0.15,lhang= 0.15,findent= 0.00\LettrineWidth,nindent= 0.30\LettrineWidth}
-\let\EOF\endinput
-\EOF
-
-%% The installation of the pacl family can be performed using the
-%% fontinst package.
-%% You must own the font ACaslon-SwashItalic, that is an AFM and a PFB file
-%% which should be renamed as padri8w.afm and padri8w.pfb.
-
-%% You should process the file Makepacl.tex (see below) through TeX,
-%% and follow the instructions of the fontinst manual to finish the install.
-%% The file T1pacl.fd should be defined as below and put with other local
-%% FD files.
-
-%%% File Makepacl.tex
-\input fontinst.sty
-\installfonts
- \declareencoding{T1-SWASH}{T1}
- \fromafm{pacri8s} %%% File containing metrics of ACaslon-SwashItalic
- \installfont{pacri9s}{pacri8s}{T1}{T1}{pacl}{m}{n}{}
-\endinstallfonts
-\bye
-%%% End of file Makepacl.tex
-
-%%% The pacl family is defined by the file T1pacl.fd, as follows
-
-%%% File T1pacl.fd
-%%% THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
-\ProvidesFile{t1pacl.fd}[2003/08/24 v1.0 Pascal Kockaert]
-\DeclareFontFamily{T1}{pacl}{}
-\DeclareFontShape{T1}{pacl}{m}{n}{<->pacri9s}{}
-%%% End of file T1pacl.fd
-% \end{macrocode}
-% \iffalse
-%</pacl>
-% \fi
-%
-% \iffalse
-%<*padl>
-% \fi
-% \begin{macrocode}
-%%% This is file `padl.cfl'.
-%%% It is provided under the LPPL. Copyright is hold by Pascal Kockaert.
-%%% If you modify this file you *MUST* change its name.
-
-%%% This file contains config values to simplify the use of the
-%%% AGaramondAlt-Italic (aka padri8w) font from Adobe
-%%% with the lettrine package by Daniel Flipo.
-
-%%% If you want to use this file, your document should contain
-%%% the two next lines, without the leading percent signs.
-%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{padl}\selectfont}
-%%% \renewcommand{\DefaultOptionsFile}{padl.cfl}
-
-%%% The fontfamily padl is defined through the file T1padl.fd.
-%%% The contents of T1padl.fd is listed at the end of this file.
-
-%%% The settings below were defined according to my visual tastes.
-%%% No mathematical rule based on the metrices was applied.
-%%% Though the result may not please you, it should be better
-%%% than the default placement. This said, comments are welcome.
-
-%%% Comments about this file can be sent to Pascal.Kockaert
-%%% at the mail server ulb.ac.be.
-
-\ProvidesFile{padl.cfl}[2003/08/24 v1.0 Pascal Kockaert]
-
-\LettrineOptionsFor{A}{loversize= 0.05,lraise= 0.10,lhang= 0.40,findent= 0.000\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{B}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.025\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{C}{loversize= 0.00,lraise= 0.10,lhang= 0.15,findent= 0.175\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{D}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent=-0.025\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{E}{loversize= 0.10,lraise= 0.00,lhang= 0.10,findent= 0.100\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{F}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.100\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{G}{loversize=-0.08,lraise= 0.20,lhang= 0.10,findent= 0.000\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{H}{loversize=-0.01,lraise= 0.00,lhang= 0.00,findent= 0.040\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{I}{loversize= 0.10,lraise= 0.00,lhang= 0.00,findent= 0.050\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{J}{loversize=-0.08,lraise= 0.20,lhang= 0.00,findent=-0.025\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{K}{loversize=-0.05,lraise= 0.25,lhang= 0.00,findent=-0.050\LettrineWidth,nindent= 0.60\LettrineWidth}
-\LettrineOptionsFor{L}{loversize= 0.00,lraise= 0.20,lhang= 0.00,findent= 0.100\LettrineWidth,nindent= 0.40\LettrineWidth}
-\LettrineOptionsFor{M}{loversize= 0.10,lraise= 0.00,lhang= 0.40,findent= 0.040\LettrineWidth,nindent= 0.10\LettrineWidth}
-\LettrineOptionsFor{N}{loversize= 0.00,lraise= 0.20,lhang= 0.20,findent=-0.010\LettrineWidth,nindent= 0.40\LettrineWidth}
-\LettrineOptionsFor{O}{loversize= 0.10,lraise= 0.00,lhang= 0.20,findent=-0.010\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{P}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.050\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{Q}{loversize= 0.00,lraise= 0.20,lhang= 0.20,findent= 0.050\LettrineWidth,nindent= 0.70\LettrineWidth}
-\LettrineOptionsFor{R}{loversize=-0.05,lraise= 0.25,lhang= 0.25,nindent= 0.500\LettrineWidth,nindent= 0.50\LettrineWidth}
-\LettrineOptionsFor{S}{loversize= 0.10,lraise= 0.05,lhang= 0.00,findent= 0.000\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{T}{loversize= 0.10,lraise= 0.00,lhang= 0.35,findent= 0.100\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{U}{loversize= 0.10,lraise= 0.00,lhang= 0.20,findent= 0.050\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{V}{loversize= 0.10,lraise= 0.00,lhang= 0.40,findent= 0.050\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{W}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.040\LettrineWidth,nindent= 0.50em}
-\LettrineOptionsFor{X}{loversize= 0.10,lraise= 0.00,lhang= 0.40,findent= 0.040\LettrineWidth,nindent= 0.20\LettrineWidth}
-\LettrineOptionsFor{Y}{loversize= 0.10,lraise= 0.00,lhang= 0.20,findent= 0.100\LettrineWidth,nindent= 0.20\LettrineWidth}
-\LettrineOptionsFor{Z}{loversize=-0.05,lraise= 0.25,lhang= 0.00,findent= 0.050\LettrineWidth,nindent= 0.55\LettrineWidth}
-\let\EOF\endinput
-\EOF
-
-%% The installation of the padl family can be performed using the
-%% fontinst package.
-%% You must own the font AGaramondAlt-Italic, that is an AFM and a PFB
-%% file which should be renamed as padri8w.afm and padri8w.pfb.
-
-%% You should process the file Makepadl.tex (see below) through TeX,
-%% and follow the instructions of the fontinst manual to finish the
-%% install.
-%% The file T1padl.fd should be defined as below and put with other
-%% local FD files.
-
-%%% File Makepadl.tex
-\input fontinst.sty
-\installfonts
- \declareencoding{T1-SWASH}{T1}
- \fromafm{padri8w} %%% File containing metrics of AGaramondAlt-Italic
- \gdef\uc#1#2{#1swash}
- \installfont{padw9w}{padri8w}{T1}{T1}{padl}{m}{n}{}
-\endinstallfonts
-\bye
-%%% End of file Makepadl.tex
-
-%% The padl family is defined by the file T1padl.fd, as follows
-
-%%% File T1padl.fd
-%%% THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
-\ProvidesFile{t1padl.fd}[2003/08/24 v0.1 Pascal Kockaert]
-\DeclareFontFamily{T1}{padl}{}
-\DeclareFontShape{T1}{padl}{m}{n}{<->padw9w}{}
-%%% End of file T1padl.fd
-% \end{macrocode}
-% \iffalse
-%</padl>
-% \fi
-%
-% \iffalse
-%<*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
-%
-% \Finale
-\endinput
-
-%%% Local Variables:
-%%% fill-column: 70
-%%% coding: utf-8
-%%% End:
diff --git a/macros/latex/contrib/lettrine/contrib.ins b/macros/latex/contrib/lettrine/contrib.ins
deleted file mode 100644
index 3762e5aef2..0000000000
--- a/macros/latex/contrib/lettrine/contrib.ins
+++ /dev/null
@@ -1,59 +0,0 @@
-%%
-%% Copyright (C) 1999-2020 Daniel Flipo.
-%%
-%% This program can be distributed and/or modified under the terms
-%% of the LaTeX Project Public License either version 1.3c 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.3c or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This file will generate fast loadable files and documentation
-%% driver files from the doc files in this package when run through
-%% LaTeX or TeX.
-%%
-\def\batchfile{contrib.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}
-
-\keepsilent
-\askforoverwritefalse
-
-\usedir{tex/latex/lettrine}
-
-\nopreamble
-\generate{\file{optfile.cfl}{\from{contrib.dtx}{opt}}
- \usedir{tex/latex/lettrine/contrib}
- \file{pzc2.cfl}{\from{contrib.dtx}{pzc2}}
- \file{pzc3.cfl}{\from{contrib.dtx}{pzc3}}
- \nopostamble
- \file{pacl.cfl}{\from{contrib.dtx}{pacl}}
- \file{padl.cfl}{\from{contrib.dtx}{padl}}
- }
-
-\Msg{***********************************************************}
-\Msg{*}
-\Msg{* To finish the installation please move all the *.cfl}
-\Msg{* files to the contrib subdirectory of tex/latex/lettrine.}
-\Msg{*}
-\Msg{* Happy TeXing!}
-\Msg{*}
-\Msg{***********************************************************}
-
-\endbatchfile
-\endinput
diff --git a/macros/latex/contrib/lettrine/contrib/optfile.cfl b/macros/latex/contrib/lettrine/contrib/optfile.cfl
new file mode 100644
index 0000000000..407ed82c99
--- /dev/null
+++ b/macros/latex/contrib/lettrine/contrib/optfile.cfl
@@ -0,0 +1,28 @@
+%% This is an example of config file *for syntax only*.
+%% To use it, copy it to your document's directory and code
+%% \usepackage[optionsfile=optfile.cfl]{lettrine}
+%%
+%% The settings below are just *examples*, they are not meant to be good!
+%% Proper values heavily depend on the font used!
+%%
+%% Letters not listed below, will get either the default parameters,
+%% or those given as optional argument of \lettrine, if any.
+%%
+%% The values of the parameters set in this file can be overridden
+%% locally using the optional argument of \lettrine.
+
+%% A
+\LettrineOptionsFor{A}{slope=0.1\LettrineWidth, findent=-.5em, nindent=.7em}
+%% Same parameters for À (utf-8)
+\LettrineOptionsFor{À}{slope=0.1\LettrineWidth, findent=-.5em, nindent=0.7em}
+%% C'
+\LettrineOptionsFor{C'}{nindent=-0.5em}
+%% I and J hang into the margin
+\LettrineOptionsFor{I}{lhang=1, nindent=0pt}
+\LettrineOptionsFor{J}{lhang=1, nindent=0pt}
+%% Q
+\LettrineOptionsFor{Q}{loversize=0, lraise=0.1}
+%% V
+\LettrineOptionsFor{V}{slope=-0.1\LettrineWidth, lhang=0.5, nindent=0pt}
+
+\endinput
diff --git a/macros/latex/contrib/lettrine/contrib/pacl.cfl b/macros/latex/contrib/lettrine/contrib/pacl.cfl
new file mode 100644
index 0000000000..e8de17b6d6
--- /dev/null
+++ b/macros/latex/contrib/lettrine/contrib/pacl.cfl
@@ -0,0 +1,84 @@
+%%% This is file `pacl.cfl'.
+%%% It is provided under the LPPL. Copyright is hold by Pascal Kockaert.
+%%% If you modify this file you *MUST* change its name.
+%%%
+%%% This file contains config values to simplify the use of the
+%%% ACaslon-SwashItalic (aka pacri8s) font from Adobe
+%%% with the lettrine package by Daniel Flipo.
+%%%
+%%% If you want to use this file, your document should contain
+%%% the two next lines, without the leading percent signs.
+%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{pacl}\selectfont}
+%%% \renewcommand{\DefaultOptionsFile}{pacl.cfl}
+%%%
+%%% The fontfamily pacl is defined through the file T1pacl.fd.
+%%% The contents of T1pacl.fd is listed at the end of this file.
+%%%
+%%% The settings below were defined according to my visual tastes.
+%%% No mathematical rule based on the metrices was applied.
+%%% Though the result may not please you, it should be better
+%%% than the default placement. This said, comments are welcome.
+%%%
+%%% Comments about this file can be sent to Pascal.Kockaert
+%%% at the mail server ulb.ac.be.
+
+
+\ProvidesFile{pacl.cfl}[2003/08/24 v0.1 Pascal Kockaert]
+\LettrineOptionsFor{A}{loversize= 0.15,lraise= 0.02,lhang= 0.30,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{B}{loversize= 0.15,lraise= 0.00,lhang= 0.25,findent=-0.05\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{C}{loversize=-0.10,lraise= 0.25,lhang= 0.05,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{D}{loversize= 0.15,lraise= 0.00,lhang= 0.20,findent=-0.07\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{E}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent=-0.10\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{F}{loversize=-0.10,lraise= 0.20,lhang= 0.00,findent= 0.05\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{G}{loversize=-0.10,lraise= 0.20,lhang= 0.05,findent=-0.05\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{H}{loversize= 0.05,lraise= 0.00,lhang= 0.25,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{I}{loversize= 0.15,lraise= 0.00,lhang= 0.00,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{J}{loversize=-0.10,lraise= 0.20,lhang= 0.00,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{K}{loversize=-0.10,lraise= 0.25,lhang= 0.00,findent= 0.00\LettrineWidth,nindent= 0.45\LettrineWidth}
+\LettrineOptionsFor{L}{loversize= 0.00,lraise= 0.20,lhang= 0.00,findent=-0.10\LettrineWidth,nindent= 0.40\LettrineWidth}
+\LettrineOptionsFor{M}{loversize= 0.15,lraise= 0.00,lhang= 0.24,findent=-0.05\LettrineWidth,nindent= 0.10\LettrineWidth}
+\LettrineOptionsFor{N}{loversize=-0.05,lraise= 0.25,lhang= 0.13,findent= 0.05\LettrineWidth,nindent= 0.35\LettrineWidth}
+\LettrineOptionsFor{O}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent=-0.12\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{P}{loversize= 0.15,lraise= 0.00,lhang= 0.25,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{Q}{loversize=-0.15,lraise= 0.25,lhang= 0.10,findent=-0.05\LettrineWidth,nindent= 0.55\LettrineWidth}
+\LettrineOptionsFor{R}{loversize=-0.15,lraise= 0.25,lhang= 0.20,findent=-0.05\LettrineWidth,nindent= 0.45\LettrineWidth}
+\LettrineOptionsFor{S}{loversize=-0.10,lraise= 0.25,lhang=-0.05,findent=-0.05\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{T}{loversize= 0.15,lraise= 0.00,lhang= 0.15,findent= 0.00\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{U}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent= 0.00\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{V}{loversize= 0.15,lraise= 0.00,lhang= 0.20,findent=-0.05\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{W}{loversize= 0.15,lraise= 0.00,lhang= 0.15,findent=-0.05\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{X}{loversize= 0.15,lraise= 0.00,lhang= 0.45,findent= 0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{Y}{loversize= 0.15,lraise= 0.00,lhang= 0.05,findent= 0.20\LettrineWidth,nindent= 0.25\LettrineWidth}
+\LettrineOptionsFor{Z}{loversize= 0.05,lraise= 0.15,lhang= 0.15,findent= 0.00\LettrineWidth,nindent= 0.30\LettrineWidth}
+\endinput
+
+
+% The installation of the pacl family can be performed using the fontinst
+% package.
+% You must own the font ACaslon-SwashItalic, that is an AFM and a PFB file
+% which should be renamed as padri8w.afm and padri8w.pfb.
+%
+% You should process the file Makepacl.tex (see below) through TeX,
+% and follow the instructions of the fontinst manual to finish the install.
+% The file T1pacl.fd should be defined as below and put with other local FD
+% files.
+
+%%% File Makepacl.tex
+\input fontinst.sty
+\installfonts
+ \declareencoding{T1-SWASH}{T1}
+ \fromafm{pacri8s} %%% File containing metrics of ACaslon-SwashItalic
+ \installfont{pacri9s}{pacri8s}{T1}{T1}{pacl}{m}{n}{}
+\endinstallfonts
+\bye
+%%% End of file Makepacl.tex
+
+% The pacl family is defined by the file T1pacl.fd, as follows
+
+%%% File T1pacl.fd
+%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
+\ProvidesFile{t1pacl.fd}[2003/08/24 v1.0 Pascal Kockaert]
+\DeclareFontFamily{T1}{pacl}{}
+\DeclareFontShape{T1}{pacl}{m}{n}{<->pacri9s}{}
+\endinput
+%%% End of file T1pacl.fd
diff --git a/macros/latex/contrib/lettrine/contrib/padl.cfl b/macros/latex/contrib/lettrine/contrib/padl.cfl
new file mode 100644
index 0000000000..784bebc935
--- /dev/null
+++ b/macros/latex/contrib/lettrine/contrib/padl.cfl
@@ -0,0 +1,85 @@
+%%% This is file `padl.cfl'.
+%%% It is provided under the LPPL. Copyright is hold by Pascal Kockaert.
+%%% If you modify this file you *MUST* change its name.
+%%%
+%%% This file contains config values to simplify the use of the
+%%% AGaramondAlt-Italic (aka padri8w) font from Adobe
+%%% with the lettrine package by Daniel Flipo.
+%%%
+%%% If you want to use this file, your document should contain
+%%% the two next lines, without the leading percent signs.
+%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{padl}\selectfont}
+%%% \renewcommand{\DefaultOptionsFile}{padl.cfl}
+%%%
+%%% The fontfamily padl is defined through the file T1padl.fd.
+%%% The contents of T1padl.fd is listed at the end of this file.
+%%%
+%%% The settings below were defined according to my visual tastes.
+%%% No mathematical rule based on the metrices was applied.
+%%% Though the result may not please you, it should be better
+%%% than the default placement. This said, comments are welcome.
+%%%
+%%% Comments about this file can be sent to Pascal.Kockaert
+%%% at the mail server ulb.ac.be.
+
+
+
+\ProvidesFile{padl.cfl}[2003/08/24 v1.0 Pascal Kockaert]
+
+\LettrineOptionsFor{A}{loversize= 0.05,lraise= 0.10,lhang= 0.40,findent= 0.000\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{B}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.025\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{C}{loversize= 0.00,lraise= 0.10,lhang= 0.15,findent= 0.175\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{D}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent=-0.025\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{E}{loversize= 0.10,lraise= 0.00,lhang= 0.10,findent= 0.100\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{F}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.100\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{G}{loversize=-0.08,lraise= 0.20,lhang= 0.10,findent= 0.000\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{H}{loversize=-0.01,lraise= 0.00,lhang= 0.00,findent= 0.040\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{I}{loversize= 0.10,lraise= 0.00,lhang= 0.00,findent= 0.050\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{J}{loversize=-0.08,lraise= 0.20,lhang= 0.00,findent=-0.025\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{K}{loversize=-0.05,lraise= 0.25,lhang= 0.00,findent=-0.050\LettrineWidth,nindent= 0.60\LettrineWidth}
+\LettrineOptionsFor{L}{loversize= 0.00,lraise= 0.20,lhang= 0.00,findent= 0.100\LettrineWidth,nindent= 0.40\LettrineWidth}
+\LettrineOptionsFor{M}{loversize= 0.10,lraise= 0.00,lhang= 0.40,findent= 0.040\LettrineWidth,nindent= 0.10\LettrineWidth}
+\LettrineOptionsFor{N}{loversize= 0.00,lraise= 0.20,lhang= 0.20,findent=-0.010\LettrineWidth,nindent= 0.40\LettrineWidth}
+\LettrineOptionsFor{O}{loversize= 0.10,lraise= 0.00,lhang= 0.20,findent=-0.010\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{P}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.050\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{Q}{loversize= 0.00,lraise= 0.20,lhang= 0.20,findent= 0.050\LettrineWidth,nindent= 0.70\LettrineWidth}
+\LettrineOptionsFor{R}{loversize=-0.05,lraise= 0.25,lhang= 0.25,nindent= 0.500\LettrineWidth,nindent= 0.50\LettrineWidth}
+\LettrineOptionsFor{S}{loversize= 0.10,lraise= 0.05,lhang= 0.00,findent= 0.000\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{T}{loversize= 0.10,lraise= 0.00,lhang= 0.35,findent= 0.100\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{U}{loversize= 0.10,lraise= 0.00,lhang= 0.20,findent= 0.050\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{V}{loversize= 0.10,lraise= 0.00,lhang= 0.40,findent= 0.050\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{W}{loversize= 0.10,lraise= 0.00,lhang= 0.30,findent= 0.040\LettrineWidth,nindent= 0.50em}
+\LettrineOptionsFor{X}{loversize= 0.10,lraise= 0.00,lhang= 0.40,findent= 0.040\LettrineWidth,nindent= 0.20\LettrineWidth}
+\LettrineOptionsFor{Y}{loversize= 0.10,lraise= 0.00,lhang= 0.20,findent= 0.100\LettrineWidth,nindent= 0.20\LettrineWidth}
+\LettrineOptionsFor{Z}{loversize=-0.05,lraise= 0.25,lhang= 0.00,findent= 0.050\LettrineWidth,nindent= 0.55\LettrineWidth}
+\endinput
+
+
+% The installation of the padl family can be performed using the fontinst package.
+% You must own the font AGaramondAlt-Italic, that is an AFM and a PFB file
+% which should be renamed as padri8w.afm and padri8w.pfb.
+%
+% You should process the file Makepadl.tex (see below) through TeX,
+% and follow the instructions of the fontinst manual to finish the install.
+% The file T1padl.fd should be defined as below and put with other local FD files.
+
+%%% File Makepadl.tex
+\input fontinst.sty
+\installfonts
+ \declareencoding{T1-SWASH}{T1}
+ \fromafm{padri8w} %%% File containing metrics of AGaramondAlt-Italic
+ \gdef\uc#1#2{#1swash}
+ \installfont{padw9w}{padri8w}{T1}{T1}{padl}{m}{n}{}
+\endinstallfonts
+\bye
+%%% End of file Makepadl.tex
+
+% The padl family is defined by the file T1padl.fd, as follows
+
+%%% File T1padl.fd
+%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
+\ProvidesFile{t1padl.fd}[2003/08/24 v0.1 Pascal Kockaert]
+\DeclareFontFamily{T1}{padl}{}
+\DeclareFontShape{T1}{padl}{m}{n}{<->padw9w}{}
+\endinput
+%%% End of file T1padl.fd
diff --git a/macros/latex/contrib/lettrine/contrib/pzc2.cfl b/macros/latex/contrib/lettrine/contrib/pzc2.cfl
new file mode 100644
index 0000000000..7779968780
--- /dev/null
+++ b/macros/latex/contrib/lettrine/contrib/pzc2.cfl
@@ -0,0 +1,45 @@
+%%% This is file `pzc2.cfl'.
+%%% It is provided under the LPPL. Copyright is held by Kevin M. Dunn.
+%%% If you modify this file you *MUST* change its name.
+%%%
+%%% This file contains config values to simplify the use of the
+%%% Zapf-Chancery (aka pzc) font with the lettrine package by Daniel Flipo.
+%%% This file provides the parameters for 2 DefaultLines.
+%%%
+%%% If you want to use this file, your document should contain
+%%% the next three lines, without the leading percent signs.
+%%% \setcounter{DefaultLines}{2}
+%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{pzc}\selectfont}
+%%% \renewcommand{\DefaultOptionsFile}{pzc2.cfl}
+%%%
+%%% Comments about this file can be sent to Kevin Dunn
+%%% (cavema2 at cavemanchemistry.com)
+%%%
+\ProvidesFile{pzc2.cfl}[2006/03/19 v0.1 Kevin M. Dunn]
+\LettrineOptionsFor{A}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
+\LettrineOptionsFor{B}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.08\LettrineWidth}
+\LettrineOptionsFor{C}{loversize= 0.35,lraise= 0.10,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
+\LettrineOptionsFor{D}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.05\LettrineWidth}
+\LettrineOptionsFor{E}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
+\LettrineOptionsFor{F}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.00\LettrineWidth}
+\LettrineOptionsFor{G}{loversize= 0.35,lraise= 0.10,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.17\LettrineWidth}
+\LettrineOptionsFor{H}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.20\LettrineWidth}
+\LettrineOptionsFor{I}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
+\LettrineOptionsFor{J}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.00\LettrineWidth}
+\LettrineOptionsFor{K}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.13\LettrineWidth}
+\LettrineOptionsFor{L}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=-0.02\LettrineWidth,nindent= 0.30\LettrineWidth}
+\LettrineOptionsFor{M}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{N}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.10\LettrineWidth}
+\LettrineOptionsFor{O}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.08\LettrineWidth}
+\LettrineOptionsFor{P}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.25\LettrineWidth,nindent= 0.05\LettrineWidth}
+\LettrineOptionsFor{Q}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent= 0.10\LettrineWidth}
+\LettrineOptionsFor{R}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.08\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{S}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.13\LettrineWidth}
+\LettrineOptionsFor{T}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.20\LettrineWidth}
+\LettrineOptionsFor{U}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{V}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.18\LettrineWidth,nindent=-0.15\LettrineWidth}
+\LettrineOptionsFor{W}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.15\LettrineWidth,nindent=-0.05\LettrineWidth}
+\LettrineOptionsFor{X}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.35\LettrineWidth}
+\LettrineOptionsFor{Y}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.10\LettrineWidth,nindent= 0.05\LettrineWidth}
+\LettrineOptionsFor{Z}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent= 0.00\LettrineWidth,nindent= 0.30\LettrineWidth}
+\endinput
diff --git a/macros/latex/contrib/lettrine/contrib/pzc3.cfl b/macros/latex/contrib/lettrine/contrib/pzc3.cfl
new file mode 100644
index 0000000000..a67ba9b5b0
--- /dev/null
+++ b/macros/latex/contrib/lettrine/contrib/pzc3.cfl
@@ -0,0 +1,45 @@
+%%% This is file `pzc2.cfl'.
+%%% It is provided under the LPPL. Copyright is held by Kevin M. Dunn.
+%%% If you modify this file you *MUST* change its name.
+%%%
+%%% This file contains config values to simplify the use of the
+%%% Zapf-Chancery (aka pzc) font with the lettrine package by Daniel Flipo.
+%%% This file provides the parameters for 3 DefaultLines.
+%%%
+%%% If you want to use this file, your document should contain
+%%% the next three lines, without the leading percent signs.
+%%% \setcounter{DefaultLines}{3}
+%%% \renewcommand\LettrineFontHook{\fontencoding{T1}\fontfamily{pzc}\selectfont}
+%%% \renewcommand{\DefaultOptionsFile}{pzc3.cfl}
+%%%
+%%% Comments about this file can be sent to Kevin Dunn
+%%% (cavema2 at cavemanchemistry.com)
+
+\ProvidesFile{pzc3.cfl}[2006/03/19 v0.1 Kevin M. Dunn]
+\LettrineOptionsFor{A}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
+\LettrineOptionsFor{B}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.08\LettrineWidth,slope=-0.08\LettrineWidth}
+\LettrineOptionsFor{C}{loversize= 0.35,lraise= 0.10,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
+\LettrineOptionsFor{D}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.05\LettrineWidth,slope=-0.05\LettrineWidth}
+\LettrineOptionsFor{E}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.28\LettrineWidth}
+\LettrineOptionsFor{F}{loversize= 0.35,lraise= 0.05,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.00\LettrineWidth}
+\LettrineOptionsFor{G}{loversize= 0.30,lraise= 0.30,lhang= 0.5,findent=0.10\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{H}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.20\LettrineWidth}
+\LettrineOptionsFor{I}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.25\LettrineWidth}
+\LettrineOptionsFor{J}{loversize= 0.35,lraise= 0.05,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.00\LettrineWidth}
+\LettrineOptionsFor{K}{loversize= 0.30,lraise= 0.20,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.13\LettrineWidth,slope= 0.20\LettrineWidth}
+\LettrineOptionsFor{L}{loversize= 0.35,lraise= 0.00,lhang=0.35,findent=-0.02\LettrineWidth,nindent= 0.30\LettrineWidth}
+\LettrineOptionsFor{M}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{N}{loversize= 0.30,lraise= 0.20,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.10\LettrineWidth,slope= 0.20\LettrineWidth}
+\LettrineOptionsFor{O}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.08\LettrineWidth}
+\LettrineOptionsFor{P}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.25\LettrineWidth,nindent= 0.05\LettrineWidth}
+\LettrineOptionsFor{Q}{loversize= 0.30,lraise= 0.25,lhang= 0.35,findent=0.15\LettrineWidth,nindent= 0.10\LettrineWidth,slope= 0.20\LettrineWidth}
+\LettrineOptionsFor{R}{loversize= 0.30,lraise= 0.20,lhang= 0.35,findent=0.08\LettrineWidth,nindent= 0.15\LettrineWidth,slope= 0.20\LettrineWidth}
+\LettrineOptionsFor{S}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.10\LettrineWidth,nindent= 0.13\LettrineWidth}
+\LettrineOptionsFor{T}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.20\LettrineWidth}
+\LettrineOptionsFor{U}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.05\LettrineWidth,nindent= 0.15\LettrineWidth}
+\LettrineOptionsFor{V}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.18\LettrineWidth,nindent=-0.05\LettrineWidth,slope=-0.15\LettrineWidth}
+\LettrineOptionsFor{W}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.18\LettrineWidth,nindent=-0.05\LettrineWidth,slope=-0.10\LettrineWidth}
+\LettrineOptionsFor{X}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.35\LettrineWidth}
+\LettrineOptionsFor{Y}{loversize= 0.30,lraise= 0.10,lhang= 0.40,findent=0.10\LettrineWidth,nindent= 0.00\LettrineWidth,slope=-0.10\LettrineWidth}
+\LettrineOptionsFor{Z}{loversize= 0.35,lraise= 0.00,lhang= 0.35,findent=0.00\LettrineWidth,nindent= 0.30\LettrineWidth}
+\endinput
diff --git a/macros/latex/contrib/lettrine/doc/lettrine-demo-de.pdf b/macros/latex/contrib/lettrine/doc/lettrine-demo-de.pdf
index f27982ed41..bf74f1840c 100644
--- a/macros/latex/contrib/lettrine/doc/lettrine-demo-de.pdf
+++ b/macros/latex/contrib/lettrine/doc/lettrine-demo-de.pdf
Binary files differ
diff --git a/macros/latex/contrib/lettrine/doc/lettrine-demo-fr.pdf b/macros/latex/contrib/lettrine/doc/lettrine-demo-fr.pdf
index 0d311f197b..c14ada6737 100644
--- a/macros/latex/contrib/lettrine/doc/lettrine-demo-fr.pdf
+++ b/macros/latex/contrib/lettrine/doc/lettrine-demo-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/lettrine/doc/lettrine-demo-lua.pdf b/macros/latex/contrib/lettrine/doc/lettrine-demo-lua.pdf
index e8c19c69d4..40694cd70b 100644
--- a/macros/latex/contrib/lettrine/doc/lettrine-demo-lua.pdf
+++ b/macros/latex/contrib/lettrine/doc/lettrine-demo-lua.pdf
Binary files differ
diff --git a/macros/latex/contrib/lettrine/doc/lettrine.pdf b/macros/latex/contrib/lettrine/doc/lettrine.pdf
index 6870682712..5f4c521e91 100644
--- a/macros/latex/contrib/lettrine/doc/lettrine.pdf
+++ b/macros/latex/contrib/lettrine/doc/lettrine.pdf
Binary files differ
diff --git a/macros/latex/contrib/lettrine/lettrine-2022-09-25.sty b/macros/latex/contrib/lettrine/lettrine-2022-09-25.sty
new file mode 100644
index 0000000000..6ef4f4b070
--- /dev/null
+++ b/macros/latex/contrib/lettrine/lettrine-2022-09-25.sty
@@ -0,0 +1,302 @@
+%%
+%% This is file `lettrine.sty', v2.30.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file `lettine.dtx'.
+%%
+%% This file can be distributed and/or modified under the terms
+%% of the LaTeX Project Public License either version 1.3c 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.3c 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 Daniel Flipo.
+%%
+%% Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
+%%
+\NeedsTeXFormat{LaTeX2e}[2018-04-01]
+\ProvidesFile{lettrine.sty}
+ [2022-09-25 v2.30 (Daniel Flipo)]
+\RequirePackage{xkeyval,minifp}
+\newcounter{DefaultLines}
+\setcounter{DefaultLines}{2}
+\newcounter{DefaultDepth}
+\newcommand*{\DefaultOptionsFile}{\relax}
+\newcommand*{\DefaultLoversize}{0}
+\newcommand*{\DefaultLraise}{0}
+\newcommand*{\DefaultLhang}{0}
+\newdimen\DefaultFindent
+\setlength{\DefaultFindent}{\z@}
+\newdimen\DefaultNindent
+\setlength{\DefaultNindent}{0.5em}
+\newdimen\DefaultSlope
+\setlength{\DefaultSlope}{\z@}
+\newdimen\DiscardVskip
+\setlength{\DiscardVskip}{0.2\p@}
+\newif\ifLettrineImage
+\newif\ifLettrineOnGrid
+\newif\ifLettrineRealHeight
+\InputIfFileExists{lettrine.cfg}
+ {\typeout{Loading lettrine.cfg}}
+ {\typeout{lettrine.cfg not found, using default values}}
+\DeclareOptionX{lines}[\value{DefaultLines}]{\setcounter{DefaultLines}{#1}}
+\DeclareOptionX{depth}[\value{DefaultDepth}]{\setcounter{DefaultDepth}{#1}}
+\DeclareOptionX{lhang}[]{\ifx#1\@empty\else
+ \renewcommand*{\DefaultLhang}{#1}\fi}
+\DeclareOptionX{loversize}[]{\ifx#1\@empty\else
+ \renewcommand*{\DefaultLoversize}{#1}\fi}
+\DeclareOptionX{lraise}[]{\ifx#1\@empty\else
+ \renewcommand*{\DefaultLraise}{#1}}
+\DeclareOptionX{findent}[\the\DefaultFindent]{%
+ \setlength{\DefaultFindent}{#1}}
+\DeclareOptionX{nindent}[\the\DefaultNindent]{%
+ \setlength{\DefaultNindent}{#1}}
+\DeclareOptionX{slope}[\the\DefaultSlope]{\setlength{\DefaultSlope}{#1}}
+\DeclareOptionX{image}[true]{\csname LettrineImage#1\endcsname}
+\DeclareOptionX{grid}[true]{\csname LettrineOnGrid#1\endcsname}
+\DeclareOptionX{novskip}[\the\DiscardVskip]{\setlength{\DiscardVskip}{#1}}
+\DeclareOptionX{realheight}[true]{\csname LettrineRealHeight#1\endcsname}
+\DeclareOptionX{optionsfile}[]{\ifx#1\@empty\else
+ \renewcommand*{\DefaultOptionsFile}{#1}\fi}
+\ProcessOptionsX
+
+\newsavebox{\L@lbox}
+\newsavebox{\L@tbox}
+\newcounter{L@lines}
+\newcounter{L@depth}
+\newdimen\L@Pindent
+\newdimen\L@Findent
+\newdimen\L@Nindent
+\newdimen\L@lraise
+\newdimen\L@first
+\newdimen\L@next
+\newdimen\L@slope
+\newdimen\L@height
+\newdimen\L@novskip
+\newdimen\L@target@ht
+\newdimen\L@target@dp
+\newdimen\L@target@tht
+\newdimen\LettrineWidth
+\newdimen\LettrineHeight
+\newdimen\LettrineDepth
+\newcommand*{\L@file}{}
+\newcommand*{\L@hang}{}
+\newcommand*{\L@oversize}{}
+\newcommand*{\L@raise}{}
+\newcommand*{\L@ante}{}
+\newif\ifL@image
+\newif\ifL@grid
+\newif\ifL@realh
+\newif\ifL@selfref
+\newcommand*{\LettrineTextFont}{\scshape}
+\newcommand*{\LettrineSecondString}{x}
+\newcommand*{\LettrineFontHook}{}
+\def\computeL@height{%
+ \setlength{\L@target@ht}{\ht\L@tbox}%
+ \@tempdima=\baselineskip
+ \setlength{\L@target@dp}{\value{L@lines}\@tempdima}%
+ \ifnum\value{L@lines}>1
+ \addtolength{\L@target@dp}{-\@tempdima}%
+ \else
+ \addtolength{\L@target@ht}{\L@target@dp}%
+ \setlength{\L@target@dp}{0pt}%
+ \fi
+ \setlength{\L@target@tht}{\L@target@ht}%
+ \addtolength{\L@target@tht}{\L@target@dp}%
+ \setlength{\L@height}{\L@target@tht}%
+ \addtolength{\L@height}{\L@oversize\L@target@tht}%
+}
+\newcommand*{\LettrineTestString}{EFTZ}
+\def\compute@fontsize{%
+ \ifL@selfref
+ \def\Lettrine@RefString{\l@refstring}%
+ \else
+ \def\Lettrine@RefString{\LettrineTestString}%
+ \fi
+ \sbox{\@tempboxa}{\LettrineFontHook
+ \fontsize{\L@height}{\L@height}\selectfont
+ \Lettrine@RefString}%
+ \@tempcnta=\ht\@tempboxa
+ \ifnum\@tempcnta=0
+ \PackageWarning{lettrine}{Unable to compute \protect\fontsize!%
+ \MessageBreak \protect\LettrineTestString\space empty? reported}
+ \def\L@factor{1}%
+ \else
+ \@tempcntb=\L@height
+ \MFPdiv{\the\@tempcntb}{\the\@tempcnta}\L@factor
+ \fi
+}
+\newcommand*{\LettrineFont}{%
+ \LettrineFontHook
+ \fontsize{\L@factor\L@height}{\L@factor\L@height}%
+ \selectfont
+}
+\newcommand*{\LettrineImage}{%
+ \LettrineFontHook\includegraphics[height=\L@height]%
+}
+\def\setupL@lbox{%
+ \computeL@height
+ \ifL@image
+ \sbox{\L@lbox}{\LettrineImage{\l@initial}}%
+ \else
+ \compute@fontsize
+ \sbox{\L@lbox}{\LettrineFont \l@initial}%
+ \fi
+}
+\define@key{L}{lines}{\setcounter{L@lines}{#1}}
+\define@key{L}{depth}{\setcounter{L@depth}{#1}}
+\define@key{L}{lhang}{\renewcommand*{\L@hang}{#1}}
+\define@key{L}{loversize}{\renewcommand*{\L@oversize}{#1}}
+\define@key{L}{lraise}{\renewcommand*{\L@raise}{#1}}
+\define@key{L}{ante}{\renewcommand*{\L@ante}{#1}}
+\define@key{L}{findent}{\setlength{\L@Findent}{#1}}
+\define@key{L}{nindent}{\setlength{\L@Nindent}{#1}}
+\define@key{L}{slope}{\setlength{\L@slope}{#1}}
+\define@key{L}{image}[true]{\csname L@image#1\endcsname}
+\define@key{L}{grid}[true]{\csname L@grid#1\endcsname}
+\define@key{L}{realheight}[true]{\csname L@realh#1\endcsname}
+\define@key{L}{novskip}{\setlength{\L@novskip}{#1}}
+\define@key{L}{refstring}[\l@initial]{\L@selfreftrue
+ \def\l@refstring{#1}}
+\newcommand*{\LettrineOptionsFor}[2]{\@namedef{l@#1-keys}{#2}}
+\def\lettrine{\@ifnextchar[\@lettrine{\@lettrine[]}}
+\def\@lettrine[#1]#2#3{%
+ \def\l@initial{#2}\let\l@refstring\l@initial
+ \setcounter{L@lines}{\value{DefaultLines}}%
+ \setcounter{L@depth}{\value{DefaultDepth}}%
+ \renewcommand*{\L@hang}{\DefaultLhang}%
+ \renewcommand*{\L@oversize}{\DefaultLoversize}%
+ \renewcommand*{\L@raise}{\DefaultLraise}%
+ \renewcommand*{\L@ante}{}%
+ \setlength{\L@Findent}{\DefaultFindent}%
+ \setlength{\L@Nindent}{\DefaultNindent}%
+ \setlength{\L@slope}{\DefaultSlope}%
+ \setlength{\L@novskip}{\DiscardVskip}%
+ \ifLettrineImage\L@imagetrue\else\L@imagefalse\fi
+ \ifLettrineOnGrid\L@gridtrue\else\L@gridfalse\fi
+ \ifLettrineRealHeight\L@realhtrue\else\L@realhfalse\fi
+ \setkeys{L}{#1}%
+ \sbox{\L@tbox}{\LettrineTextFont{\LettrineSecondString}}%
+ \ifL@realh
+ \def\@tempa{#3}%
+ \ifx\@tempa\@empty
+ \PackageWarning{lettrine.sty}%
+ {Empty second argument,\MessageBreak
+ ignoring option `realheight';}%
+ \else
+ \sbox{\L@tbox}{\LettrineTextFont{#3}}%
+ \fi
+ \fi
+ \if\DefaultOptionsFile\relax
+ \else
+ \begingroup
+ \InputIfFileExists{\DefaultOptionsFile}%
+ {}%
+ {\PackageWarning{lettrine.sty}%
+ {File \DefaultOptionsFile\space not found}%
+ }%
+ \def\color##1##{\l@color{##1}}%
+ \let\l@color\@gobbletwo
+ \def\textcolor##1##{\l@textcolor{##1}}%
+ \def\l@textcolor##1##2##3{##3}%
+ \expandafter\ifx\csname l@#2-keys\endcsname\relax
+ \gdef\l@LOKeys{}%
+ \else
+ \xdef\l@LOKeys{\csname l@#2-keys\endcsname}%
+ \fi
+ \endgroup
+ \def\KV@prefix{KV@L@}%
+ \let\@tempc\relax
+ \expandafter\KV@do\l@LOKeys,\relax,
+ \setupL@lbox
+ \setlength{\LettrineWidth}{\wd\L@lbox}%
+ \def\KV@prefix{KV@L@}%
+ \let\@tempc\relax
+ \expandafter\KV@do\l@LOKeys,\relax,
+ \setkeys{L}{#1}%
+ \fi
+ \setupL@lbox
+ \setlength{\LettrineWidth}{\wd\L@lbox}%
+ \setlength{\LettrineHeight}{\ht\L@lbox}%
+ \setlength{\LettrineDepth}{\dp\L@lbox}%
+ \begingroup
+ \def\IeC##1{##1}%
+ \@tempdima=\L@oversize pt\relax
+ \PackageInfo{lettrine.sty}%
+ {Targeted height = \the\L@target@tht\MessageBreak
+ (for loversize=0, accent excluded),\MessageBreak
+ Lettrine height = \the\LettrineHeight\space (#2)%
+ \ifdim\@tempdima=\z@\else\space loversize=\L@oversize\fi;%
+ \MessageBreak reported}%
+ \endgroup
+ \sbox{\L@tbox}{\LettrineTextFont{#3}}%
+ \setlength{\L@first}{\LettrineHeight}%
+ \setlength{\L@lraise}{\L@raise\L@target@tht}%
+ \addtolength{\L@first}{\L@lraise}%
+ \ifnum\value{L@lines}=1
+ \addtolength{\L@first}{-\ht\L@tbox}%
+ \else
+ \addtolength{\L@first}{-\L@target@tht}%
+ \addtolength{\L@lraise}{-\L@target@dp}%
+ \fi
+ \par
+ \ifdim\L@first>\L@novskip
+ \ifL@grid
+ \@tempdima=\baselineskip
+ \@tempdimb=\@tempdima
+ \advance\@tempdimb by \L@novskip
+ \@tempcnta=1
+ \loop\ifdim\L@first>\@tempdimb
+ \advance\@tempcnta by 1
+ \advance\L@first by -\@tempdima
+ \repeat
+ \L@first=\@tempcnta\baselineskip
+ \fi
+ \vskip\L@first
+ \fi
+ \setlength{\L@Pindent}{\wd\L@lbox}%
+ \addtolength{\L@Pindent}{-\L@hang\wd\L@lbox}%
+ \settowidth{\L@first}{\L@ante}%
+ \addtolength{\L@Pindent}{\L@first}%
+ \addtolength{\L@Pindent}{\L@Findent}%
+ \setlength{\L@first}{\linewidth}%
+ \addtolength{\L@first}{-\L@Pindent}%
+ \addtolength{\L@Nindent}{\L@Pindent}%
+ \setlength{\L@next}{\linewidth}%
+ \addtolength{\L@next}{-\L@Nindent}%
+ \addtolength{\L@Pindent}{\@totalleftmargin}%
+ \addtolength{\L@Nindent}{\@totalleftmargin}%
+ \addtocounter{L@lines}{1}%
+ \addtocounter{L@lines}{\value{L@depth}}%
+ \def\L@parshape{\c@L@lines \the\L@Pindent \the\L@first}%
+ \@tempcnta=\tw@
+ \@whilenum \@tempcnta<\c@L@lines\do{%
+ \edef\L@parshape{\L@parshape \the\L@Nindent \the\L@next}%
+ \addtolength{\L@Nindent}{\L@slope}%
+ \addtolength{\L@next}{-\L@slope}%
+ \advance\@tempcnta\@ne}%
+ \edef\L@parshape{\L@parshape \@totalleftmargin \the\linewidth}%
+ \noindent
+ \parshape=\L@parshape\relax
+ \smash{\llap{\mbox{\L@ante}\raisebox{\L@lraise}{\usebox{\L@lbox}}%
+ \hskip \the\L@Findent}}%
+ \usebox{\L@tbox}%
+ \ifnum\@listdepth>0 \Lreset@listparshape \fi
+}
+\newtoks\Llist@everypar
+\def\Lreset@listparshape{%
+ \let\Lnew@everypar\everypar
+ \Llist@everypar=\expandafter{\the\everypar}%
+ \Lnew@everypar={\the\Llist@everypar
+ \parshape=\@ne \@totalleftmargin \linewidth \relax
+ \let\everypar\Llist@everypar
+ }%
+}
+\endinput
+%%
+%% End of file `lettrine.sty'.
diff --git a/macros/latex/contrib/lettrine/lettrine.dtx b/macros/latex/contrib/lettrine/lettrine.dtx
index 65f301e6af..be96ffe2f8 100644
--- a/macros/latex/contrib/lettrine/lettrine.dtx
+++ b/macros/latex/contrib/lettrine/lettrine.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright © 1999-2022 Daniel Flipo.
+% Copyright © 1999-2023 Daniel Flipo.
%
% This program can be distributed and/or modified under the terms
% of the LaTeX Project Public License either version 1.3c of this
@@ -12,31 +12,36 @@
%
% This file has the LPPL maintenance status "maintained".
%
-% \fi
-%
-% \iffalse
-%
-%<*sty>
-\NeedsTeXFormat{LaTeX2e}[2018-04-01]
-\ProvidesFile{lettrine.sty}
-%</sty>
-%<*dtx>
-\ProvidesFile{lettrine.dtx}
-%</dtx>
-%<*!cfg>
- [2022-09-25 v2.30 (Daniel Flipo)]
-%</!cfg>
-%
-% Lettrine package for LaTeX version 2e
-%
-% Copyright © 1999-2020 by Daniel Flipo
-%
-% Please report errors to: daniel (dot) flipo (at) free (dot) fr
-%
+%<*batch>
+%<*gobble>
+\ifx\jobname\relax\let\documentclass\undefined\fi
+\ifx\documentclass\undefined
+\csname fi\endcsname
+%</gobble>
+\input docstrip.tex
+\keepsilent
+\let\MetaPrefix\relax
+\preamble
+\endpreamble
+\postamble
+\endpostamble
+\let\MetaPrefix\DoubleperCent
+\askforoverwritefalse
+\generate{\file{lettrine.sty}{\from{lettrine.dtx}{sty}}
+ \nopreamble
+ \file{lettrine.cfg}{\from{lettrine.dtx}{cfg}}
+ }
+\endbatchfile
+%</batch>
+%<*gobble>
+\fi
+\expandafter\ifx\csname @currname\endcsname\empty
+\csname fi\endcsname
+%</gobble>
%<*driver>
-\RequirePackage{pdfmanagement-testphase}
-\DeclareDocumentMetadata{pdfstandard=A-2b, lang=en-US}
-\documentclass[a4paper]{ltxdoc}
+\DocumentMetadata{pdfstandard=A-2b, lang=en-GB}
+\documentclass[a4paper,british]{ltxdoc}
+\usepackage{babel,varioref}
\usepackage[dvipsnames]{xcolor}
\usepackage{unicode-math}
\setmainfont{erewhon}
@@ -73,7 +78,7 @@
\setlength{\parindent}{0pt}
\setlength{\parskip}{.3\baselineskip}
\begin{document}
-\GetFileInfo{lettrine.dtx}
+\GetFileInfo{lettrine.sty}
\begin{center}
\textbf{\Large Typesetting dropped capitals with LaTeX}
\\[.5\baselineskip]^^A\]
@@ -83,8 +88,27 @@
\DocInput{lettrine.dtx}
\end{document}
%</driver>
+%<*gobble>
+\fi
+%</gobble>
+% \fi
%
-%\fi
+% \iffalse
+%
+%<*sty>
+%% IMPORTANT NOTICE:
+%% For the copyright see the source file `lua-typo.dtx’.
+%%
+\NeedsTeXFormat{LaTeX2e}[2022-06-01]
+\ProvidesFile{lettrine.sty}
+%</sty>
+%<*dtx>
+\ProvidesFile{lettrine.dtx}
+%</dtx>
+%<*sty|dtx>
+ [2023-04-18 v2.40 (Daniel Flipo)]
+%</sty|dtx>
+% \fi
%
% \section{Introduction}
%
@@ -113,8 +137,7 @@
% \item ``Mise en page et impression’’ Yves~Perrousseaux,
% ISBN-2-911220-01-3.
% \end{itemize}
-% The parameters can be set using David Carlisle’s
-% \texttt{keyval.sty} syntax:
+% The parameters can be set using the \texttt{key=value} syntax:
% \begin{itemize}
% \item \lopt{lines=}\meta{integer} sets how many lines the
% dropped capital will occupy (default=2);
@@ -146,7 +169,7 @@
% like |A| or |V| to add \meta{dimen} (positive or negative) to the
% indentation of each line starting from the third one (no effect if
% \lopt{lines=2}, default=0pt);
-% \item \lopt{ante=}\meta{text} can be used to typeset \meta{text}
+% \item \lopt{ante=}\meta{string} can be used to typeset \meta{string}
% \emph{before} the dropped capital (typical use is for French
% guillemets starting the paragraph).
%
@@ -210,18 +233,17 @@
% top of the non accented letters).
% \end{description}
%
-% \item \lopt{refstring}\footnote{Unlike \lopt{grid} or
-% \lopt{realheight}, \lopt{refstring} is not a flag (\emph{do not}
-% add \lopt{=true}!); it is possible to set
-% \lopt{refstring=}\meta{string} to override \cs{LettrineTestString}
-% locally.} is meant for fancy initials with
-% irregular heights (i.e.\ taken in fonts like Yinit (OpenType),
-% \file{cfr-initials},…). \lopt{refstring} forces the
+% \item \lopt{refstring} with no value, is meant for fancy initials
+% with irregular heights (i.e.\ taken in fonts like Yinit (OpenType),
+% \file{cfr-initials},…). Option \lopt{refstring} forces the
% |\fontsize| computations to be run on the initial given as
% |\lettrine|’s first mandatory argument instead of the reference
% string |\LettrineTestString|. In most cases, this option should
% \emph{not} be used: think of accentuated initials or capitals with
-% optical correction.
+% optical correction.\par
+% \lopt{refstring}=\meta{string} can be used to override
+% |\LettrineTestString|, the default reference string
+% (option \emph{seldom useful}).
%
% \end{itemize}
%
@@ -230,7 +252,7 @@
% \mbox{}\phantom{\tt Example: lettrine}%
% |{V}{oici} un exemple |…
%
-% Coloured initials are possible in conjonction with package
+% Coloured initials are available in conjonction with package
% \file{color}, examples: \\
% |\lettrine{\textcolor{red}{A}}{n} example|\quad or\\
% |\lettrine{\textcolor[gray]{0.5}{A}}{nother} one| \\
@@ -241,26 +263,27 @@
% Three dimensions, |\LettrineWidth|, |\LettrineHeight| and
% |\LettrineDepth|, store the final size of the initial.
%
-% Have a look at files \file{demo-fr.tex} and \file{demo-lua.tex}
-% and at the resulting PDFs in the \file{doc} folder to see the
-% possible usage of these parameters.
+% Have a look at files \file{lettrine-demo-fr.tex} and
+% \file{lettrine-demo-lua.tex} and at the resulting PDFs in the
+% \file{doc} folder to see the possible usage of these parameters.
%
% \changes{v1.9}{2015/08/31}{New customisable string
% \cs{LettrineSecondString} to tune the initial’s height.}
%
-% Starting with version~2.30, the default settings can be
+% Starting with version~2.30, the default settings can easily be
% specified as options passed to the \pkg{lettrine} \emph{package}.
-% These options are the same as those of the |\lettrine| command%
-% \footnote{With one exception: \lopt{refstring} is available only
-% for the \cs{lettrine} command.}:
-% f.i. |\usepackage[lines=3]{lettrine}| will set the default to three
-% lines of text. Options passed to the \pkg{lettrine} package override
-% the defaults set in the \file{lettrine.cfg} file (see below) and will
-% be overriden by options passed to the |\lettrine| command.
-%
-% The default settings can be customized in a config file
-% \file{lettrine.cfg} for a global usage. The following list shows
-% the syntax to set them and their default values:
+% These options are the same as those of the |\lettrine| command
+% previously described%
+% \footnote{With the exception of \lopt{ante} which doesn’t make
+% sense for a global usage.}: f.i. |\usepackage[lines=3]{lettrine}|
+% will set the default to three lines of text.
+% Options passed to the \pkg{lettrine} package override the defaults
+% set in the \file{lettrine.cfg} file (see below) and will be
+% overriden by options passed to the |\lettrine| command.
+%
+% The default settings can also be customized in a config file
+% \file{lettrine.cfg} (backward compatibility). The following list
+% shows the syntax to set them and their default values:
% \begin{itemize}
% \item |\setcounter{DefaultLines}{2}|,
% \item |\setcounter{DefaultDepth}{0}|,
@@ -288,9 +311,9 @@
%
% The dimensional parameters \lopt{findent}, \lopt{nindent} and
% \lopt{slope}, can be set relative to |\LettrineWidth| if needed,
-% \emph{in \meta{filename} only}. The settings read from this file
-% will be overridden by the optional arguments eventually given to
-% |\lettrine|.
+% \emph{in an \file{optionsfile} only}. The settings read from this
+% file will be overridden by the optional arguments eventually given
+% to the |\lettrine| command.
%
% |\LettrineTextFont| sets the font used for the second argument
% of |\lettrine|, its default definition is
@@ -332,12 +355,12 @@
% \vspace{\baselineskip}
% \textbf{Important notice:}
% the sizing works fine with \emph{fully scalable} fonts (like the
-% standard PostScript fonts), but might not work well with CM/EC
-% fonts which have two limitations: only a limited number of sizes
-% is available by default (precise adjustments are impossible),
-% and the largest size (25pt or 35pt) is often too small.
-% The CM fonts are now available in PostScript type1 format for
-% free (courtesy of BlueSky/Y\&Y), to make them fully scalable,
+% standard PostScript or OpenType fonts), but might not work well
+% with CM/EC fonts which have two limitations: only a limited number
+% of sizes is available by default (precise adjustments are
+% impossible), and the largest size (25pt or 35pt) is often too
+% small. The CM fonts are available in PostScript type1 format
+% for free (courtesy of BlueSky/Y\&Y), to make them fully scalable,
% it is mandatory to add |\usepackage{type1cm}| in the preamble
% of your document.
% The EC fonts are also available in type1 format for free
@@ -411,30 +434,21 @@
% \changes{v2.2}{2018/08/25}{Rollback mechanism used for recovering
% older versions.}
%
-% The lettrine package now uses the rollback mechanism recently
-% introduced by the LaTeX Team to provide easier backward
-% compatibility. This requires a recent LaTeX kernel (at least
-% 2018-04-01), roolback is ignored with older kernels.
-% \begin{macrocode}
-\ifdefined\DeclareRelease
- \DeclareRelease{v1.6}{1999-03-03}{lettrine-2006-03-17.sty}
- \DeclareRelease{v1.9}{2012-07-20}{lettrine-2015-08-31.sty}
- \DeclareRelease{v2.0}{2018-07-21}{lettrine-2018-08-18.sty}
- \DeclareCurrentRelease{}{2020-03-14}
-\else
- \PackageWarning{lettrine}{Your LaTeX kernel is too old to provide
- access\MessageBreak to former versions of the lettrine package.%
- \MessageBreak If you need rollback, please upgrade%
- \MessageBreak your LaTeX kernel (2018-04-01 or newer),%
- \MessageBreak otherwise you are fine; reported}
-\fi
-% \end{macrocode}
-%
-% This package only runs with LaTeX and requires files
-% \file{xkeyval.sty} and \file{minifp.sty}.
+% \changes{v2.40}{2023/04/18}{lettrine.dtx auto-generates lettrine.sty
+% and lettrine.cfg (lettrine.ins deleted).}
%
+% The lettrine package uses the rollback mechanism
+% introduced by the LaTeX Team to provide easier backward
+% compatibility. The current release requires a LaTeX version
+% not older than 2022-06-01 (kernel packages \pkg{ltkeys} and
+% \pkg{xfp} are required).
% \begin{macrocode}
-\RequirePackage{xkeyval,minifp}
+\DeclareRelease{v1.6}{1999-03-03}{lettrine-2006-03-17.sty}
+\DeclareRelease{v1.9}{2012-07-20}{lettrine-2015-08-31.sty}
+\DeclareRelease{v2.0}{2018-07-21}{lettrine-2018-08-18.sty}
+\DeclareRelease{v2.3}{2022-09-25}{lettrine-2022-09-25.sty}
+\DeclareCurrentRelease{}{2023-04-18}
+\RequirePackage{xfp}
% \end{macrocode}
%
% Default initializations: define the necessary counters, lengths,
@@ -477,42 +491,6 @@
\newif\ifLettrineRealHeight
% \end{macrocode}
%
-% Load a local config file if present in LaTeX’s search path.
-% \begin{macrocode}
-\InputIfFileExists{lettrine.cfg}
- {\typeout{Loading lettrine.cfg}}
- {\typeout{lettrine.cfg not found, using default values}}
-% \end{macrocode}
-%
-% \changes{v2.30}{2022/09/23}{Added global options to package
-% \pkg{lettrine}.}
-%
-% Global package options enable to override the default values given
-% above to generic parameters. These may be overriden again by
-% options passed to the |\lettrine[]{}{}| command.
-% \begin{macrocode}
-\DeclareOptionX{lines}[\value{DefaultLines}]{\setcounter{DefaultLines}{#1}}
-\DeclareOptionX{depth}[\value{DefaultDepth}]{\setcounter{DefaultDepth}{#1}}
-\DeclareOptionX{lhang}[]{\ifx#1\@empty\else
- \renewcommand*{\DefaultLhang}{#1}\fi}
-\DeclareOptionX{loversize}[]{\ifx#1\@empty\else
- \renewcommand*{\DefaultLoversize}{#1}\fi}
-\DeclareOptionX{lraise}[]{\ifx#1\@empty\else
- \renewcommand*{\DefaultLraise}{#1}}
-\DeclareOptionX{findent}[\the\DefaultFindent]{%
- \setlength{\DefaultFindent}{#1}}
-\DeclareOptionX{nindent}[\the\DefaultNindent]{%
- \setlength{\DefaultNindent}{#1}}
-\DeclareOptionX{slope}[\the\DefaultSlope]{\setlength{\DefaultSlope}{#1}}
-\DeclareOptionX{image}[true]{\csname LettrineImage#1\endcsname}
-\DeclareOptionX{grid}[true]{\csname LettrineOnGrid#1\endcsname}
-\DeclareOptionX{novskip}[\the\DiscardVskip]{\setlength{\DiscardVskip}{#1}}
-\DeclareOptionX{realheight}[true]{\csname LettrineRealHeight#1\endcsname}
-\DeclareOptionX{optionsfile}[]{\ifx#1\@empty\else
- \renewcommand*{\DefaultOptionsFile}{#1}\fi}
-\ProcessOptionsX
-% \end{macrocode}
-
% Then let’s define the necessary internal counters, lengths,
% and commands.
%
@@ -548,17 +526,95 @@
\newif\ifL@image
\newif\ifL@grid
\newif\ifL@realh
-\newif\ifL@selfref
% \end{macrocode}
%
-% Provide commands for the fonts used to typeset the two
-% mandatory arguments of |\lettrine|.
+% \begin{macro}{\LettrineTestString}
+% As some font designers apply optical correction to capitals C, G,
+% O, or Q (they are slightly taller than `T’ or `Z’), they are better
+% left out of |\LettrineTestString|. |EFTZ| should be a good default
+% for most fonts.
+%
+% \changes{v1.63}{2012/07/20}{(new) it defaults to
+% `ABCDEFGHIJKLMNOQPRSTUVWXYZ’. In previous versions height
+% computations were based on letter `X’ which might not exist
+% in some (rare) fonts. Pointed out by Raphaël Pinson.}
+%
+% \changes{v2.0}{2018/07/21}{changed from `ABCDEFGHIJKLMNOQPRSTUVWXYZ’
+% to `EFTZ’ as some capitals like C, G, O, Q or X might be slightly
+% taller (possible optical correction).}
+%
+% \begin{macrocode}
+\newcommand*{\LettrineTestString}{EFTZ}
+% \end{macrocode}
+% \end{macro}
+%
+% Load a local config file if present in LaTeX’s search path.
+% \begin{macrocode}
+\InputIfFileExists{lettrine.cfg}
+ {\typeout{Loading lettrine.cfg}}
+ {\typeout{lettrine.cfg not found, using default values}}
+% \end{macrocode}
+%
+% \changes{v2.30}{2022/09/23}{Added global options to package
+% \pkg{lettrine}.}
+%
+% \changes{v2.40}{2023/04/18}{Package options and \cs{lettrine} options
+% no longer depend on \pkg{xkeyval}, they are based on ltkeys.dtx.}
+%
+% Global package options enable to override the default values given
+% above to generic parameters. These may be overriden again by
+% options passed to the |\lettrine[]{}{}| command.
+% This code is based on \pkg{ltkeys.dtx}.
+% \begin{macrocode}
+\DeclareKeys[LettrineGlobal]
+ {
+ lines.code = \setcounter{DefaultLines}{#1} ,
+ depth.code = \setcounter{DefaultDepth}{#1} ,
+ lhang.store = \DefaultLhang ,
+ loversize.store = \DefaultLoversize ,
+ lraise.store = \DefaultLraise ,
+ findent.code = \setlength{\DefaultFindent}{#1} ,
+ nindent.code = \setlength{\DefaultNindent}{#1} ,
+ slope.code = \setlength{\DefaultSlope}{#1} ,
+ novskip.code = \setlength{\DiscardVskip}{#1} ,
+ image.if = LettrineImage ,
+ grid.if = LettrineOnGrid ,
+ realheight.if = LettrineRealHeight ,
+ refstring.default:n = \l@initial ,
+ refstring.store = \LettrineTestString ,
+ optionsfile.store = \DefaultOptionsFile
+ }
+\ProcessKeyOptions[LettrineGlobal]
+% \end{macrocode}
+%
+% Ditto for the |\lettrine| command’s options.
+%
+% \begin{macrocode}
+\DeclareKeys[LettrineLocal]
+ {
+ lines.code = \setcounter{L@lines}{#1} ,
+ depth.code = \setcounter{L@depth}{#1} ,
+ lhang.code = \renewcommand*{\L@hang}{#1} ,
+ loversize.code = \renewcommand*{\L@oversize}{#1} ,
+ lraise.code = \renewcommand*{\L@raise}{#1} ,
+ ante.code = \renewcommand*{\L@ante}{#1} ,
+ findent.code = \setlength{\L@Findent}{#1} ,
+ nindent.code = \setlength{\L@Nindent}{#1} ,
+ slope.code = \setlength{\L@slope}{#1} ,
+ novskip.code = \setlength{\L@novskip}{#1} ,
+ image.if = L@image ,
+ grid.if = L@grid ,
+ realheight.if = L@realh ,
+ refstring.default:n = \l@initial ,
+ refstring.store = \l@refstring
+ }
+% \end{macrocode}
%
% \changes{v2.21}{2018/08/28}{Code clean up, new commands
% \cs{computeL@height}, \cs{compute@fontsize}, \cs{setupL@lbox}.}
%
% \begin{macro}{\LettrineTextFont}
-% In French, small caps usually follow the dropped capital.
+% In French, small caps usually follow the initial.
% \begin{macrocode}
\newcommand*{\LettrineTextFont}{\scshape}
\newcommand*{\LettrineSecondString}{x}
@@ -657,41 +713,20 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\LettrineTestString}
+% \begin{macro}{\compute@fontsize}
% After executing |\computeL@height|, |\L@height| holds the exact
% height required for the dropped capital, nothing more is needed if
% the initial is a picture, otherwise we need to compute the matching
% |\fontsize|’s value. This is done by measuring the height of
% a ``reference’’ capital (i.e.\ either listed in
% |\LettrineTestString| or the initial itself).
-% As some font designers apply optical correction to capitals C, G,
-% O, or Q (they are slightly taller than `T’ or `Z’), they are better
-% left out of |\LettrineTestString|. |EFTZ| should be a good default
-% for most fonts.
-%
-% \changes{v1.63}{2012/07/20}{(new) it defaults to
-% `ABCDEFGHIJKLMNOQPRSTUVWXYZ’. In previous versions height
-% computations were based on letter `X’ which might not exist
-% in some (rare) fonts. Pointed out by Raphaël Pinson.}
-%
-% \changes{v2.0}{2018/07/21}{changed from `ABCDEFGHIJKLMNOQPRSTUVWXYZ’
-% to `EFTZ’ as some capitals like C, G, O, Q or X might be slightly
-% taller (possible optical correction).}
-%
-% \begin{macrocode}
-\newcommand*{\LettrineTestString}{EFTZ}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\compute@fontsize}
% This command compares the height of a ``reference’’ capital scaled
-% by |\fontsize| with argument |\L@height| to |\L@height| (the
+% by |\fontsize| with argument |\L@height|, to |\L@height| (the
% required height for the initial); both are converted into integers
-% (in sp) to compute a ratio |\L@factor|.
-% Up to v2.01, possible values for |\L@factor| were either 1 or any
-% value $\geq 1.1$ which was fine for almost every font but not
-% all (i.e.\ \file{cfr-initials}). Starting with v2.1, |\L@factor|
-% is computed more accurately by |\MFPdiv| from \file{minifp.sty}.
+% (in sp), to compute a ratio |\L@factor| (decimal number).
+% Then, the initial will be scaled by |\L@factor\L@height|.
+% Starting with v2.40, |\L@factor| is computed by |\fpeval|
+% from \file{xfp.sty}.
%
% \changes{v2.1}{2018/08/14}{Computation of \cs{L@factor} for
% \cs{fontsize} done by the minifp package.}
@@ -699,17 +734,20 @@
% \changes{v2.22}{2018/09/14}{Warn if \cs{fontsize} computation fails
% due to division by 0.}
%
-% The conditional |\ifL@selfref| is set to \lopt{true} by |\lettrine|
-% option \lopt{refstring}, then the initial itself is taken as
-% reference to compute |\fontsize|, this can be handy when working
-% with fancy fonts (i.e.\ cfr-initials, Yinit). In most cases, the
-% default is a better choice.
+% \changes{v2.40}{2023/04/18}{Computation of \cs{L@factor} for
+% \cs{fontsize} done by the xfp package.}
+%
+% If the option \lopt{refstring} is set in the |\lettrine| command
+% the initial itself is taken as reference to compute |\fontsize|,
+% this can be handy when working with fancy fonts
+% (i.e.\ cfr-initials, Yinit).
+% In most cases, the default is a better choice .
% \begin{macrocode}
\def\compute@fontsize{%
- \ifL@selfref
- \def\Lettrine@RefString{\l@refstring}%
- \else
+ \ifx\l@refstring\@empty
\def\Lettrine@RefString{\LettrineTestString}%
+ \else
+ \def\Lettrine@RefString{\l@refstring}%
\fi
\sbox{\@tempboxa}{\LettrineFontHook
\fontsize{\L@height}{\L@height}\selectfont
@@ -721,7 +759,7 @@
\def\L@factor{1}%
\else
\@tempcntb=\L@height
- \MFPdiv{\the\@tempcntb}{\the\@tempcnta}\L@factor
+ \def\L@factor{\fpeval{\the\@tempcntb/\the\@tempcnta}}%
\fi
}
% \end{macrocode}
@@ -746,7 +784,8 @@
%
% \begin{macro}{\LettrineImage}
% The following definition is for use with dropped capitals defined
-% as images: EPS, PDF, JPG, PNG files (see examples in demo-fr.tex).
+% as images: EPS, PDF, JPG, PNG files (see examples in
+% lettrine-demo-fr.tex).
% Its requires the |graphicx| package to be loaded in the
% preamble with |\usepackage{graphicx}|. The image’s height is
% computed just as in the standard case and passed to
@@ -778,26 +817,6 @@
% \end{macrocode}
% \end{macro}
%
-% Set up keyval initializations for the |\lettrine| command.
-%
-% \begin{macrocode}
-\define@key{L}{lines}{\setcounter{L@lines}{#1}}
-\define@key{L}{depth}{\setcounter{L@depth}{#1}}
-\define@key{L}{lhang}{\renewcommand*{\L@hang}{#1}}
-\define@key{L}{loversize}{\renewcommand*{\L@oversize}{#1}}
-\define@key{L}{lraise}{\renewcommand*{\L@raise}{#1}}
-\define@key{L}{ante}{\renewcommand*{\L@ante}{#1}}
-\define@key{L}{findent}{\setlength{\L@Findent}{#1}}
-\define@key{L}{nindent}{\setlength{\L@Nindent}{#1}}
-\define@key{L}{slope}{\setlength{\L@slope}{#1}}
-\define@key{L}{image}[true]{\csname L@image#1\endcsname}
-\define@key{L}{grid}[true]{\csname L@grid#1\endcsname}
-\define@key{L}{realheight}[true]{\csname L@realh#1\endcsname}
-\define@key{L}{novskip}{\setlength{\L@novskip}{#1}}
-\define@key{L}{refstring}[\l@initial]{\L@selfreftrue
- \def\l@refstring{#1}}
-% \end{macrocode}
-%
% \changes{v1.5}{2003/08/18}{\cs{LettrineOptionsFor} and
% \cs{LettrineWidth} added.}
%
@@ -805,23 +824,33 @@
% This command is to be used in an optional config file (the name
% of which is found in |\DefaultOptionsFile|) to set the values
% of parameters on a per character basis, for instance:\\
-% |\LettrineOptionsFor{A}{slope=0.6em, findent=-1em, nindent=0.6em}|\\
-% creates an internal command (|\l@A-keys| in this example),
-% which expands to the options given as second argument of
-% |\LettrineOptionsFor| for letter `A’.
+% |\LettrineOptionsFor{A}{slope=0.6em, findent=-1em, nindent=0.6em}|
%
% \begin{macrocode}
-\newcommand*{\LettrineOptionsFor}[2]{\@namedef{l@#1-keys}{#2}}
+\newcommand*{\LettrineOptionsFor}[2]{%
+ \edef\l@tmpa{#1}%
+% \end{macrocode}
+% Gobble potential color commands for the initial.
+% \begin{macrocode}
+ \begingroup
+ \def\color##1##{\l@color{##1}}%
+ \let\l@color\@gobbletwo
+ \def\textcolor##1##{\l@textcolor{##1}}%
+ \def\l@textcolor##1##2##3{##3}%
+ \xdef\l@tmpb{\l@initial}%
+ \endgroup
+ \ifx\l@tmpa\l@tmpb \SetKeys[LettrineLocal]{#2}\fi
+ }
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\lettrine}
-% Now let’s define |\lettrine|.
+% Now let’s define the |\lettrine| command.
%
% \begin{macrocode}
\def\lettrine{\@ifnextchar[\@lettrine{\@lettrine[]}}
\def\@lettrine[#1]#2#3{%
- \def\l@initial{#2}\let\l@refstring\l@initial
+ \def\l@initial{#2}\let\l@refstring\@empty
% \end{macrocode}
%
% \changes{v1.9}{2015/08/31}{\cs{theDefaultLines} changed to
@@ -846,11 +875,11 @@
\ifLettrineRealHeight\L@realhtrue\else\L@realhfalse\fi
% \end{macrocode}
%
-% The final initial size depends on the height of |\L@tbox|; the
-% content of |\L@tbox| depends on option |realheight|, so we have
-% to read |\lettrine|’s optional argument and initialise the
-% |\L@tbox| content now\footnote{Now means before eventually
-% reading the config file.}.
+% Then take the local options passed to |\lettrine| into account.
+% The content of |\L@tbox| depends on option |realheight|, so we
+% have to initialise the |\L@tbox| content now%
+% \footnote{Now means before eventually reading the per character
+% config file.}.
%
% \changes{v1.9}{2015/08/31}{Use the second mandatory
% argument of \cs{lettrine} or \cs{LettrineSecondString} (which
@@ -858,7 +887,7 @@
% the `realheight’ flag.}
%
% \begin{macrocode}
- \setkeys{L}{#1}%
+ \SetKeys[LettrineLocal]{#1}%
\sbox{\L@tbox}{\LettrineTextFont{\LettrineSecondString}}%
\ifL@realh
\def\@tempa{#3}%
@@ -867,7 +896,7 @@
{Empty second argument,\MessageBreak
ignoring option `realheight';}%
\else
- \sbox{\L@tbox}{\LettrineTextFont{#3}}%
+ \sbox{\L@tbox}{{\LettrineTextFont{#3}}}%
\fi
\fi
% \end{macrocode}
@@ -878,74 +907,39 @@
% global command |\l@LOKeys| which will expand to the list of
% options given by |\LettrineOptionsFor| for the current initial
% (defined by |#2|)…
+%
+% \changes{v2.40}{2023/04/18}{Options from the per letter config file
+% are now handled by LaTeX command \cs{SetKeys}.}
+%
+% Take the per character config file into account if any.
% \begin{macrocode}
\if\DefaultOptionsFile\relax
\else
- \begingroup
- \InputIfFileExists{\DefaultOptionsFile}%
- {}%
- {\PackageWarning{lettrine.sty}%
- {File \DefaultOptionsFile\space not found}%
- }%
-% \end{macrocode}
-% Gobble the colour commands, just keep the letter argument.
-% \begin{macrocode}
- \def\color##1##{\l@color{##1}}%
- \let\l@color\@gobbletwo
- \def\textcolor##1##{\l@textcolor{##1}}%
- \def\l@textcolor##1##2##3{##3}%
-% \end{macrocode}
-% Save the list of options relevant to the letter in |#2|
-% in |\l@LOKeys| (list is empty eventually).
-% \begin{macrocode}
- \expandafter\ifx\csname l@#2-keys\endcsname\relax
- \gdef\l@LOKeys{}%
- \else
- \xdef\l@LOKeys{\csname l@#2-keys\endcsname}%
- \fi
- \endgroup
-% \end{macrocode}
-% Now apply these options (the following code executes
-% |\setkeys{L}{\l@LOKeys}}| where |\l@LOKeys| is expanded,
-% see \file{keyval.sty}).
-% \begin{macrocode}
- \def\KV@prefix{KV@L@}%
- \let\@tempc\relax
- \expandafter\KV@do\l@LOKeys,\relax,
% \end{macrocode}
% As some parameters’ values \lopt{findent}, \lopt{nindent} and
% \lopt{slope} ---which do not influence the initial’s size--- may
% be given relative to |\LettrineWidth|, the |\L@lbox| has to be
% set up to evaluate |\LettrineWidth|.
-%
-% \changes{v2.21}{2018/08/28}{\lopt{findent} computation
-% relative to \cs{LettrineWidth} in \lopt{.cfl} files fixed;
-% thanks to Frank Mittelbach for raising the issue.}
-%
% \begin{macrocode}
\setupL@lbox
\setlength{\LettrineWidth}{\wd\L@lbox}%
- \def\KV@prefix{KV@L@}%
- \let\@tempc\relax
- \expandafter\KV@do\l@LOKeys,\relax,
+ \InputIfFileExists{\DefaultOptionsFile}%
+ {}%
+ {\PackageWarning{lettrine.sty}%
+ {File \DefaultOptionsFile\space not found}%
+ }%
% \end{macrocode}
% As local options prevail on those held in the config file, we
-% have to read local options again:
+% have to read again the optionnal argument of |\lettrine|.
% \begin{macrocode}
- \setkeys{L}{#1}%
+ \SetKeys[LettrineLocal]{#1}%
\fi
% \end{macrocode}
-% Options and optional config file have be taken into account, we
-% can now finally save the first mandatory argument of |\lettrine|
-% properly scaled into |\L@lbox|.
-% \begin{macrocode}
- \setupL@lbox
-% \end{macrocode}
-%
% \changes{v1.65}{2014/09/04}{Measure and store the initial’s
% final dimensions.}
% Store the initial’s final dimensions,
% \begin{macrocode}
+ \setupL@lbox
\setlength{\LettrineWidth}{\wd\L@lbox}%
\setlength{\LettrineHeight}{\ht\L@lbox}%
\setlength{\LettrineDepth}{\dp\L@lbox}%
@@ -954,7 +948,7 @@
% \changes{v2.0}{2018/07/21}{Add informations about targeted
% and actual height of the initial to the .log file.}
%
-% print some informations about accuracy to the log file,
+% and print some informations about accuracy to the log file,
% \begin{macrocode}
\begingroup
\def\IeC##1{##1}%
@@ -975,7 +969,7 @@
% \cs{LettrineTextFont}. Suggested by Philipp Lehman.}
%
% \begin{macrocode}
- \sbox{\L@tbox}{\LettrineTextFont{#3}}%
+ \sbox{\L@tbox}{{\LettrineTextFont{#3}}}%
% \end{macrocode}
%
% Start a new paragraph, skipping the necessary amount of space
@@ -1093,12 +1087,16 @@
% \changes{v1.64}{2013/03/14}{Remove \$ around \cs{smash}
% and add \cs{relax}. Bug pointed out by David Monniaux.
% Correction by Enrico Gregorio.}
+%
+% \changes{v2.40}{2023/04/18}{Replace \cs{usebox} by \cs{unhcopy}
+% for box \cs{L@tbox} to allow footnote calls and microtype action.}
+%
% Write the dropped capital into the left margin, and wrap
% the rest of paragraph around it.
% \begin{macrocode}
\smash{\llap{\mbox{\L@ante}\raisebox{\L@lraise}{\usebox{\L@lbox}}%
\hskip \the\L@Findent}}%
- \usebox{\L@tbox}%
+ \unhcopy\L@tbox\relax
% \end{macrocode}
%
%\changes{v2.22}{2019/03/30}{\cs{parshape} reset added in lists.}
@@ -1170,7 +1168,7 @@
%%
%% In case you want to set parameters for some letters
%% in file `optfile.cfl'
-%% \renewcommand{\DefaultOptionsFile}{optfile.cfl}
+%%\renewcommand{\DefaultOptionsFile}{optfile.cfl}
% \end{macrocode}
% \iffalse
%</cfg>
diff --git a/macros/latex/contrib/lettrine/lettrine.ins b/macros/latex/contrib/lettrine/lettrine.ins
deleted file mode 100644
index 4c0c40bc7b..0000000000
--- a/macros/latex/contrib/lettrine/lettrine.ins
+++ /dev/null
@@ -1,84 +0,0 @@
-%%
-%% Copyright (C) 1999-2022 Daniel Flipo.
-%%
-%% This file will generate fast loadable files and documentation
-%% driver files from the doc files in this package when run through
-%% LaTeX or TeX.
-%%
-%% This program can be distributed and/or modified under the terms
-%% of the LaTeX Project Public License either version 1.3c 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.3c or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-\def\batchfile{lettrine.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}
-
-\keepsilent
-\askforoverwritefalse
-
-\usedir{tex/latex/lettrine}
-
-\preamble
-
-This file is a generated file part of the lettrine package.
------------------------------------------------------------
-
-For the copyright see the source file `lettine.dtx'.
-
-This file can be distributed and/or modified under the terms
-of the LaTeX Project Public License either version 1.3c 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.3c 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 Daniel Flipo.
-
-Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
-
-\endpreamble
-
-\generate{\file{lettrine.sty}{\from{lettrine.dtx}{sty}}
- \nopreamble
- \file{lettrine.cfg}{\from{lettrine.dtx}{cfg}}
- }
-
-\Msg{***********************************************************}
-\Msg{*}
-\Msg{* To finish the installation you have to move}
-\Msg{* lettrine.sty, lettrine.cfg and the *.cfl files generated}
-\Msg{* from contrib.ins into a directory searched by TeX.}
-\Msg{*}
-\Msg{* If you want to change the default settings, uncomment the}
-\Msg{* lines you want in file lettrine.cfg and customize them.}
-\Msg{*}
-\Msg{* To produce the documentation run lettrine.dtx}
-\Msg{* through LuaLaTeX.}
-\Msg{*}
-\Msg{* Happy TeXing!}
-\Msg{*}
-\Msg{***********************************************************}
-
-\endbatchfile
-\endinput
diff --git a/macros/latex/contrib/pagecolor/README b/macros/latex/contrib/pagecolor/README
index 115461645c..8d1c8ee0c3 100644
--- a/macros/latex/contrib/pagecolor/README
+++ b/macros/latex/contrib/pagecolor/README
@@ -1,4 +1,4 @@
-README for pagecolor package, 2023-02-14, v1.2b
+README for pagecolor package, 2023-04-18, v1.2c
TABLE OF CONTENTS
@@ -46,7 +46,7 @@ LaTeX version 2005-12-01 or later.
==========
"pagecolor" is available on CTAN:
-https://www.ctan.org/pkg/pagecolor
+https://ctan.org/pkg/pagecolor
Also a ZIP file is provided that contains the files:
the manual (pagecolor.pdf), the example (pagecolor-example.tex),
@@ -66,7 +66,7 @@ Installation with ZIP file in TDS format
The ZIP file "pagecolor.tds.zip" contains the files
sorted in a TDS tree. Thus you can directly unpack the
ZIP file inside a TDS tree.
-See https://www.ctan.org/TDS-guidelines for an explanation
+See https://ctan.org/TDS-guidelines for an explanation
of TDS.
Example:
cd /...somewhere.../texmf
@@ -108,7 +108,6 @@ g) Copy the documentation files to
=====================
pagecolor loads other packages:
-- hardwrap
- kvoptions
- xcolor, if the color package has not been loaded before pagecolor
which again load other packages
@@ -129,13 +128,13 @@ they also should be loaded before pagecolor.
6 AUTHOR/MAINTAINER
-=====================
+===================
H.-Martin Münch
7 BUG REPORTS
-==============
+=============
A bug report should contain:
* Comprehensive problem description. This includes error or
@@ -162,6 +161,6 @@ Bug reports can be send to the maintainer:
8 KNOWN PROBLEMS
-=================
+================
* as yet: none. \ No newline at end of file
diff --git a/macros/latex/contrib/pagecolor/pagecolor-crop-example.pdf b/macros/latex/contrib/pagecolor/pagecolor-crop-example.pdf
index 52c21eb648..3a3a9f51ba 100644
--- a/macros/latex/contrib/pagecolor/pagecolor-crop-example.pdf
+++ b/macros/latex/contrib/pagecolor/pagecolor-crop-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagecolor/pagecolor-example.pdf b/macros/latex/contrib/pagecolor/pagecolor-example.pdf
index 996f485f6e..d9e8735460 100644
--- a/macros/latex/contrib/pagecolor/pagecolor-example.pdf
+++ b/macros/latex/contrib/pagecolor/pagecolor-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagecolor/pagecolor.dtx b/macros/latex/contrib/pagecolor/pagecolor.dtx
index 75e0beec2f..2180821b93 100644
--- a/macros/latex/contrib/pagecolor/pagecolor.dtx
+++ b/macros/latex/contrib/pagecolor/pagecolor.dtx
@@ -1,10 +1,10 @@
% \iffalse meta-comment
%
% File: pagecolor.dtx
-% Version: 2023-02-14 v1.2b
+% Version: 2023-04-18 v1.2c
% Info: Provides thepagecolor
%
-% Copyright (C) 2011 - 2023 by
+% Copyright © 2011 - 2023 by
% H.-Martin Münch <Martin dot Muench at Uni-Bonn dot de>
%
% This work may be distributed and/or modified under the
@@ -28,7 +28,7 @@
% pagecolor-example.tex, pagecolor-example.pdf.
%
% "pagecolor" is available on CTAN:
-% https://www.ctan.org/pkg/pagecolor
+% https://ctan.org/pkg/pagecolor
%
% Also a TDS.ZIP file is provided that contains all the files
% already sorted in a TDS tree:
@@ -49,7 +49,7 @@
\input docstrip.tex
\Msg{******************************************************************}
\Msg{* Installation *}
-\Msg{* Package: pagecolor 2023-02-14 v1.2b Provides thepagecolor (HMM)*}
+\Msg{* Package: pagecolor 2023-04-18 v1.2c Provides thepagecolor (HMM)*}
\Msg{******************************************************************}
\keepsilent
@@ -61,7 +61,8 @@
This is a generated file.
Project: pagecolor
-Version: 2023-02-14 v1.2b
+Version: 2023-04-18 v1.2c
+Info: Provides thepagecolor
Copyright (C) 2011 - 2023 by
H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de>
@@ -136,7 +137,7 @@ In memoriam
% \section{The documentation driver file}
%
% The next bit of code contains the documentation driver file for
-% \TeX , i.\,e., the file that will produce the documentation you
+% \TeX, i.\,e., the file that will produce the documentation you
% are currently reading. It will be extracted from this file by the
% \texttt{docstrip} programme. That is, run \LaTeX{} on \texttt{docstrip}
% and specify the \texttt{driver} option when \texttt{docstrip}
@@ -146,10 +147,10 @@ In memoriam
%<*driver>
\NeedsTeXFormat{LaTeX2e}[2022-11-01]
\ProvidesFile{pagecolor.drv}%
- [2023-02-14 v1.2b Provides thepagecolor (HMM)]
-\documentclass{ltxdoc}[2022/06/22]% v2.1i
-\usepackage{xcolor}[2022/06/12]% v2.14
-\usepackage{holtxdoc}[2019/12/09]% v0.30
+ [2023-04-18 v1.2c Provides thepagecolor (HMM)]
+\documentclass{ltxdoc}[2022/06/22]% v2.1i Standard LaTeX documentation class
+\usepackage{xcolor}[2022/06/12]% v2.14 LaTeX color extensions (UK)
+\usepackage{holtxdoc}[2019/12/09]% v0.30 Private additional ltxdoc support (HO)
\hypersetup{%
pdfsubject={Providing the thepagecolor command (HMM)},%
pdfkeywords={LaTeX, pagecolor, thepagecolor},%
@@ -200,15 +201,15 @@ In memoriam
% \DoNotIndex{\color,\gdef,\lipsum,\ifdefined,\IfPackageAtLeastTF,\IfFormatAtLeastTF}
% \DoNotIndex{\IfPackageLoadedTF,\ifx,\MessageBreak}
% \DoNotIndex{\Alternatives,\transparent,\newcommand,\verb,\listfiles,\newpage}
-% \DoNotIndex{\pagecolor@info,\pagecolor@info@noline,\pagecolor@warning,\pagecolor@warning@noline}
% \DoNotIndex{\AddToHook,\afterpage,\Alternatives,\DeclareStringOption,\holtxdoc,\hyperref}
% \DoNotIndex{\kvoptions,\NeedsTeXFormat,\Oberdiek,\OCG,\options}
+% \DoNotIndex{\PackageInfo,\PackageNoteNoLine,\PackageWarning,\PackageWarningNoLine}
% \DoNotIndex{\pagecolortmpa,\pagecolortmpb,\pagecolortmpc,\pagecolortmpd,\pagecolortmpe,\pagecolortmpf}
% \DoNotIndex{\ProcessKeyvalOptions,\ProvidesPackage,\renewcommand,\RequirePackage}
% \DoNotIndex{\setkeys,\SetupKeyvalOptions,\transparent,\@ifl@t@r,\fmtversion,\PackageError}
%
% \title{The \xpackage{pagecolor} package}
-% \date{2023-02-14 v1.2b}
+% \date{2023-04-18 v1.2c}
% \author{H.-Martin Münch\\\xemail{Martin.Muench at Uni-Bonn.de}}
%
% \maketitle
@@ -269,7 +270,6 @@ In memoriam
% |\restorebackgroundpagecolor| are provided.
%
% \section{Usage}
-%
% \indent Just load the package placing
% \begin{quote}
% |\usepackage[<|\textit{options}|>]{pagecolor}|
@@ -341,12 +341,12 @@ In memoriam
% \begin{description}
% \item[-] \xpackage{transparent} package: With it some object can be made
% (fully or partially) transparent,
-% \url{https://www.ctan.org/pkg/transparent}.
+% \url{https://ctan.org/pkg/transparent}.
%
% \item[-] OCG (Optional Content Groups): It allows for example
% to \textquotedblleft hide\textquotedblright{} something when
% printing the document while keeping the layout,
-% \url{https://www.ctan.org/search?phrase=ocg}.
+% \url{https://ctan.org/search?phrase=ocg}.
% \end{description}
%
% \bigskip
@@ -359,7 +359,6 @@ In memoriam
% \newpage
%
% \section{Example}
-%
% \begin{macrocode}
%<*example>
\NeedsTeXFormat{LaTeX2e}[2022-11-01]
@@ -384,7 +383,7 @@ In memoriam
% \usepackage[cam,center,a3]{crop}[2017/11/19]% 1.10
\usepackage[pagecolor={LightGoldenrod1},%
- nopagecolor={none}]{pagecolor}[2023-02-14]% v1.2b Provides thepagecolor (HMM)
+ nopagecolor={none}]{pagecolor}[2023-04-18]% v1.2c Provides thepagecolor (HMM)
\usepackage{afterpage}[2014/10/28]% v1.08 After-Page Package (DPC)
% The afterpage package is generally not needed,
@@ -401,7 +400,7 @@ In memoriam
\section*{Example for pagecolor}
This example demonstrates the use of package\newline
-\textsf{pagecolor}, v1.2b as of 2023-02-14 (HMM).\newline
+\textsf{pagecolor}, v1.2c as of 2023-04-18 (HMM).\newline
The used options were\newline
\verb|pagecolor={LightGoldenrod1}|\newline
(\verb|pagecolor={none}| would be the default), and\newline
@@ -505,7 +504,6 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% \StopEventually{}
%
% \section{The implementation}
-%
% We start off by checking that we are loading into \LaTeXe{} and
% announcing the name and version of this package.
%
@@ -515,8 +513,7 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
%
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[2022-11-01]
-\ProvidesPackage{pagecolor}[2023-02-14 v1.2b
- Provides thepagecolor (HMM)]
+\ProvidesPackage{pagecolor}[2023-04-18 v1.2c Provides thepagecolor (HMM)]
% \end{macrocode}
%
% A short description of the \xpackage{pagecolor} package:
@@ -526,18 +523,11 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
%% \restorepagecolor, \backgroundpagecolor, \newbackgroundpagecolor{...},
%% and \restorebackgroundpagecolor commands and a replacement for the
%% \nopagecolor command, if this is not available.
-% \end{macrocode}
-%
-% We want to wrap the messages nicely:
-%
-% \begin{macrocode}
-\RequirePackage{hardwrap}[2011/02/12]% v0.2 Hard wrap messages
-\GenerateLogMacros{package}{pagecolor}
-\@ifl@t@r\fmtversion{2022/11/01}{% would have understood
- % \IfFormatAtLeastTF{2022-11-01}{<true code>}{<false code>}
- }{\PackageError{pagecolor}{%
- Newer LaTeX format needed or older undolabl package%
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+
+\IfFormatAtLeastTF{2022/11/01}{\relax}{%
+ \PackageError{pagecolor}{Newer LaTeX format needed or older pagecolor package%
}{Needed LaTeX format version: 2022-11-01 or newer.\MessageBreak%
Found\space\space LaTeX format version: \fmtversion.\MessageBreak%
Either update your TeX distribution\MessageBreak%
@@ -563,15 +553,15 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
}{% xcolor not loaded
\IfPackageLoadedTF{color}{%
\RequirePackage{color}[2022-01-06]% v1.3d Standard LaTeX Color (DPC)
- }{\pagecolor@warning@noline{%
- The pagecolor package must be loaded after either %
- package color or after package xcolor (at your %
- option). Neither package was loaded before package %
- pagecolor. Loading of package xcolor will now be %
- tried automatically. \\%
- When the pagecolor package is used with option %
- pagecolor using a color requiring e.g. x11names %
- option for xcolor package, this will not work!%
+ }{\PackageWarningNoLine{pagecolor}{%
+ The pagecolor package must be loaded after either\MessageBreak%
+ package color or after package xcolor (at your\MessageBreak%
+ option). Neither package was loaded before package\MessageBreak%
+ pagecolor. Loading of package xcolor will now be\MessageBreak%
+ tried automatically.\MessageBreak%
+ When the pagecolor package is used with option\MessageBreak%
+ pagecolor using a color requiring e.g. x11names\MessageBreak%
+ option for xcolor package, this will not work%
}
}
\RequirePackage{xcolor}[2022/06/12]% v2.14 LaTeX color extensions (UK)
@@ -595,30 +585,28 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% \begin{macrocode}
\ifdefined\nopagecolor\relax
\else
- \pagecolor@info@noline{\string\nopagecolor\ is undefined!}
+ \PackageNoteNoLine{pagecolor}{\string\nopagecolor\ is undefined}
\def\pagecolortmpb{none}
\edef\pagecolortmpa{\pagecolor@nopagecolor}
\ifx\pagecolortmpa\pagecolortmpb
- \pagecolor@warning@noline{%
- Option nopagecolor=none requested but \string\nopagecolor\ %
- unknown: \\%
- By option nopagecolor the "color" to be used with %
- \string\nopagecolor\ %
- is set. The current value is "none" (maybe by default), %
- but command \string\nopagecolor\ is undefined. %
- Therefore the color cannot be "none". %
- Please change the option accordingly! - %
- As first aid nopagecolor is now set to white.%
+ \PackageWarningNoLine{pagecolor}{%
+ Option nopagecolor=none requested but \string\nopagecolor\space unknown:\MessageBreak%
+ By option nopagecolor the "color" to be used with \string\nopagecolor\MessageBreak%
+ is set. The current value is "none" (maybe by default),\MessageBreak%
+ but command \string\nopagecolor\ is undefined.\MessageBreak%
+ Therefore the color cannot be "none".\MessageBreak%
+ Please change the option accordingly! -\MessageBreak%
+ As first aid nopagecolor is now set to white%
}
\setkeys{pagecolor}{nopagecolor=white}
\fi
\edef\pagecolortmpa{\pagecolor@pagecolor}
\ifx\pagecolortmpa\pagecolortmpb\relax
- \pagecolor@warning@noline{%
- Option pagecolor=none (maybe by default) used, %
- but \string\nopagecolor\ is unknown. %
- Please use another option value; %
- \pagecolor@nopagecolor\ will be used now.%
+ \PackageWarningNoLine{pagecolor}{%
+ Option pagecolor=none (maybe by default) used,\MessageBreak%
+ but \string\nopagecolor\ is unknown.\MessageBreak%
+ Please use another option value;\MessageBreak%
+ \pagecolor@nopagecolor\ will be used now%
}
\setkeys{pagecolor}{pagecolor={\pagecolor@nopagecolor}}
\fi
@@ -645,14 +633,13 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
\ifdefined\nopagecolor\relax%
\nopagecolor%
\else%
- \pagecolor@warning{%
- pagecolor=none requested but \string\nopagecolor\ %
- unknown: \\%
- \string\pagecolor{none} was used, but the command %
- \string\nopagecolor\ is undefined. %
- Please use another color. \\%
- pagecolor=\pagecolor@nopagecolor\ \\%
- will be used now.%
+ \PackageWarning{pagecolor}{%
+ pagecolor=none requested but \string\nopagecolor\space unknown:\MessageBreak%
+ \string\pagecolor{none} was used, but the command\MessageBreak%
+ \string\nopagecolor\space is undefined.\MessageBreak%
+ Please use another color.\MessageBreak%
+ pagecolor=\pagecolor@nopagecolor\MessageBreak%
+ will be used now.\MessageBreak%
}%
\xdef\thepagecolor{\pagecolor@nopagecolor}%
\xdef\thepagecolornone{\pagecolor@nopagecolor}%
@@ -679,22 +666,23 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
\gdef\pagecolor@cl{0}
\IfPackageLoadedTF{crop}{% crop loaded
\gdef\pagecolor@cl{1}
- \pagecolor@info{\string\nopagecolor\space did not work with the crop package %
- 2017/11/19 v1.10. Using \\%
- \pagecolor@nopagecolor\ \\%
- as nopagecolor now.%
+ \PackageNoteNoLine{pagecolor}{%
+ \string\nopagecolor\space did not work with the crop package\MessageBreak%
+ 2017/11/19 v1.10. Using\MessageBreak%
+ \pagecolor@nopagecolor\MessageBreak%
+ as nopagecolor now%
}
\def\pagecolortmpb{none}
\edef\pagecolortmpa{\pagecolor@nopagecolor}
\ifx\pagecolortmpa\pagecolortmpb\relax
- \pagecolor@warning@noline{%
- Option nopagecolor=none requested but this does not work with the %
- crop package. By option nopagecolor the "color" to be used with %
- \string\nopagecolor\ is set. The current value is "none" (maybe by %
- default), but the crop package broke \string\nopagecolor . %
- Therefore the color cannot be "none". %
- Please change the option accordingly! %
- As first aid nopagecolor is now set to white.%
+ \PackageWarningNoLine{pagecolor}{%
+ Option nopagecolor=none requested but this does not work with the\MessageBreak%
+ crop package. By option nopagecolor the "color" to be used with\MessageBreak%
+ \string\nopagecolor\ is set. The current value is "none" (maybe by\MessageBreak%
+ default), but the crop package broke \string\nopagecolor .\MessageBreak%
+ Therefore the color cannot be "none".\MessageBreak%
+ Please change the option accordingly!\MessageBreak%
+ As first aid nopagecolor is now set to white%
}
\setkeys{pagecolor}{nopagecolor=white}
\fi
@@ -735,7 +723,7 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% There have been requests (via e-mail and at
% \url{https://tex.stackexchange.com/q/25137/6865}) to change the color of just one
% (or two) page(s) only, similar to |\newgeometry| and |\restoregeometry| of the
-% \xpackage{geometry} package (\url{https://www.ctan.org/pkg/geometry}).
+% \xpackage{geometry} package (\url{https://ctan.org/pkg/geometry}).
% Therefore |\newpagecolor| and |\restorepagecolor| are introduced (as suggested by
% \textsc{haoyun\_tex}):
% \begin{macrocode}
@@ -804,8 +792,8 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% Set the background/outer/physical page color:
% \begin{macrocode}
\xdef\CROP@stockcolor{\pagecolortmpe}%
- }{\pagecolor@info{\string\backgroundpagecolor\ does not do %
- anything when the crop package has not been loaded.}%
+ }{\PackageInfo{pagecolor}{\string\backgroundpagecolor\space does not do\MessageBreak%
+ anything when the crop package has not been loaded;\MessageBreak}%
% \end{macrocode}
% - except giving this information.
% \begin{macrocode}
@@ -823,8 +811,8 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
\IfPackageLoadedTF{crop}{%
\xdef\pagecolortmpf{\CROP@stockcolor}%
\backgroundpagecolor{#1}%
- }{\pagecolor@info{\string\newbackgroundpagecolor\ does not do %
- anything when the crop package has not been loaded.}%
+ }{\PackageInfo{pagecolor}{\string\newbackgroundpagecolor\space does not do\MessageBreak%
+ anything when the crop package has not been loaded;\MessageBreak}%
}%
}
@@ -834,8 +822,8 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% \begin{macrocode}
\newcommand{\restorebackgroundpagecolor}{%
\IfPackageLoadedTF{crop}{\xdef\CROP@stockcolor{\pagecolortmpf}}{%
- \pagecolor@info{\string\newbackgroundpagecolor\ does not do %
- anything when the crop package has not been loaded.}}%
+ \PackageInfo{pagecolor}{\string\newbackgroundpagecolor\space does not do\MessageBreak%
+ anything when the crop package has not been loaded;\MessageBreak}}%
}
% \end{macrocode}
@@ -851,22 +839,22 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% crop not loaded before pagecolor, but maybe afterwards:
\IfPackageLoadedTF{crop}{% crop indeed loaded afterwards.
\gdef\pagecolor@cl{1}%
- \pagecolor@info{\string\nopagecolor\space did not work with the crop package %
- 2017/11/19 v1.10. Using \\%
- \pagecolor@nopagecolor\ \\%
- as nopagecolor now.%
+ \PackageInfo{pagecolor}{\string\nopagecolor\space did not work with the crop package\MessageBreak%
+ 2017/11/19 v1.10. Using\MessageBreak%
+ \pagecolor@nopagecolor\MessageBreak%
+ as nopagecolor now.\MessageBreak%
}%
\def\pagecolortmpb{none}%
\edef\pagecolortmpa{\pagecolor@nopagecolor}%
\ifx\pagecolortmpa\pagecolortmpb\relax%
- \pagecolor@warning@noline{%
- Option nopagecolor=none requested but this does not work with %
- the crop package. By option nopagecolor the "color" to be used %
- with \string\nopagecolor\ is set. The current value is "none" %
- (maybe by default), but the crop package broke %
- \string\nopagecolor . Therefore the color cannot be "none". %
- Please change the option accordingly! %
- As first aid nopagecolor is now set to white.%
+ \PackageWarningNoLine{pagecolor}{%
+ Option nopagecolor=none requested but this does not work with\MessageBreak%
+ the crop package. By option nopagecolor the "color" to be used\MessageBreak%
+ with \string\nopagecolor\space is set. The current value is "none"\MessageBreak%
+ (maybe by default), but the crop package broke\MessageBreak%
+ \string\nopagecolor . Therefore the color cannot be "none".\MessageBreak%
+ Please change the option accordingly!\MessageBreak%
+ As first aid nopagecolor is now set to white%
}%
\setkeys{pagecolor}{nopagecolor=white}%
\fi%
@@ -884,73 +872,69 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
%
% \section{Installation}
% \subsection{Downloads}
-% Everything is available at \url{https://www.ctan.org},
+% Everything is available at \url{https://ctan.org},
% but may need additional packages themselves.\\
%
% \DescribeMacro{pagecolor.dtx}
% For unpacking the |pagecolor.dtx| file and constructing the documentation
% it is required:
% \begin{description}
-% \item[-] \TeX Format \LaTeXe{} 2022-11-01 or newer: \url{https://www.CTAN.org}
+% \item[-] \TeX-format \LaTeXe{} 2022-11-01 or newer: \url{https://www.CTAN.org/}
%
% \item[-] document class \xclass{ltxdoc}, 2022/06/22, v2.1i,
-% \url{https://www.ctan.org/pkg/ltxdoc}
+% \url{https://ctan.org/pkg/ltxdoc}
%
% \item[-] package \xpackage{holtxdoc}, 2019/12/09, v0.30,
-% \url{https://www.ctan.org/pkg/holtxdoc}
+% \url{https://ctan.org/pkg/holtxdoc}
% \end{description}
%
% \DescribeMacro{pagecolor.sty}
-% The |pagecolor.sty| for \LaTeXe{} (i.\,e. each document using
+% The |pagecolor.sty| for \LaTeXe{} (i.\,e.~each document using
% the \xpackage{pagecolor} package) requires:
% \begin{description}
-% \item[-] \TeX{} Format \LaTeXe{} 2022-11-01 or newer, \url{https://www.CTAN.org}
-%
-% \item[-] package \xpackage{hardwrap}, 2011/02/12, v0.2,
-% \url{https://www.ctan.org/pkg/hardwrap}
+% \item[-] \TeX{}-format \LaTeXe{} 2022-11-01 or newer, \url{https://www.CTAN.org/}
%
% \item[-] package \xpackage{kvoptions}, 2022-06-15, v3.15,
-% \url{https://www.ctan.org/pkg/kvoptions}
+% \url{https://ctan.org/pkg/kvoptions}
+%
+% \item[-] package \xpackage{pagecolor}, 2023-04-18, v1.2c,
+% \url{https://ctan.org/pkg/pagecolor}\\
+% (Because you are reading the documentation for the
+% \xpackage{pagecolor} package, it can be assumed that you already
+% have some version of it~-- is it the current one?)
% \end{description}
% and either
% \begin{description}
% \item[-] package \xpackage{xcolor}, 2022/06/12, v2.14,
-% \url{https://www.ctan.org/pkg/xcolor}
+% \url{https://ctan.org/pkg/xcolor}
% \end{description}
% or
% \begin{description}
% \item[-] package \xpackage{color}, 2022-01-06, v1.3d,
-% \url{https://www.ctan.org/pkg/color} (from the\\
+% \url{https://ctan.org/pkg/color} (from the\\
% \xpackage{graphics} package bundle).
% \end{description}
%
% \DescribeMacro{pagecolor-example.tex}
-% The |pagecolor-example.tex| requires the same file as all
-% documents using the \xpackage{pagecolor} package, i.\,e.
-% \begin{description}
-% \item[-] package \xpackage{pagecolor}, 2023-02-14, v1.2b,
-% \url{https://www.ctan.org/pkg/pagecolor}\\
-% (Well, it is the example file for this package, and because you are reading the
-% documentation for the \xpackage{pagecolor} package, it~can be assumed that you already
-% have some version of it -- is it the current one?)
-% \end{description}
-% and additionally:
+% The |pagecolor-example.tex| requires the same files as all
+% documents using the \xpackage{pagecolor} package
+% (see preceding paragraph |pagecolor.sty|) and additionally:
% \begin{description}
% \item[-] class \xpackage{article}, 2022/07/02, v1.4n, from \xpackage{classes}:\\
-% \url{https://www.ctan.org/pkg/classes}
+% \url{https://ctan.org/pkg/classes}
%
% \item[-] package \xpackage{xcolor}, 2022/06/12, v2.14,
-% \url{https://www.ctan.org/pkg/xcolor}\\
+% \url{https://ctan.org/pkg/xcolor}\\
% This package would not be needed for the use of just base colors only,
% the \xpackage{color} package would be sufficient for that.
%
% \item[-] package \xpackage{afterpage}, 2014/10/28, v1.08,
-% \url{https://www.ctan.org/pkg/afterpage}\\
+% \url{https://ctan.org/pkg/afterpage}\\
% This package is only needed for demonstrating the\\
% |\newpagecolor{somecolor}\afterpage{\restorepagecolor}| construct.
%
% \item[-] package \xpackage{lipsum}, 2021-09-20, v2.7,
-% \url{https://www.ctan.org/pkg/lipsum}\\
+% \url{https://ctan.org/pkg/lipsum}\\
% This package is only needed for some blind text.
% \end{description}
%
@@ -961,10 +945,10 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% there are listed (newer versions might be available):
% \begin{description}
% \item[-] package \xpackage{transparent}, 2022-10-27, v1.5,\\
-% \url{https://www.ctan.org/pkg/transparent}
+% \url{https://ctan.org/pkg/transparent}
%
% \item[-] OCG (Optional Content Groups),\\
-% \url{https://www.ctan.org/search?phrase=ocg}
+% \url{https://ctan.org/search?phrase=ocg}
% \end{description}
%
% \DescribeMacro{Oberdiek}
@@ -984,7 +968,7 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
%
% \DescribeMacro{Münch}
% A hyperlinked list of my (other) packages can be found at
-% \url{https://www.ctan.org/author/muench-hm}.\\
+% \url{https://ctan.org/author/muench-hm}.\\
%
% \subsection{Package, unpacking TDS}
% \paragraph{Package.} This package is available on \url{https://www.CTAN.org}.
@@ -1014,7 +998,7 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
%
% \bigskip
%
-% \noindent For required other packages, please see the preceding subsection.
+% \noindent For required other packages please see the preceding subsection.
%
% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
% \docstrip{} archive. The files are extracted by running the
@@ -1149,7 +1133,8 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% \subsection{Compiling the example}
%
% The example file, \textsf{pagecolor-example.tex}, can be compiled via\\
-% |(pdf)latex pagecolor-example.tex|.
+% |(pdf)latex pagecolor-example.tex|\\
+% and needs at least two compilation runs.
%
% \section{Acknowledgements}
%
@@ -1221,7 +1206,7 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% \item \XeLaTeX{} and others now do know |\nopagecolor|.
% \item Package \xpackage{crop} has been updated, but |\nopagecolor|
% still applies to the physical background sheet instead of the logical foreground area.
-% \item Now using the \xpackage{hardwrap} package.
+% \item Now using the \xpackage{hardwrap} package. [Removed in v1.2c again.]
% \end{Version}
% \begin{Version}{2022-11-27 v1.2a}
% \item Now also handling the background/outer/physical page color,
@@ -1230,7 +1215,11 @@ was restored by \verb|\restorebackgroundpagecolor| (if crop is used).
% \begin{Version}{2023-02-14 v1.2b}
% \item Example now also handling |\newbackgroundpagecolor| and |\restorebackgroundpagecolor|
% when the \xpackage{crop} package is used.
-% \item Fixed a missing v in version number.
+% \item Fixed a missing |v| in the version number.
+% \end{Version}
+% \begin{Version}{2023-04-18 v1.2c}
+% \item No longer using the \xpackage{hardwrap} package.
+% \item Bug fix: There was an |undolabl| where a |pagecolor| belongs.
% \item Documentation and README updates.
% \end{Version}
% \end{History}
diff --git a/macros/latex/contrib/pagecolor/pagecolor.pdf b/macros/latex/contrib/pagecolor/pagecolor.pdf
index 02a3d46784..b94d9a4e87 100644
--- a/macros/latex/contrib/pagecolor/pagecolor.pdf
+++ b/macros/latex/contrib/pagecolor/pagecolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/prettytok/DEPENDS.txt b/macros/latex/contrib/prettytok/DEPENDS.txt
index dd4fa25323..a575b01313 100644
--- a/macros/latex/contrib/prettytok/DEPENDS.txt
+++ b/macros/latex/contrib/prettytok/DEPENDS.txt
@@ -1 +1,2 @@
precattl
+l3keys2e
diff --git a/macros/latex/contrib/prettytok/README b/macros/latex/contrib/prettytok/README
index 531d9833dd..421737ab54 100644
--- a/macros/latex/contrib/prettytok/README
+++ b/macros/latex/contrib/prettytok/README
@@ -1,6 +1,5 @@
prettytok -- Pretty-print token list
-Pretty-print token lists to HTML file for debugging purposes.
-Open the file in any browser to view the result.
+Pretty-print token lists for debugging purposes.
Can be used to replace |\tl_analysis_show:n|.
@@ -11,7 +10,7 @@ Report bugs at https://github.com/user202729/TeXlib
========
-Copyright 2022 user202729
+Copyright 2022-2023 user202729
This work may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this license or
@@ -24,4 +23,4 @@ This work has the LPPL maintenance status `maintained'.
The Current Maintainer of this work is user202729.
-This work consists of the files prettytok.sty, prettytok.lua, prettytok_template.html.
+This work consists of the files prettytok.sty, prettytok.lua, prettytok_template.html, prettytok-decode-8bit.py, prettytok-test.tex.
diff --git a/macros/latex/contrib/prettytok/prettytok-decode-8bit.py b/macros/latex/contrib/prettytok/prettytok-decode-8bit.py
new file mode 100755
index 0000000000..231cf84bd9
--- /dev/null
+++ b/macros/latex/contrib/prettytok/prettytok-decode-8bit.py
@@ -0,0 +1,12 @@
+#!/bin/python3
+"""
+A hack to allow decoding for example ^^[ to the proper escape sequence.
+"""
+
+import sys
+import re
+def replace_8bit(match_: re.Match) -> str:
+ return chr(ord(match_.group(1))^0x40)
+if __name__ == '__main__':
+ for line in sys.stdin:
+ sys.stdout.write(re.sub(r"\^\^(.)", replace_8bit, line))
diff --git a/macros/latex/contrib/prettytok/prettytok-test.tex b/macros/latex/contrib/prettytok/prettytok-test.tex
new file mode 100644
index 0000000000..cc3ad7e8fd
--- /dev/null
+++ b/macros/latex/contrib/prettytok/prettytok-test.tex
@@ -0,0 +1,17 @@
+\documentclass{article}
+\usepackage{prettytok}
+
+\prettyN{123{4 5}\6}
+\prettyN{#&^_:}
+\edef\mytest{\prettyeN{\error}}
+
+\prettyN {very long long long long long long long long long long long long long long argument \argument\argument\test123456}
+\prettyeN {very long long long long long long long long long long long long long long argument \argument\argument\test123456}
+
+\ExplSyntaxOn
+\pretty:n {#&^_:}
+\ExplSyntaxOff
+
+\begin {document}
+\prettyW abc \prettystop
+\end {document}
diff --git a/macros/latex/contrib/prettytok/prettytok.lua b/macros/latex/contrib/prettytok/prettytok.lua
index a0aba07243..0abb6595f0 100644
--- a/macros/latex/contrib/prettytok/prettytok.lua
+++ b/macros/latex/contrib/prettytok/prettytok.lua
@@ -6,8 +6,8 @@ end
-- public API :: once the package is loaded, this holds the .tok value of the frozen relax token
prettyprint_frozenrelaxtok=nil
-local function prettyprint_one_arg(tokenlist)
+local function prettyprint_one_arg(tokenlist)
if looks_like_token(tokenlist) then
return prettyprint_one_arg({tokenlist})
end
@@ -46,8 +46,9 @@ local function prettyprint_one_arg(tokenlist)
s=s.."csfrozenrelax(),"
else
s=s.."cs("
- for j=1, #t.csname do
- s=s..t.csname:byte(j)..","
+ -- TODO
+ for _, c in utf8.codes(t.csname) do
+ s=s..c..","
end
s=s.."),"
end
@@ -58,41 +59,192 @@ local function prettyprint_one_arg(tokenlist)
return s
end
-local function check_file_opened()
- -- if it's \relax then get_macro() also returns nil
- if token.get_macro("pretty_check_already_init:") == nil then
- error("Output file not initialized!")
- end
+local function get_output_format()
+ return token.get_macro "_prettytok_mode"
end
local function get_file_number()
- check_file_opened()
- return token.get_mode(token.create("__prettyh_file"))
+ return token.get_mode(token.create("_prettytok_file"))
end
function prettyprint(...)
- local prettyfilenumber=get_file_number()
-
- local s="print_tl("
+ local output_format=get_output_format()
local args={...}
- for i=1, select("#", ...) do
- s=s..prettyprint_one_arg(args[i])
- end
+ if output_format=="html" then
+ local prettyfilenumber=get_file_number()
+
+ local s="print_tl("
+ for i=1, select("#", ...) do
+ s=s..prettyprint_one_arg(args[i])
+ end
+
+ texio.write(prettyfilenumber, s..")//</script><script>\n")
+ else
+ assert(output_format=="term-8bit" or output_format=="term-shell")
+ texio.write_nl("")
+
+ local content=""
+ local content_len=0 -- only count visible content
+
+ local function typeout_content()
+ print(content)
+ content=""
+ content_len=0
+ end
+
+ local function append_content(s) -- only call this on content that takes visible width. For example don't use this to set color
+ assert(type(s)=="string")
+ content=content..s
+ content_len=content_len+utf8.len(s)
+ end
+
+ append_content(token.get_macro "prettytermprefix")
+ local wraplimit=tonumber(token.get_macro "prettytermwraplimit")
+
+ ---- color
+
+ --[[
+ local gray ='\x1b[90m'
+ local red ='\x1b[31m'
+ local green ='\x1b[38;5;121m'
+ local yellow='\x1b[93m'
+ local white ='\x1b[0m'
+ ]]
- texio.write(prettyfilenumber, s..")//</script><script>\n")
+ local gray =token.get_macro "_prettytok_gray"
+ local red =token.get_macro "_prettytok_red"
+ local green =token.get_macro "_prettytok_green"
+ local yellow=token.get_macro "_prettytok_yellow"
+ local white =token.get_macro "_prettytok_white"
+
+ local current_color=white
+ local function setcolor(c)
+ if current_color~=c then
+ current_color=c
+ content=content..c
+ end
+ end
+
+ local prettytermprefixmore=token.get_macro "prettytermprefixmore"
+
+ local function check_wrap()
+ if content_len>wraplimit then
+ if current_color~=white then
+ content=content..white
+ end
+ print(content)
+
+ content=""
+ content_len=0
+ append_content(prettytermprefixmore)
+ if current_color~=white then
+ content=content..current_color
+ end
+ end
+ end
+
+ local function prettyprint_term_one_arg(tokenlist)
+ if looks_like_token(tokenlist) then
+ return prettyprint_term_one_arg({tokenlist})
+ end
+
+
+ local function print_term_char(code)
+ if code<27 then
+ if code==9 then
+ append_content("⇥")
+ else
+ append_content("^^"..string.char(code+64))
+ if code==13 or code==10 then
+ typeout_content()
+ append_content(prettytermprefixmore) -- color the prefix with the same color
+ end
+ end
+ elseif code==32 then
+ append_content("␣")
+ else
+ append_content(utf8.char(code)) -- unlike TeX implementation currently this does not show ^^⟨hex digits⟩ representation
+ end
+ end
+
+
+ local function printstring(t)
+ -- this is just for debugging/convenience purpose. If the item is a string instead of a token...
+ t=tostring(t)
+ for _, c in utf8.codes(t) do
+ if c==32 then
+ setcolor(gray)
+ append_content("␣")
+ else
+ setcolor(white)
+ append_content(utf8.char(c))
+ end
+ end
+ end
+
+ if type(tokenlist)~="table" then
+ -- user give a string (or something similar). Print it as detokenized characters
+ printstring(tokenlist)
+ check_wrap()
+
+ else
+
+ -- normal print of tokenlist
+ for i=1, #tokenlist do
+ local t=tokenlist[i]
+ if not looks_like_token(t) then
+ printstring(t)
+ check_wrap()
+ elseif t.csname==nil then
+ setcolor(({left_brace=red, right_brace=red, math_shift=red, tab_mark=red, mac_param=red, sup_mark=red, sub_mark=red, spacer=gray, letter=green, other_char=white})[t.cmdname])
+ print_term_char(t.mode)
+ check_wrap()
+ else
+ if t.active then
+ setcolor(yellow)
+ print_term_char(utf8.codepoint(t.csname))
+ elseif t.tok==prettyprint_frozenrelaxtok then
+ setcolor(red)
+ append_content("\\relax ")
+ else
+ setcolor(yellow)
+ append_content("\\")
+ for _, c in utf8.codes(t.csname) do
+ print_term_char(c)
+ end
+ append_content(" ")
+ end
+ check_wrap()
+ end
+ end
+
+ end
+ end
+
+ for i=1, select("#", ...) do
+ prettyprint_term_one_arg(args[i])
+ end
+
+ setcolor(white)
+
+ typeout_content()
+ end
end
function prettyprintw()
- check_file_opened()
+ local callback=token.scan_toks()
local extra=token.scan_toks()
local s={}
+ local last_token
while true do
- local n=token.get_next()
- s[#s+1]=n
- if n.csname=="prettystop" then break end
+ last_token=token.get_next()
+ if last_token.csname=="prettystop" then break end
+ s[#s+1]=last_token
+ callback[#callback+1]=last_token
end
- prettyprint(extra, s)
- token.put_next(s)
+ prettyprint(extra, s) -- exclude the \prettystop token
+ callback[#callback+1]=last_token
+ token.put_next(callback)
end
end
diff --git a/macros/latex/contrib/prettytok/prettytok.pdf b/macros/latex/contrib/prettytok/prettytok.pdf
index 5b10ffaf19..87fda692ff 100644
--- a/macros/latex/contrib/prettytok/prettytok.pdf
+++ b/macros/latex/contrib/prettytok/prettytok.pdf
Binary files differ
diff --git a/macros/latex/contrib/prettytok/prettytok.sty b/macros/latex/contrib/prettytok/prettytok.sty
index 3acea38c62..d12abc727d 100644
--- a/macros/latex/contrib/prettytok/prettytok.sty
+++ b/macros/latex/contrib/prettytok/prettytok.sty
@@ -1,5 +1,5 @@
% File: prettytok.sty
-% Copyright 2022 user202729
+% Copyright 2022-2023 user202729
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this license or
@@ -12,33 +12,60 @@
%
% The Current Maintainer of this work is user202729.
-\ProvidesExplPackage{prettytok}{2022/07/08}{0.0.1}{Pretty-print token list}
+\ProvidesExplPackage{prettytok}{2023-04-18}{0.2.0}{Pretty-print token list}
\RequirePackage{precattl}
+\RequirePackage{l3keys2e}
-% ======== check tl_analysis bug.
-\msg_new:nnn {prettytok} {tl-analysis-bug}
- {
- Because~of~an~tl-analysis~bug~(see~https://github.com/latex3/latex3/issues/1073),~functions~will~not~be~usable~inside~tl-analysis~functions!~
- Upgrade~your~LaTeX~version,~or~
- define~macro~"prettyignoretlanalysisbug"~before~loading~the~package~to~ignore~this~error.
- }
+\keys_define:nn{prettytok}{
+ mode.choices:nn={ term-8bit, term-shell, html }{
+ \str_set:Nx \_prettytok_mode {\l_keys_choice_tl}
+ },
+ mode.initial:n = { term-8bit },
-\ifdefined \prettyignoretlanalysisbug
- \relax
-\else
-\begingroup
- \tl_set:Nn \__test {}
+ ignore-tlanalysis-bug.bool_set:N=\_prettytok_ignore_tlanalysis_bug,
+
+ term-shell-decode-cmd.tl_set:N=\_prettytok_term_shell_decode_cmd,
+ term-shell-decode-cmd.initial:n={},
+ term-shell-decode-cmd-print.bool_set:N=\_prettytok_term_shell_decode_cmd_print,
+
+ html-file-name.tl_set:N=\_prettytok_html_file_name,
+ html-file-name.initial:x={pretty-\jobname.html},
+ html-refresh-strategy.tl_set:N=\_prettytok_html_refresh_strategy,
+ html-refresh-strategy.initial:n=4,
+ html-refresh-duration.tl_set:N=\_prettytok_html_refresh_duration,
+ html-refresh-duration.initial:n=1000,
+
+ term-prefix.tl_set:N=\prettytermprefix,
+ term-prefix.initial:n={>~},
+ term-prefix-more.tl_set:N=\prettytermprefixmore,
+ term-prefix-more.initial:n={>~ ..~},
+ term-wrap-limit.tl_set:N=\prettytermwraplimit,
+ term-wrap-limit.initial:n=70,
+
+}
+\ProcessKeysOptions{prettytok}
+
+
+% ======== check tl_analysis bug.
+\bool_if:NF \_prettytok_ignore_tlanalysis_bug {
+ \tl_set:Nn \_prettytok_test {}
\tl_analysis_map_inline:nn {ab} {
\tl_analysis_map_inline:nn {cd} {
- \tl_put_right:Nx \__test {#1 ##1 .}
+ \tl_put_right:Nx \_prettytok_test {#1 ##1 .}
}
}
- \tl_if_eq:NnF \__test {ac.ad.bc.bd.} {
+ \tl_if_eq:NnF \_prettytok_test {ac.ad.bc.bd.} {
+ \msg_new:nnn {prettytok} {tl-analysis-bug}
+ {
+ Because~of~an~tl-analysis~bug~(see~https://github.com/latex3/latex3/issues/1073),~
+ functions~will~not~be~usable~inside~tl-analysis~functions!~
+ Upgrade~your~LaTeX~version,~or~
+ pass-option~"ignore-tlanalysis-bug"~to~ignore~this~error.
+ }
\msg_error:nn {prettytok} {tl-analysis-bug}
}
-\endgroup
-\fi
+}
% ======== load Lua module.
\sys_if_engine_luatex:T{
@@ -49,7 +76,6 @@
}
% ======== main code start.
-
\cs_generate_variant:Nn \exp_args:NNn {NNx}
\cs_generate_variant:Nn \iow_open:Nn {NV}
\cs_generate_variant:Nn \exp_args:NNn {NNV}
@@ -59,90 +85,241 @@
\cs_generate_variant:Nn \use:N {c}
\cs_generate_variant:Nn \str_map_inline:nn {xn}
\cs_generate_variant:Nn \tl_build_put_right:Nn {Nx}
+\cs_generate_variant:Nn \tl_build_put_right:Nn {NV}
\cs_generate_variant:Nn \iow_now:Nn {NV}
-\iow_new:N \_prettytok_file
-\ior_new:N \_prettytok_input_template_file
+\str_if_eq:VnTF \_prettytok_mode {html} {
+ \iow_new:N \_prettytok_file
+ \ior_new:N \_prettytok_input_template_file
+
+ \iow_open:NV \_prettytok_file \_prettytok_html_file_name
-\exp_args:NNx \providecommand \prettyfilename {pretty-\jobname.html}
-\providecommand \prettyrefreshstrategy {4}
-\providecommand \prettyrefreshduration {1000}
+ \precattl_exec:n{
+ % write the template
+ \ior_open:Nn \_prettytok_input_template_file {prettytok_template.html}
+ \ior_str_map_variable:NNn \_prettytok_input_template_file \_prettytok_line {
+ \str_replace_all:Nnn \_prettytok_line {\cO\^^I} {~} % workaround: XeTeX prints literal tab character as ^^I which obviously breaks JavaScript
+ \iow_now:NV \_prettytok_file \_prettytok_line
+ }
+ \ior_close:N \_prettytok_input_template_file
-\msg_new:nnn {prettytok} {already-initialized} {Output~file~is~already~initialized!}
+ % refresh strategy
+ \iow_now:Nx \_prettytok_file {set_refresh_strategy(\_prettytok_html_refresh_strategy,\_prettytok_html_refresh_duration)}
+ \cs_new_protected:Npn \pretty:n #1 {
-% See also Lua function: local function check_file_opened()
+ % ======== the actual content. Collect to one \write to put them on the same line (also maybe for efficiency???)
+ \tl_build_begin:N \_prettytok_content
+ \tl_build_put_right:Nn \_prettytok_content {print_tl(}
+ \tl_analysis_map_inline:nn {#1} {
+ % by documentation of \tl_analysis_map_inline:nn: #1=token, #2=char code, #3=catcode
+ \int_compare:nNnTF {##2} = {-1} {
+ % token is control sequence
+ \tl_if_eq:onTF {##1} {\cFrozenRelax} {
+ \tl_build_put_right:Nn \_prettytok_content {csfrozenrelax(),}
+ } {
+ \tl_build_put_right:Nn \_prettytok_content {cs(}
+ \tl_if_eq:xoF {\use:c {}} {##1} {
+ \str_map_inline:xn {\exp_after:wN \cs_to_str:N ##1} { % side note, must use str here to preserve spaces
+ \tl_build_put_right:Nx \_prettytok_content {\int_eval:n {`####1},}
+ }
+ }
+ \tl_build_put_right:Nn \_prettytok_content {),}
+ }
+ }
+ {
+ % token is not control sequence
+ \tl_build_put_right:Nn \_prettytok_content {token(##2, "##3"),}
+ }
+ }
+ \tl_build_put_right:Nn \_prettytok_content {)//</script><script>}
+ \tl_build_end:N \_prettytok_content
+ \iow_now:NV \_prettytok_file \_prettytok_content
+ }
+ }
-\global\let \pretty_check_already_init: \relax
+} {
+ \str_if_eq:VnTF \_prettytok_mode {term-shell} {
+ \newwrite \_prettytok_typeout_stream
+ \tl_if_empty:NTF \_prettytok_term_shell_decode_cmd {
+ \sys_get_shell:nnN {kpsewhich~ prettytok-decode-8bit.py} {\cctab_select:N \c_other_cctab} \_prettytok_term_shell_decode_cmd
+ } {
+ \begingroup
+ \escapechar=-1~
+ \str_gset:NV \_prettytok_term_shell_decode_cmd \_prettytok_term_shell_decode_cmd
+ \endgroup
+ }
+ \bool_if:NT \_prettytok_term_shell_decode_cmd_print {
+ \typeout{^^JThe~ value~ of~ term-shell-decode-cmd~ is:~ [[[\_prettytok_term_shell_decode_cmd]]]^^J}
+ }
+ \immediate \openout \_prettytok_typeout_stream = {|\_prettytok_term_shell_decode_cmd}
+ } {
+ \int_const:Nn \_prettytok_typeout_stream {128} % 16 works except on LuaLaTeX
+ }
-\precattl_exec:n {
- \cs_new_protected:Npn \_prettyinit_unchecked: {
- \global\protected\def \pretty_check_already_init: {\msg_error:nn {prettytok} {already-initialized}}
- \iow_open:NV \_prettytok_file \prettyfilename
+ \precattl_exec:n{
+ \str_gset:Nn \_prettytok_gray {\cO\^^[[90m}
+ \str_gset:Nn \_prettytok_red {\cO\^^[[31m}
+ \str_gset:Nn \_prettytok_green {\cO\^^[[38;5;121m} % this is the color vim use for green on my machine. Anyway~
+ %\str_gset:Nn \_prettytok_green {\cO\^^[[92m}
+ \str_gset:Nn \_prettytok_yellow {\cO\^^[[93m}
+ %\str_gset:Nn \_prettytok_white {\cO\^^[[0m} % i.e. the default
+ \str_gset:Nn \_prettytok_white {\cO\^^[[97m} % vim terminal has a quirk that if a line wraps, the status at the start of the line is considered "default" for that line, so need to explicitly specify color as white
- % write the template
- \begingroup
- \ior_open:Nn \_prettytok_input_template_file {prettytok_template.html}
- \ior_str_map_variable:NNn \_prettytok_input_template_file \_prettytok_line {
- \str_replace_all:Nnn \_prettytok_line {\cO\^^I} {~} % workaround: XeTeX prints literal tab character as ^^I which obviously breaks JavaScript
- \iow_now:NV \_prettytok_file \_prettytok_line
- }
- \ior_close:N \_prettytok_input_template_file
- \endgroup
+ % https://stackoverflow.com/q/4842424/5267751
- % refresh strategy
- \iow_now:Nx \_prettytok_file {set_refresh_strategy(\prettyrefreshstrategy,\prettyrefreshduration)}
+ \cs_new_protected:Npn \_prettytok_setcolor:N #1 {
+ \ifx \_prettytok_current_color #1
+ \else
+ \let \_prettytok_current_color #1
+ \tl_build_put_right:NV \_prettytok_content #1
+ \fi
}
- \cs_new_protected:Npn \prettyinit: {
- \pretty_check_already_init:
- \_prettyinit_unchecked:
+ % caller should call \_prettytok_check_wrap: when useful.
+ \cs_new_protected:Npn \_prettytok_term_prepare_print_char:n #1 {
+ \_prettytok_append_content:x {
+ \ifnum #1 < 27 ~
+ \ifnum #1 = 9 ~ % tab
+ \cO{⇥}
+ \else
+ \cO{\^\^} \char_generate:nn {#1+64} {12}
+ \bool_if:nT {\int_compare_p:nNn {#1} = {13} || \int_compare_p:nNn {#1} = {10}} {
+ \cO{^^J} \prettytermprefixmore
+ }
+ \fi
+ \else
+ \ifnum #1 = 32 ~
+ \cO{␣}
+ \else
+ \bool_if:nTF {\int_compare_p:nNn {#1} > {32} && \int_compare_p:nNn {#1} < {127}} { % printable ASCII character
+ \char_generate:nn {#1} {12}
+ } {
+ \ifnum #1 < "100 ~
+ ^ ^
+ \expandafter \@gobble \exp:w \exp_end_continue_f:w \int_to_hex:n {"100+#1} % convert to hex, exactly 2 digits (by adding 100 then delete first '1')
+ \else
+ \ifnum #1 < "10000 ~
+ ^ ^ ^ ^
+ \expandafter \@gobble \exp:w \exp_end_continue_f:w \int_to_hex:n {"10000+#1} % convert to hex, exactly 4 digits
+ \else
+ ^ ^ ^ ^ ^ ^
+ \expandafter \@gobble \exp:w \exp_end_continue_f:w \int_to_hex:n {"1000000+#1} % convert to hex, exactly 6 digits
+ \fi
+ \fi
+ }
+ \fi
+ \fi
+ }
}
-}
+ \cs_generate_variant:Nn \_prettytok_term_prepare_print_char:n {x}
-\cs_new_eq:NN \prettyinit \prettyinit:
+ \int_new:N \_prettytok_content_len
+ % only call this on content that takes visible width. For example don't use this to set color
+ \cs_new_protected:Npn \_prettytok_append_content:n #1 {
+ \tl_build_put_right:Nn \_prettytok_content {#1}
+ \int_add:Nn \_prettytok_content_len {\str_count:n {#1}}
+ }
-\precattl_exec:n {
+ \cs_generate_variant:Nn \_prettytok_append_content:n {V,x}
+
+ \cs_new_protected:Npn \_prettytok_check_wrap: {
+ \int_compare:nNnT {\_prettytok_content_len} > {\prettytermwraplimit} {
+ % be careful to not color the \prettytermprefixmore part
+ \ifx \_prettytok_current_color \_prettytok_white
+ \else
+ \tl_build_put_right:NV \_prettytok_content \_prettytok_white
+ \fi
+ \tl_build_end:N \_prettytok_content
+ \_prettytok_typeout_content:
+
+ \tl_build_begin:N \_prettytok_content
+ \int_zero:N \_prettytok_content_len
+ \_prettytok_append_content:V \prettytermprefixmore
+ \ifx \_prettytok_current_color \_prettytok_white
+ \else
+ \tl_build_put_right:NV \_prettytok_content \_prettytok_current_color
+ \fi
+ }
+ }
+ % \_prettytok_content must have been called \tl_build_end:N on before this function is called
+ \sys_if_engine_luatex:TF {
+ \cs_new_protected:Npn \_prettytok_typeout_content: {
+ \directlua{
+ texio.write_nl("")
+ print(token.get_macro("_prettytok_content"))
+ } % https://tex.stackexchange.com/questions/64462/lualatex-print-directlua-env-and-newlinehttps://tex.stackexchange.com/questions/64462/lualatex-print-directlua-env-and-newline
+ }
+ } {
+ \cs_new_protected:Npn \_prettytok_typeout_content: {
+ \immediate\write\_prettytok_typeout_stream{\_prettytok_content}
+ }
+ }
\cs_new_protected:Npn \pretty:n #1 {
+ \tl_build_begin:N \_prettytok_content
+ \int_zero:N \_prettytok_content_len
+ \_prettytok_append_content:V \prettytermprefix
- % ======== first write out the preamble if it isn't written. Only do once.
- \ifx \pretty_check_already_init: \relax \prettyinit: \fi
+ \let \_prettytok_current_color \_prettytok_white
- % ======== the actual content. Collect to one \write to put them on the same line (also maybe for efficiency???)
- \tl_build_begin:N \_prettytok_content
- \tl_build_put_right:Nn \_prettytok_content {print_tl(}
\tl_analysis_map_inline:nn {#1} {
% by documentation of \tl_analysis_map_inline:nn: #1=token, #2=char code, #3=catcode
\int_compare:nNnTF {##2} = {-1} {
% token is control sequence
\tl_if_eq:onTF {##1} {\cFrozenRelax} {
- \tl_build_put_right:Nn \_prettytok_content {csfrozenrelax(),}
+ \_prettytok_setcolor:N \_prettytok_red
+ \_prettytok_append_content:n { \cO\\relax~ }
} {
- \tl_build_put_right:Nn \_prettytok_content {cs(}
+ \_prettytok_setcolor:N \_prettytok_yellow
+ \_prettytok_append_content:n { \cO\\ }
\tl_if_eq:xoF {\use:c {}} {##1} {
\str_map_inline:xn {\exp_after:wN \cs_to_str:N ##1} { % side note, must use str here to preserve spaces
- \tl_build_put_right:Nx \_prettytok_content {\int_eval:n {`####1},}
+ \_prettytok_term_prepare_print_char:x {\int_eval:n {`####1}}
}
}
- \tl_build_put_right:Nn \_prettytok_content {),}
+ \_prettytok_append_content:n {~}
+ \_prettytok_check_wrap: % here we do not wrap in the middle of a csname
}
}
{
% token is not control sequence
- \tl_build_put_right:Nn \_prettytok_content {token(##2, "##3"),}
+ \if ##3 B % letter
+ \_prettytok_setcolor:N \_prettytok_green
+ \else
+ \if ##3 A % spacer
+ \_prettytok_setcolor:N \_prettytok_gray
+ \else
+ \if ##3 D % active
+ \_prettytok_setcolor:N \_prettytok_yellow
+ \else
+ \if ##3 C % other cat
+ \_prettytok_setcolor:N \_prettytok_white
+ \else % something else.
+ \_prettytok_setcolor:N \_prettytok_red
+ \fi
+ \fi
+ \fi
+ \fi
+
+ \_prettytok_term_prepare_print_char:n {##2}
+ \_prettytok_check_wrap:
}
}
- \tl_build_put_right:Nn \_prettytok_content {)//</script><script>}
+ \_prettytok_setcolor:N \_prettytok_white
\tl_build_end:N \_prettytok_content
- \iow_now:NV \_prettytok_file \_prettytok_content
+
+ \_prettytok_typeout_content:
+ }
}
+
}
+
% ======== Lua expandable variant.
\sys_if_engine_luatex:T {
\cs_new:Npn \prettye:n #1 {
@@ -150,65 +327,84 @@
}
\cs_new:Npn \prettye:w {
- \directlua{prettyprintw()} {}
+ \directlua{prettyprintw()} {} {}
}
\cs_new:Npn \prettye:nw #1 {
- \directlua{prettyprintw()} {#1}
+ \directlua{prettyprintw()} {#1} {}
+ }
+ \cs_new:Npn \prettye:nnw #1 #2 {
+ \directlua{prettyprintw()} {#1} {#2}
}
}
-\cs_new_protected:Npn \pretty:w #1 \prettystop {
- \pretty:n {#1} #1 \prettystop
-}
+% ======== w variant.
+\cs_new_protected:Npn \pretty:w { \pretty_aux:w \empty }
+\cs_new_protected:Npn \pretty_aux:w #1 \prettystop {
+ \pretty:o { #1 } % use o-expansion to remove the \empty
+ #1 \prettystop
+}
\cs_new:Npn \prettystop {}
+% ======== other variants.
\cs_generate_variant:Nn \pretty:n {x, o, V}
-\let \pretty:N \pretty:n
+\cs_new_eq:NN \pretty:N \pretty:n
+\cs_generate_variant:Nn \pretty:N {c}
-% ======== normal-catcode alias
-\let\prettyN\pretty:n
-\let\prettyX\pretty:x
-\let\prettyO\pretty:o
-\let\prettyV\pretty:V
-\let\prettyeN\prettye:n
-\let\prettyeW\prettye:w
+\cs_new_protected:Npn \prettythenrun:n #1 {
+ \pretty:n {running~#1}
+ #1
+ \pretty:n {done}
+}
+\cs_new_protected:Npn \prettythenrun:w #1 \prettythenrunstop {
+ \prettythenrun:n {#1}
+}
-\cs_generate_variant:Nn \pretty:N {c}
+\cs_new_protected:Nn \prettyshow:N { \pretty:o {\meaning #1} }
+\cs_generate_variant:Nn \prettyshow:N {c}
% ======== generate \pretty:nn, \pretty:nnn, etc.
\begingroup
- \def \__tmp:NN #1 #2 { % #1: example \pretty:nn, #2: example \pretty:n (the latter has one more n than the former)
+ \def \_prettytok_tmp:NN #1 #2 { % #1: example \pretty:nn, #2: example \pretty:n (the latter has one more n than the former)
\cs_new_protected:Npn #1 ##1 ##2 { #2 {##1 ##2} }
}
- \cs_generate_variant:Nn \__tmp:NN {cc}
+ \cs_generate_variant:Nn \_prettytok_tmp:NN {cc}
- \def \__tmp {pretty:n}
+ \def \_prettytok_tmp {pretty:n}
\int_step_inline:nn {9} {
- \__tmp:cc {\__tmp n} {\__tmp}
- \tl_put_right:Nn \__tmp {n}
+ \_prettytok_tmp:cc {\_prettytok_tmp n} {\_prettytok_tmp}
+ \tl_put_right:Nn \_prettytok_tmp {n}
}
\sys_if_engine_luatex:T {
- \def \__tmp:NN #1 #2 { % #1: example \prettye:nn, #2: example \prettye:n (the latter has one more n than the former)
+ \def \_prettytok_tmp:NN #1 #2 { % #1: example \prettye:nn, #2: example \prettye:n (the latter has one more n than the former)
\cs_new:Npn #1 ##1 ##2 { #2 {##1 ##2} }
}
- \def \__tmp {prettye:n}
+ \def \_prettytok_tmp {prettye:n}
+ \int_step_inline:nn {9} {
+ \_prettytok_tmp:cc {\_prettytok_tmp n} {\_prettytok_tmp}
+ \tl_put_right:Nn \_prettytok_tmp {n}
+ }
+
+ \def \_prettytok_tmp:NN #1 #2 { % #1: example \prettye:nnnw, #2: example \prettye:nnw (the latter has one more n than the former)
+ \cs_new:Npn #1 ##1 ##2 ##3 { #2 {##1} {##2 ##3} } % here ##1 is the callback (first ⟨n⟩), ##2 etc. are the additional-print things
+ }
+ \def \_prettytok_tmp {prettye:nn}
\int_step_inline:nn {9} {
- \__tmp:cc {\__tmp n} {\__tmp}
- \__tmp:cc {\__tmp nw} {\__tmp w}
- \tl_put_right:Nn \__tmp {n}
+ \_prettytok_tmp:cc {\_prettytok_tmp nw} {\_prettytok_tmp w}
+ \tl_put_right:Nn \_prettytok_tmp {n}
}
}
\endgroup
-
-\cs_new_protected:Nn \prettyshow:N {
- \exp_args:No \pretty:n {\meaning #1}
-}
-\cs_generate_variant:Nn \prettyshow:N {c}
+% ======== normal-catcode alias
+\let\prettyN\pretty:n
+\let\prettyX\pretty:x
+\let\prettyO\pretty:o
+\let\prettyV\pretty:V
+\let\prettyW\pretty:w
+\let\prettyeN\prettye:n
+\let\prettyeW\prettye:w
\let\prettyshowN\prettyshow:N
\let\prettyshowC\prettyshow:c
-
-
diff --git a/macros/latex/contrib/prettytok/prettytok.tex b/macros/latex/contrib/prettytok/prettytok.tex
index 96878ec457..ddd77dc494 100644
--- a/macros/latex/contrib/prettytok/prettytok.tex
+++ b/macros/latex/contrib/prettytok/prettytok.tex
@@ -1,14 +1,19 @@
%! TEX program = lualatex
-\ProvidesFile{prettytok.tex} [2022/07/08 v0.0.1 ]
+\ProvidesFile{prettytok.tex} [2023/04/18 v0.2.0 ]
+\RequirePackage{fvextra}
\documentclass{l3doc}
+\usepackage[svgnames]{xcolor}
\EnableCrossrefs
\CodelineIndex
-\RecordChanges
+\fvset{breaklines=true,gobble=0,tabsize=4,frame=single,numbers=left,numbersep=3pt}
+\AtBeginDocument{\DeleteShortVerb\"}
+\MakeOuterQuote{"}
+\usepackage{cleveref}
\begin{document}
+\hfuzz=1pt
\GetFileInfo{\jobname.tex}
-\DoNotIndex{\newcommand,\newenvironment}
-\title{\textsf{prettytok} --- Pretty-print token lists\thanks{This file
+\title{\pkg{prettytok} --- Pretty-print token lists\thanks{This file
describes version \fileversion, last revised \filedate.}
}
\author{user202729%
@@ -18,110 +23,300 @@
\maketitle
-\changes{v0.0.0}{2022/05/18}{First public release}
-
\begin{abstract}
-Pretty-print token lists to HTML file for debugging purposes.
-Open the file in any browser to view the result.
+Pretty-print token lists for debugging purposes.
Can be used to replace |\tl_analysis_show:n|.
\end{abstract}
+\section{Motivation}
+
+\TeX/\LaTeX's default mechanism for debug-printing -- that is, the following:
+\begin{itemize}
+ \item |\showtokens{...}|,
+ \item |\show...|,
+ \item |\typeout{\unexpanded{...}}|,
+ \item |\tl_show:n|,
+ \item etc.
+\end{itemize}
+has a few limitations:
+
+\begin{itemize}
+ \item |\show| and similar is considered an error and stops the \TeX\ run. (this point is partially fixable, see the package writer's question \url{https://tex.stackexchange.com/q/621919/250119})
+ \item If there's some unprintable character in the output (for example, |^^J|, |^^M|, |^^I| -- literal tab character), it's not easy to distinguish between them.
+ \item If some token has unexpected catcode (most commonly, letter versus other), it's not easy to distinguish as well.
+ \item They does not work in expansion-only context.
+
+ (apart from |\msg_expandable_error:nn|, but this one suffers from the first problem as well)
+\end{itemize}
+
+|\tl_analysis_show:n| attempts to fix the third problem, but is very, very verbose and does not fix the other problems.
+
+This package aims to fix all of them.
+
+(although the expandable debug printing functions are \LuaTeX-only.)
+
+And some more additional (expandable in \LuaTeX) functions to inspect the content of the input stream at a particular moment in time.
+
+
\section{Usage}
+\subsection{A complete example}
+
+For a full example, the following code, which prints several things, both using the \LaTeXe\ interface
+and using the \pkg{expl3}-style interface, using both expandable and unexpandable command (the former requires \LuaTeX, as mentioned in \ref{subsec:expandable-interface}):
+\VerbatimInput{prettytok-test.tex}
+The corresponding output (in the current version) is:
+\begingroup%
+\ExplSyntaxOn
+
+\definecolor{myyellow}{RGB}{173, 174, 0}
+\definecolor{mygreen}{RGB}{52, 174, 0}
+
+\let \\ \textbackslash
+\def \cmd#1{\textcolor{myyellow}{\textbf{\textbackslash}#1}}
+\def \spec#1 {\textcolor{red}{#1}}
+\def \letr#1 {\textcolor{mygreen}{#1}}
+\setlength{\parindent}{0pt}
+\frenchspacing % no double space after dot
+
+\catcode`␣\active \def␣{\textbf{\textcolor{gray!60}{\char32}}}
+
+\ExplSyntaxOff
+\small%
+\obeylines%
+\texttt{
+> 123\spec\{4␣5\spec\}\cmd{6}
+> \spec{\#\&\textasciicircum\_}:
+> \cmd{error}
+> \letr{very␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long}
+> .. \letr{␣long␣argument}␣\cmd{argument} \cmd{argument} \cmd{test} 123456
+> \letr{very␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long␣long}
+> .. \letr{␣long␣argument}␣\cmd{argument} \cmd{argument} \cmd{test} 123456
+> \spec{\#\&\textasciicircum}\letr{\_:}
+> \letr{abc}␣
+}\endgroup
+
+\subsection{Loading the package}
+
+\begin{verbatim}
+\usepackage{prettytok}
+\end{verbatim}
+
+\subsection{Options}
+
+There are several options that can be passed to the package.
+
+Usage example: |\usepackage[mode=term-shell]{prettytok}|.
+
+\begin{variable}{mode=}
+ Specify the working mode of the package, that is, where the output is displayed. It can either be:
+\begin{itemize}
+ \item |term-8bit|: this is the default.
+
+ Assume XTerm-compatible system, output to the terminal.
+
+ Requires |-8bit| option on engines other than \LuaTeX, see the following link: \\
+ \url{https://tex.stackexchange.com/q/168460/250119}.
+
+ Besides, this drops the distinction between the catcode of some tokens (for example \verb|{}$#&^_| are all shown as the same color as "special catcode"),
+ which is available in the tooltip in the HTML version.
+
+ This might work on Windows, although the package writer have not tested it.
+ Refer to \url{https://stackoverflow.com/q/2048509/5267751}
+ and \url{https://superuser.com/q/413073/577463}.
+
+ \item |term-shell|:
+ To output colored text to the terminal, |--8bit| flag is needed otherwise the terminal escape codes will be
+ changed to |^^[| etc.
+ A workaround, using \TeX\ Live's behavior when the file name has the form \verb+|...+,
+ is provided with this option.
+
+ Requires |--shell-escape| flag. May not be very reliable.
+
+ Refer to \url{https://tex.stackexchange.com/a/670572/250119} for more details.
+
+ \item |html|: output to a HTML file named for example |pretty-abc.html| (although this can be customized,
+ refer to \hyperref[opt:html-file-name]{|html-file-name=|}%
+ ) if the main \TeX\ file is named |abc.tex|.
+
+ Open the file in any browser to view the result.
+
+ Using this option, the output will not be cluttered with the traceback/other \TeX\ default output.
+
+By default, the output refreshes whenever the \TeX\ file is recompiled. The behavior
+can be customized with \hyperref[opt:html-refresh-strategy]{|html-refresh-strategy=|} and \hyperref[opt:html-refresh-duration]{|html-refresh-duration=|}.
+
+\end{itemize}
+\end{variable}
+
+Currently, it's not supported to print the debug output to the PDF itself,
+because if the \TeX\ program stops with error / has some error that corrupts the PDF output, the output will even with corrupted more by the debug print.
+
+\subsubsection{HTML configuration}
+
+These options are only meaningful if |mode=html|.
+
+\begin{variable}{html-file-name=}\label{opt:html-file-name}
+ The output file name. Defaults to |pretty-|\meta{jobname}|.html|, as mentioned above.
+\end{variable}
+
+\begin{variable}{html-refresh-strategy=}\label{opt:html-refresh-strategy}
+ The auto-refresh strategy. Allowed values are 0-4. 0 is no refresh. \\
+ Which value works best depends on the particular browser. \\
+ If you're using Google Chrome to view the output HTML,
+ invoking the browser from the command-line with |--allow-file-access-from-files| flag may be useful.
+\end{variable}
+
+\begin{variable}{html-refresh-duration=}\label{opt:html-refresh-duration}
+ The duration between two consecutive refresh check, in milliseconds. Defaults to 1000.
+\end{variable}
+
+\subsubsection{Terminal configuration}
+
+These options are only meaningful if |mode=term-8bit| or |mode=term-shell|.
+
+\begin{variable}{term-prefix=,term-prefix-more=}
+ Strings consist of prefixes to be output before each terminal line.
+
+ This might be useful for log-filtering/output-filtering tools such as |texfot| to recognize the output line.
+
+ Defaults to \verb*|> | and \verb*|> .. | respectively.
+\end{variable}
+
+\begin{variable}{term-wrap-limit=}
+ Estimated line length limit. Set this to a little smaller than your terminal width.
+
+ Defaults to 70.
+\end{variable}
+
+\begin{variable}{term-shell-decode-cmd=}
+ Only meaningful with |mode=term-shell|.
+
+ Normally you would not need to explicitly pass this option, unless something does not work.
+
+ By default, a file named \file{prettytok-decode-8bit.py}
+ should be included in your \TeX\ distribution, and
+ the package runs |kpsewhich prettytok-decode-8bit.py| to find the location
+ of that file in order to execute it.
+ However, if by any reason this does not work, you can specify an explicit command such as
+ |python3 /full/path/to/prettytok-decode-8bit.py| to override it.
+
+ Passing blank value invokes the default behavior (runs |kpsewhich|).
+
+ Alternatively, you can also choose to explicitly pass the path in order to save a call to |kpsewhich|
+ to make the program a bit faster.
+
+ If you \emph{really} want to, special characters may be passed by prefixing them with |\|.
+ \DisableQuotes
+ But |\"| won't work anyway (as far as the package writer know, this is impossible in non-\LuaTeX\ engines).
+ \EnableQuotes
+ \begin{texnote} The path is interpreted by detokenizing the value in |escapechar=-1|. \end{texnote}
+\end{variable}
+
+\begin{variable}{term-shell-decode-cmd-print=}
+ If |mode=term-shell|, print out the command correspond to |term-shell-decode-cmd| on the console, for debugging purpose.
+
+ Example output:
+ |The value of term-shell-decode-cmd is: [[[./prettytok-decode-8bit.py]]]|
+\end{variable}
+
+
\subsection{Main function}
\begin{function}{\pretty:n,\pretty:x,\pretty:o,\pretty:V}
\begin{syntax}
\cs{pretty:n} \Arg{token list}
\end{syntax}
Print the content of \meta{token list}.
+
+ This is a simple replacement of the functions above. (|\tl_analysis_show:n|, etc.)
\end{function}
-\begin{function}{\pretty:N,\pretty:c}
+\begin{function}{\pretty:w}
\begin{syntax}
- \cs{pretty:N} \meta{token}
- \cs{pretty:c} \Arg{control sequence name}
+ \cs{pretty:w} \meta{token list} \cs{prettystop}
\end{syntax}
- Print \meta{token}.
-
- This function is not very useful. Usually it's preferable to use |\pretty:V| to print a token list variable's value,
- or |\prettyshow:N| to print a control sequence's meaning.
+ Print the content of \meta{token list}.
+
+The purpose of this function is that
+it can be inserted "anywhere" in order to \emph{inspect the input stream}
+without affecting how the function works.
+
+Note that the input stream will be tokenized and has catcode frozen.
+
+For example
+\begin{verbatim}
+\ExplSyntaxOn
+\def \f #1 {\prettye:w 789}
+\f 123456 \prettystop
+\end{verbatim}
+will print out |78923456|.
+
+For now, it must be brace-balanced. Use \cs{prettye:w} instead if this is a problem.
\end{function}
-\begin{function}{\prettyinit:}
+\begin{function}[EXP]{\prettystop}
\begin{syntax}
- \cs{prettyinit:}
+ \cs{prettystop}
\end{syntax}
- Do necessary initialization.
-
- This should be called right after the package is loaded, after setting the configuration variables described below.
+ Only used as a delimiter for |:w| functions. For convenience, this function is defined to do nothing.
\end{function}
-\subsection{Expandable interface (\LuaTeX\ only)}
-
-\cs{prettyinit:} must be called before calling the functions in this section.
-
-\begin{function}[EXP]{\prettye:n}
+\begin{function}{\prettyshow:N,\prettyshow:c}
\begin{syntax}
- \cs{prettye:n} \Arg{token list}
+ \cs{prettyshow:N} \meta{token}
+ \cs{prettyshow:c} \Arg{control sequence name}
\end{syntax}
- Print the token list, similar to \cs{pretty:n}, but is fully expandable.
+ Show the meaning of a |N|-type argument.
\end{function}
-\begin{function}[EXP]{\prettye:w}
+\begin{function}{\pretty:N,\pretty:c}
\begin{syntax}
- \cs{prettye:w} \meta{tokens} \cs{prettystop}
+ \cs{pretty:N} \meta{token}
+ \cs{pretty:c} \Arg{control sequence name}
\end{syntax}
- Print the tokens until \cs{prettystop} is seen. Useful for inspecting the content of the input stream.
+ Print \meta{token}.
- Note that the input stream will be tokenized and has catcode frozen. Use with care.
+ It may also be useful to use |\pretty:V| to print a token list variable's value,
+ or |\prettyshow:N| to print a control sequence's meaning.
\end{function}
-\subsection{Lua programming interface}
-
-\cs{prettyinit:} must also be called before calling the functions in this section.
-
-\begin{function}{prettyprint}
+\begin{function}{\pretty:nn, \pretty:nnn}
\begin{syntax}
- |prettyprint(|\meta{content}|)|
+ \cs{pretty:nn} \Arg{token list} \Arg{token list}
+ \cs{pretty:nnn} \Arg{token list} \Arg{token list} \Arg{token list}
\end{syntax}
- Print the content, which should be a table of token objects.
-
- For convenience, you can pass multiple arguments. Strings are also supported.
+ Print multiple token lists. Its effect is similar to multiple consecutive calls to \cs{pretty:n}.
\end{function}
-\subsection{View result}
-The result is printed to a HTML file named |pretty-|\meta{jobname}|.html| by default.
-Open the file in any browser to view the result.
-Note that the HTML file will not be touched if nothing is printed, as such it's encouraged to add a line such as |\pretty:n {start}| right after loading the file.
-Why HTML file?
-\begin{itemize}
- \item If the \TeX\ program stops with error / has some error that corrupts the PDF output, the output will even with corrupted more by the debug print.
- \item Printing to the console is extremely limited (difficult syntax highlighting/scrolling/line wrapping), and most likely cluttered with the traceback/other \TeX\ default output.
+\subsection{Expandable interface (\LuaTeX\ only)}
+\label{subsec:expandable-interface}
- (nevertheless, there might be plan to support output to console with syntax highlighting later.)
- \item Output to another \TeX\ file to be compiled works as well; however it's necessary to run another instance of |latexmk| (or other tool used to compile \TeX\ code)
- and compiling \TeX\ file takes longer than loading a HTML file.
-\end{itemize}
+\begin{function}[EXP]{\prettye:n}
+ \begin{syntax}
+ \cs{prettye:n} \Arg{token list}
+ \end{syntax}
+ Print the token list, similar to \cs{pretty:n}, but is fully expandable.
+\end{function}
-By default, the output refreshes whenever the \TeX\ file is recompiled. The behavior
-can be customized with \cs{prettyrefreshstrategy} and \cs{prettyrefreshduration}.
+\begin{function}[EXP]{\prettye:w}
+ \begin{syntax}
+ \cs{prettye:w} \meta{tokens} \cs{prettystop}
+ \end{syntax}
+ Print the tokens until \cs{prettystop} is seen. Useful for inspecting the content of the input stream.
-\subsection{Additional functions}
+ As a debugging tool, it's possible to execute |\everyeof{\prettystop}| to avoid runaway printing in weird catcode environments.
-There are also these functions, for convenience.
+ Currently some implementation details (it can be fixed, but the package writer does not
+have an immediate need for it, see \url{https://tex.stackexchange.com/q/335994/250119}) means control sequences not
+in the hash table will be destroyed.
+Use with care.
-\begin{function}{\pretty:nn, \pretty:nnn}
- \begin{syntax}
- \cs{pretty:nn} \Arg{token list} \Arg{token list}
- \cs{pretty:nnn} \Arg{token list} \Arg{token list} \Arg{token list}
- \end{syntax}
- Print multiple token lists. Its effect is similar to multiple consecutive calls to \cs{pretty:n}.
\end{function}
\begin{function}[EXP]{\prettye:nn, \prettye:nnn}
@@ -132,49 +327,63 @@ There are also these functions, for convenience.
Similar to multiple consecutive calls to \cs{prettye:n}.
\end{function}
-\begin{function}[EXP]{\prettye:nw, \prettye:nnw}
+
+
+\begin{function}[EXP]{\prettye:nw}
\begin{syntax}
- \cs{prettye:nw} \Arg{token list} \meta{tokens} \cs{prettystop}
- \cs{prettye:nnw} \Arg{token list} \Arg{token list} \meta{tokens} \cs{prettystop}
+ \cs{prettye:nw} \Arg{callback} \meta{tokens} \cs{prettystop}
\end{syntax}
- Similar to call(s) to \cs{prettye:n} followed by a call to \cs{prettye:w}.
+ Same as above, but has a callback, that is, code that is put in the input stream after the content is printed.
+
+ Useful if you want to fine-tune what is printed exactly.
+ (\texttt{\cs{prettye:w} \meta{callback} \meta{tokens}} is functionally the same, but the callback
+ is also printed, which will clutter the debug output)
+
+ For example
+\begin{verbatim}
+\prettye:nw {\somecode ...} 123 \prettystop
+\end{verbatim}
+will print |123|, then after some expansion steps results in the input stream contain
+|\somecode ... 123 \prettystop|.
\end{function}
-\begin{function}{\pretty:w}
+\begin{function}[EXP]{\prettye:nnw, \prettye:nnnw}
\begin{syntax}
- \cs{pretty:w} \meta{token list} \cs{prettystop}
+ \cs{prettye:nnw} \Arg{callback} \Arg{token list} \meta{tokens} \cs{prettystop}
+ \cs{prettye:nnnw} \Arg{callback} \Arg{token list} \Arg{token list} \meta{tokens} \cs{prettystop}
\end{syntax}
- Print the content of \meta{token list}.
-
- Same restriction applies -- the catcode is frozen.
+ Similar to call(s) to \cs{prettye:n} followed by a call to \cs{prettye:nw}.
- In addition -- for now, it must be brace-balanced and if \meta{token list} has a surrounding brace group it will be removed. Use \cs{prettye:w} instead if possible.
+ For example
+\begin{verbatim}
+\prettye:nnw {\somecode ...} {123} 456 \prettystop
+\end{verbatim}
+will print |123456|, then, after some expansion steps, |\somecode ... 456 \prettystop| remains in the input stream.
\end{function}
-\begin{function}[EXP]{\prettystop}
- \begin{syntax}
- \cs{prettystop}
- \end{syntax}
- Only used as a delimiter for |:w| functions. For convenience, this function is defined to do nothing.
-\end{function}
+\subsection{Lua programming interface}
-\begin{function}{\prettyshow:N,\prettyshow:c}
+\begin{function}{prettyprint}
\begin{syntax}
- \cs{prettyshow:N} \meta{token}
- \cs{prettyshow:c} \Arg{control sequence name}
+ |prettyprint(|\meta{content}|)|
\end{syntax}
- Show the meaning of a |N|-type argument.
+ Print the content, which should be a table of token objects.
+
+ For convenience, you can pass multiple arguments. Strings are also supported.
\end{function}
+
+
+
\subsection{\LaTeXe\ interface}
-\begin{function}{\prettyN,\prettyX,\prettyO,\prettyV,\prettyinit,\prettyshowN,\prettyshowC}
+\begin{function}{\prettyN,\prettyX,\prettyO,\prettyV,\prettyW,\prettyshowN,\prettyshowC}
\begin{syntax}
\tn{prettyN} \Arg{token list}
\tn{prettyX} \Arg{token list}
\tn{prettyO} \Arg{token list}
\tn{prettyV} \meta{tl var}
- \tn{prettyinit}
+ \cs{prettyW} \meta{token list} \cs{prettystop}
\tn{prettyshowN} \meta{token}
\tn{prettyshowC} \Arg{control sequence name}
\end{syntax}
@@ -190,33 +399,19 @@ There are also these functions, for convenience.
\end{function}
-\subsection{Customization}
-
-These variables can be redefined before the
-first call to \cs{pretty:n} or \cs{prettyinit:} to customize the behavior.
-
-\begin{variable}{\prettyfilename}
- The output file name. Defaults to |pretty-|\meta{jobname}|.html|, as mentioned above.
-\end{variable}
-
-\begin{variable}{\prettyrefreshstrategy}
- The auto-refresh strategy. Allowed values are 0-4. 0 is no refresh. \\
- Which value works best depends on the particular browser. \\
- On Google Chrome, passing |--allow-file-access-from-files| may be useful.
-\end{variable}
-
-\begin{variable}{\prettyrefreshduration}
- The duration between two consecutive refresh check, in milliseconds. Defaults to 1000.
-\end{variable}
-
\section{Implementation}
Unfortunately, the implementation is not typesetted in \TeX. Read the |.sty| file.
-\StopEventually{^^A
- \PrintChanges
- \PrintIndex
-}
+Remark: it's possible to do expandable printing in other engines as well by, for example, turning on |\tracingmacros|, parse the token list somehow
+(and use some not-always-exact logic to distinguish normal character and active character with same meaning;
+then grep the resulting log file for special markers.
+
+But that would be very, very slow and slows down everything else by turning on logging. Just use \LuaTeX\ for debugging.
+
+There's another option of recompiling the engine and adding some expandable primitive for debug logging...
+\PrintChanges
+\PrintIndex
\Finale
\end{document}
diff --git a/macros/latex/contrib/prettytok/prettytok_template.html b/macros/latex/contrib/prettytok/prettytok_template.html
index 8764d49809..5b0d988a4c 100644
--- a/macros/latex/contrib/prettytok/prettytok_template.html
+++ b/macros/latex/contrib/prettytok/prettytok_template.html
@@ -37,10 +37,9 @@ iframe{
.tokenlist, .fileline{
border: 1px solid gray;
- overflow: scroll;
- white-space: nowrap;
+ padding: 2px;
+ line-height: 1.5em;
}
-.tokenlist::-webkit-scrollbar, .fileline::-webkit-scrollbar { width: 0 !important }
.fileline{
background-color: #404040;
@@ -57,12 +56,6 @@ iframe{
.cs, .active_char{
color: #FFFF00;
}
-.cs::before{
- content: "\\";
-}
-.cs::after{
- content: " ";
-}
#popup{
display: none;
@@ -106,6 +99,18 @@ input[type=button]{
flex: 0 0 30%;
overflow: scroll;
}
+
+/*
+ hack to make it display as ␣ but copy-paste (or search) as space
+*/
+.space_charcode{
+ font-size: 0pt;
+}
+
+.space_charcode::before{
+ font-size: medium;
+ content: "␣";
+}
</style>
</head>
<body>
@@ -117,22 +122,29 @@ input[type=button]{
</div>
<script>
"use strict"
-function show_html(s){
- return s.replace(/ /g, "␣")
+
+function show_html_except_space(s){
+ return s
.replace(/\r|\n/g, "↵")
.replace(/\t/g, "⇥")
}
+function show_html(s){
+ return show_html_except_space(s).replace(/ /g, "␣")
+}
+
output.innerHTML=""
function print_tl(...tokens){
const tl_div=document.createElement("div")
- tl_div.className="tokenlist"
+ tl_div.classList.add("tokenlist")
for(let token of tokens){
tl_div.appendChild(token)
if({13: true, 10: true}[token.data_charcode]){
tl_div.appendChild(document.createElement("br"))
- }
+ }else{
+ tl_div.appendChild(document.createElement("wbr"))
+ }
}
output.appendChild(tl_div)
}
@@ -140,10 +152,13 @@ function print_tl(...tokens){
function token(charcode /* int */, catcode /* single character string in hex */){
const token_span=document.createElement("span")
const ch=String.fromCodePoint(charcode)
- token_span.innerText=show_html(ch)
+ token_span.innerText=show_html_except_space(ch)
token_span.data_charcode=charcode
+ if(charcode==32){ // special handle space here
+ token_span.classList.add("space_charcode")
+ }
if(catcode==='D'){
- token_span.className="active_char"
+ token_span.classList.add("active_char")
token_span.title=`active ${ch} # ${charcode}`
}else{
const cls={
@@ -158,7 +173,7 @@ function token(charcode /* int */, catcode /* single character string in hex */)
B: 'cmd__letter_cmd',
C: 'cmd__other_char_cmd',
}[catcode]
- token_span.className="token "+cls
+ token_span.classList.add("token", cls)
token_span.title=`${cls} ${ch} # ${charcode}`
}
return token_span
@@ -170,18 +185,37 @@ function cs(...codepoints){
const control_sequence_name=String.fromCodePoint(...codepoints)
//const meaning_str=readstr()
- token_span.innerText=show_html(control_sequence_name)
- //token_span.title=`cs '${control_sequence_name}' → ${meaning_str}`
- token_span.className="cs"
+ /*
+ token_span.innerText='\\' + show_html(control_sequence_name) + ' '
+ */
+
+ var items=control_sequence_name.split(' ')
+ items[0]="\\"+items[0]
+ items[items.length-1]+=' '
+ for(var i=0; i<items.length; i++){
+ if(i!=0){ // append a '␣' span that copy-paste as a space
+ var space_span=document.createElement("span")
+ space_span.innerText=' '
+ space_span.classList.add("space_charcode")
+ token_span.appendChild(space_span)
+ }
+
+ // append the text itself
+ if(items[i]!="")
+ token_span.appendChild(new Text(show_html_except_space(items[i])))
+ }
+
+ //token_span.title=`cs '${control_sequence_name}' → ${meaning_str}`
+ token_span.classList.add("cs")
return token_span
}
function csfrozenrelax(){
const token_span=document.createElement("span")
- token_span.innerText="relax"
+ token_span.innerText="\\relax"
token_span.title="frozen relax"
- token_span.className="cs frozenrelax"
+ token_span.classList.add("cs", "frozenrelax")
return token_span
}
diff --git a/macros/latex/contrib/se2thesis/CHANGELOG.md b/macros/latex/contrib/se2thesis/CHANGELOG.md
index c93bb1110b..96e937e109 100644
--- a/macros/latex/contrib/se2thesis/CHANGELOG.md
+++ b/macros/latex/contrib/se2thesis/CHANGELOG.md
@@ -7,6 +7,30 @@ and this project adheres to
## [Unreleased]
+## [v3.0.0] – 2023–04–18
+
+### Added
+
+- Add documentation on how to install the bundle if it is not part of the
+ existing TeX distribution.
+- Add a package `se2packages` that provides the ability to directly load
+ recommended packages with recommended options.
+
+### Changed
+
+- The `paper=a4` and `paper=b5` options now produce the exact same text-block
+ sizes.
+- Make the logo height smaller for B5 paper.
+- The default class is now `scrbook` instead of `scrreprt`.
+
+### Removed
+
+- **Breaking:** Removed the `biblatex` class option from `se2thesis`, use the
+ `se2packages` package with its `biblatex=true` option instead.
+- **Breaking:** Removed the `paper=a5` option.
+- Removed the automated loading of the `microtype`, `selnolig`, and
+ `lua-widow-control` packages from `se2thesis`—use `se2packages` instead.
+
## [v2.1.0] – 2023–01–27
### Added
@@ -100,6 +124,7 @@ These changes might be breaking changes!
### Added
- First official release
+[v3.0.0]: https://github.com/se2p/se2thesis/compare/v3.0.0...v2.1.0
[v2.1.0]: https://github.com/se2p/se2thesis/compare/v2.1.0...v2.0.0
[v2.0.0]: https://github.com/se2p/se2thesis/compare/v2.0.0...v1.3.1
[v1.3.1]: https://github.com/se2p/se2thesis/compare/v1.3.1...v1.3.0
diff --git a/macros/latex/contrib/se2thesis/se2colors.dtx b/macros/latex/contrib/se2thesis/se2colors.dtx
index 5fa39c0c34..bf2af3728f 100644
--- a/macros/latex/contrib/se2thesis/se2colors.dtx
+++ b/macros/latex/contrib/se2thesis/se2colors.dtx
@@ -231,7 +231,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2colors} {2023-01-27} {2.1.0}
+\ProvidesExplPackage {se2colors} {2023-04-18} {3.0.0}
{A colour support package for the se2thesis bundle}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/se2thesis/se2fonts.dtx b/macros/latex/contrib/se2thesis/se2fonts.dtx
index 0743d85cbc..dccb8420b1 100644
--- a/macros/latex/contrib/se2thesis/se2fonts.dtx
+++ b/macros/latex/contrib/se2thesis/se2fonts.dtx
@@ -159,7 +159,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2fonts} {2023-01-27} {2.1.0}
+\ProvidesExplPackage {se2fonts} {2023-04-18} {3.0.0}
{A font-selection support package for the se2thesis bundle}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/se2thesis/se2packages.dtx b/macros/latex/contrib/se2thesis/se2packages.dtx
new file mode 100644
index 0000000000..319bbfeed1
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/se2packages.dtx
@@ -0,0 +1,788 @@
+% \iffalse meta-comment
+%
+% File: se2packages.dtx Copyright (C) 2022--2023 Stephan Lukasczyk
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+% This file is part of the "se2thesis bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% The released version of this bundle is available from CTAN.
+%
+% ----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/se2p/se2thesis
+%
+% for those people who are interested.
+%
+% ----------------------------------------------------------------------
+%
+%<*driver>
+\documentclass{l3doc}
+% The next line is needed so that \GetFileInfo will be able to pick up
+% version data.
+\usepackage{se2packages}
+
+\usepackage[UKenglish]{babel}
+\usepackage{hvlogos}
+
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{se2packages.sty}
+%
+% \title{^^A
+% \pkg{se2packages} -- Supporting Packages for the \pkg{se2thesis} Bundle^^A
+% \thanks{This file describes \fileversion, last revised \filedate.}^^A
+% }
+%
+% \author{^^A
+% Stephan Lukasczyk^^A
+% \thanks{Email: \href{mailto:stephan@dante.de}{stephan@dante.de}}^^A
+% }
+%
+% \date{Released \filedate}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \section{The \pkg{se2packages} package}\label{sec:doc-se2packages}
+%
+% Several packages can be useful for writing a thesis.
+% We provide a simple package for the user
+% that loads these support packages with the recommended options.
+% Please note that you might not need all these packages,
+% however,
+% having a look at them (especially their documentation)
+% might give you an insight whether to use a certain package.
+% Our general recommendation is to use as few packages as you can;
+% some might have conflicts,
+% others basically do the same,
+% or are outdated.
+% Please consider reading the documentation of each package you are using
+% to figure out whether they have any conflicts with other packages
+% (for example, one cannot use the recommended \pkg{siunitx} package
+% together with \pkg{SIunits}) or they might require to be loaded
+% at special places in your preamble (for example, \pkg{hyperref}
+% is usually meant to be loaded as the last package,
+% except you are also using \pkg{cleveref},
+% which needs to be loaded \emph{after} \pkg{hyperref}).
+%
+% \subsection{The Recommended Packages}
+%
+% We first present the packages we recommend
+% and give a rationale why we believe they should be used.
+% Afterwards,
+% we will discuss how to load the \pkg{se2packages} package
+% to use one or the other of these recommended packages
+% in the next section.
+%
+% \subsubsection{Quoting with \pkg{csquotes}}
+%
+% The \pkg{csquotes} packages allows you for intelligent quoting of text.
+% While verbose quotes are not that common in computer science,
+% the package still provides some useful macros to the user.
+%
+% \subsubsection{Number formatting with \pkg{siunitx}}
+%
+% While \pkg{siunitx}'s original purpose was to format physical quantities,
+% it provides a lot of useful features
+% when typesetting theses (and other documents) in computer science.
+% When you skim through its documentation,
+% especiall look at the \cmd{\qty} and \cmd{\num} macros,
+% as well as the section on typesetting tabular material.
+% We also recommend reading an extensive discussion on number formatting,
+% precision of presented numbers,
+% and more related topics in Beyer et al.'s journal paper
+% on requirements and solutions for reliable
+% benchmarking~\cite{DBLP:journals/sttt/BeyerLW19}.
+%
+% \subsubsection{Code Listings}
+%
+% We prefer using the \pkg{minted} package for code listings
+% because it provides a lot of options for styling
+% as well as built-in support for a huge number of languages.
+% However,
+% this package requires the installation of Python
+% and the setting of the |-shell-escape| option to your \TeX{} engine.
+% Please read the package's documentation to set it up;
+% the aforementioned Docker images from the Island of \TeX{} project
+% provide you everything set up already.
+%
+% In case you do not want to use the \pkg{minted} package,
+% please consider using \pkg{listings} for typesetting your code listings.
+%
+% Please be aware to use \emph{either} \pkg{minted} \emph{or} \pkg{listings}!
+%
+% \subsubsection{Designing Tables}
+%
+% A basically mandatory package to all users of tables
+% is the \pkg{booktabs} package.
+% Especially its documentation is a must-read!
+% It provides a large variety of hints for designing tables,
+% most notably that one should never ever use vertical lines;
+% horizontal lines should be used sparesly;
+% \pkg{booktabs} provides three macros for lines that shall be used
+% instead of \cmd{\hline} from standard \LaTeX:
+% \cmd{\toprule} for a rule on the top of a table,
+% above the column heads;
+% \cmd{\midrule} to separate column heads and the content,
+% and \cmd{\bottomrule} to mark the bottom of a table.
+% We highly recommend that you follow this style when writing your thesis.
+%
+% Note that captions of tables shall be put \emph{above} the table
+% whereas captions of figures shall go \emph{below} the figure.
+% The rationale is that a figure should be more or less self explaining
+% while a table almost always needs some explanation.
+%
+% Unfortunately,
+% the distances when using a \cmd{\caption} above a table are wrong by default;
+% when creating tables,
+% consider loading the \pkg{hvfloats} package
+% and use its \cmd{\tabcaption} instead of \cmd{\caption} for tables.
+% The \pkg{hvfloats} package furthermore provides additional useful macros
+% to typeset all kinds of floats.
+%
+% \subsubsection{Controlling Ligatures, Orphans, and Widows}
+%
+% When using \LuaTeX{}~(which we recommend anyway),
+% we additionally recommend to use the \pkg{selnolig}
+% and \pkg{lua-widow-control} packages.
+% The former implements a better control over ligatures,
+% the latter provides better control over orphans and widows.
+%
+% \subsubsection{Use \pkg{microtype} for Microtypographic Optimisation}
+%
+% \pkg{microtype} is a game changer when writing documents.
+% While standard \LaTeX{} provides reasonably good typography,
+% the \pkg{microtype} package brings it to the next level.
+% We refer you to the documentation of the package for details.
+%
+% Additionally,
+% we prefer to have a thin space around the m-dash.
+% Although we are aware of the discussion
+% whether to have such a space in English,
+% we think it looks more beautiful and thus recommend it.
+%
+% \subsubsection{Use \pkg{biblatex} for Bibliographic References}
+%
+% The standard way of typesetting bibliographic references used to be \BibTeX.
+% The original \BibTeX,
+% however,
+% seems to be very outdated in various ways:
+% it originally only supported 7\,bit character sets
+% and creating citation styles requires the usage
+% of a kind of an archaic language.
+% \BibLaTeX{} resolves many of the drawbacks of \BibTeX;
+% when combined with the |biber| engine,
+% it supports full UTF-8 unicode,
+% therefore correct sorting of the references now works out of the box;
+% also creating citation styles can now be done using simple \LaTeX{} commands.
+%
+% \subsubsection{Use \pkg{cleveref} for Internal References}
+%
+% \LaTeX{} provides an easy-to-use reference mechanism using the \cmd{\label}
+% and \cmd{\ref} macros.
+% However,
+% this requires some manual effort and the text needs to specify
+% whether a reference is to a figure, section, or table.
+% We often see in drafts artefacts such as \enquote{we discuss our findings in 4};
+% but what is \enquote{4} here?
+% Is it a section?
+% A table?
+% A figure?
+%
+% To avoid such confusion,
+% use the \pkg{cleveref} package,
+% which automatically infers the type of the reference~(see its documentation
+% on how this works).
+% The \pkg{cleveref} package furthermore avoids an additional, common mistake:
+% between the name of the element and its reference
+% one needs to have a non-breaking space that is often forgotten.
+% Instead people are using normal spaces that can break at the end of a line
+% which looks very ugly.
+%
+% Please note that,
+% in contrast to most other packages,
+% \pkg{cleveref} has to be loaded \emph{after} the \pkg{hyperref} package!
+%
+% \subsection{Loading \pkg{se2packages}}
+%
+% When you load the \pkg{se2packages} package
+% it will automatically load the \pkg{csquotes} and \pkg{booktabs} packages
+% because we believe that you definitely should use them.
+% Still, it is possible to avoid this by setting the following
+% load-time options to the package.
+% \begin{function}{csquotes,nocsquotes}
+% \begin{syntax}
+% |csquotes| = \meta{true,false}
+% |nocsquotes|
+% \end{syntax}
+% The argument to |csquotes| can be one of |true| or |false|.
+% The latter does not load \pkg{csquotes}, the former is the default value.
+% By using |nocsquotes| you can also avoid that \pkg{csquote} is loaded.
+% \end{function}
+%
+% \begin{function}{booktabs,nobooktabs}
+% \begin{syntax}
+% |booktabs| = \meta{true,false}
+% |nobooktabs|
+% \end{syntax}
+% The argument to |booktabs| can be one of |true| or |false|.
+% The latter does not load \pkg{booktabs}, the former is the default value.
+% By using |nobooktabs| you can also avoid that \pkg{booktabs} is loaded.
+% \end{function}
+%
+% The \pkg{siunitx} package is helpful to set quantities
+% and to automatically format numbers consistently.
+% The following load-time option loads it automatically.
+% \begin{function}{siunitx}
+% \begin{syntax}
+% |siunitx| = \meta{true,false}
+% \end{syntax}
+% Decides whether the package loads \pkg{siunitx}
+% and sets the options for \pkg{siunitx} to the values we recommend.
+% The default value is |false|, set it to |true| to load \pkg{siunitx}.
+% \end{function}
+%
+% We provide a load-time option to load \pkg{minted}
+% and configure it.
+% \begin{function}{minted}
+% \begin{syntax}
+% |minted| = \meta{true,false}
+% \end{syntax}
+% Decides whether the package loads \pkg{minted}
+% and sets the options for \pkg{minted} to the values we recommend.
+% The default value is |false|, set it to |true| to load \pkg{minted}.
+% Note that \pkg{minted} requires additional installation effort
+% and the use of the |-shell-escape| option, see its documentation.
+% \end{function}
+%
+% We also provide a load-time option to load \pkg{listings}
+% and configure it.
+% This option and the |minted| option are mutually exclusive!
+% \begin{function}{listings}
+% \begin{syntax}
+% |listings| = \meta{true,false}
+% \end{syntax}
+% Decides whether the package loads \pkg{listings}
+% and sets the options for \pkg{listings} to the values we recommend.
+% The default value is |false|, set it to |true| to load \pkg{listings}.
+% \end{function}
+%
+% We provide a load-time option to load \pkg{selnolig}.
+% \begin{function}{selnolig,noselnolig}
+% \begin{syntax}
+% |selnolig| = \meta{true,false}
+% |noselnolig|
+% \end{syntax}
+% The argument to |selnolig| can be one of |true| or |false|.
+% The latter does not load \pkg{selnolig}, the former is the default value.
+% By using |noselnolig| you can also avoid that \pkg{selnolig} is loaded.
+% \end{function}
+%
+% We provide a load-time option to load \pkg{lua-widow-control}.
+% \begin{function}{widowcontrol,nowidowcontrol}
+% \begin{syntax}
+% |widowcontrol| = \meta{true,false}
+% |nowidowcontrol|
+% \end{syntax}
+% The argument to |widowcontrol| can be one of |true| or |false|.
+% The latter does not load \pkg{lua-widow-control},
+% the former is the default value.
+% By using |nowidowcontrol| you can also avoid
+% that \pkg{lua-widow-control} is loaded.
+% \end{function}
+%
+% We provide a load-time option to load and configure \pkg{microtype}.
+% \begin{function}{microtype,nomicrotype}
+% \begin{syntax}
+% |microtype| = \meta{true,false}
+% |nomicrotype|
+% \end{syntax}
+% The argument to |microtype| can be one of |true| or |false|.
+% The latter does not load \pkg{microtype}, the former is the default value.
+% By using |nomicrotype| you can also avoid that \pkg{microtype} is loaded.
+% \end{function}
+%
+% We provide a load-time option to load and configure \pkg{biblatex}.
+% \begin{function}{biblatex}
+% \begin{syntax}
+% |biblatex| = \meta{true,false}
+% \end{syntax}
+% Decides whether the package loads \pkg{biblatex}
+% and sets the options for \pkg{biblatex} to the values we recommend.
+% The default value is |false|, set it to |true| to load \pkg{biblatex}.
+% \end{function}
+%
+% Additionally,
+% we provide a load-time option to load \pkg{cleveref}.
+% This option makes use of \LaTeX's hook system to load it as the very last
+% thing in the preamble.
+% You shall not use this option, but load \pkg{cleveref} on your own,
+% if your document requires packages that need to be loaded even \emph{after}
+% \pkg{cleveref}.
+% \begin{function}{cleveref}
+% \begin{syntax}
+% |cleveref| = \meta{true,false}
+% \end{syntax}
+% Decides whether the package load \pkg{cleveref}.
+% The default value is |false|, set it to |true| to load \pkg{cleveref}.
+% \end{function}
+%
+% Lastly,
+% we provide one option to load all recommended packages~(with \pkg{minted}
+% prefered over \pkg{listings}).
+% \begin{function}{all}
+% \begin{syntax}
+% |all| = \meta{true,false}
+% \end{syntax}
+% Decides whether the package loads all recommended packages.
+% The default value is |false|, set it to |true| to load them.
+% \end{function}
+%
+% \subsection{Additional Recommended Packages}
+%
+% The following packages are not part of \pkg{se2packages}
+% because they serve a very specific purpose.
+% They might not be needed by many thesis writers,
+% however,
+% we mention them here in order to give you a pointer.
+% We list them in alphabetic order.
+%
+% \begin{itemize}
+% \item \pkg{algorithm2e}: provides tooling for typesetting algorithm
+% diagrams.
+% We recommend loading it with the following options:
+% \begin{LaTeXdemo}[code only]
+% \usepackage[ruled,noline,noend,linesnumbered]{algorithm2e}
+% \end{LaTeXdemo}
+% \item \pkg{hvfloat}: a package to control captions, fullpage, and
+% double-page floats.
+% We recommend to load it and use its \cmd{\tabcaption} for table captions.
+% \item \pkg{lettrine}: allows to start a paragraph with a large initial.
+% This is a beautiful opener for the first paragraph of a thesis' main
+% content.
+% \item \pkg{mathtools}: an enhanced version of the famous \amsmath
+% package that provides more functionality and fixes some of the known bugs.
+% \item \pkg{pdfx}: adds support for PDF/X and PDF/A, which is useful for
+% creating documents that can be archived, for example, by the University's
+% library.
+% \item \pkg{pgfplots}: a library for creating all kinds of plots, based on
+% \pkg{pgf}, which is also the basis of the \pkg{tikz} package.
+% \item \pkg{sidenotesplus}: a package to place all kinds of objects in the
+% margin of a document, from footnotes (then called sidenotes) to figures
+% and tables.
+% \item \pkg{subcaption}: support for sub-captions and sub-figures.
+% \item \pkg{tabularray}: a rewrite of \LaTeX's array and tabular abilities
+% in \LaTeXIII.
+% While the package offers a great combination of several other packages'
+% functionality, it tends to be quite slow for large tables due to the way
+% it is implemented internally.
+% \item \pkg{tcolorbox}: allows to typeset coloured boxes, for example, for
+% short summaries on research questions or hypotheses.
+% \item \pkg{tikz}: for creating all kinds of figures.
+% Beware: \TikZ{} is a really huge package with a lot of functionality and
+% a manual of more than 1300~pages.
+% \end{itemize}
+%
+%
+% \begin{thebibliography}{9}
+% \bibitem{DBLP:journals/sttt/BeyerLW19} Dirk Beyer, Stefan Löwe, and Philipp
+% Wendler: \emph{Reliable benchmarking: requirements and solutions}. STTT
+% 21(1): 1--29 (2019)
+% \end{thebibliography}
+%
+%
+%
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{se2packages} implementation}
+%
+% Start the \pkg{DocStrip} guards.
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention): only
+% internal material in this \emph{submodule} should be used directly.
+% \begin{macrocode}
+%<@@=slcd_packages>
+% \end{macrocode}
+%
+% Identify the package and give the overall version information.
+% \begin{macrocode}
+\ProvidesExplPackage {se2packages} {2023-04-18} {3.0.0}
+ {Supporting packages for the se2thesis bundle}
+% \end{macrocode}
+%
+% \subsection{Load-time options}
+%
+% Before we define the actual options,
+% define some Boolean variables to store the selected values.
+%
+% \begin{macro}{\l_@@_csquotes_bool}
+% Whether or not to load \pkg{csquotes}.
+% \begin{macrocode}
+\bool_new:N \l_@@_csquotes_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_booktabs_bool}
+% Whether or not to load \pkg{booktabs}.
+% \begin{macrocode}
+\bool_new:N \l_@@_booktabs_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_siunitx_bool}
+% Whether or not to load and configure \pkg{siunitx}.
+% \begin{macrocode}
+\bool_new:N \l_@@_siunitx_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_minted_bool}
+% Whether or not to load and configure \pkg{minted}.
+% \begin{macrocode}
+\bool_new:N \l_@@_minted_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_listings_bool}
+% Whether or not to load and configure \pkg{listings}.
+% \begin{macrocode}
+\bool_new:N \l_@@_listings_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_biblatex_bool}
+% Whether or not to load and configure \pkg{biblatex}.
+% \begin{macrocode}
+\bool_new:N \l_@@_biblatex_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_selnolig_bool}
+% Whether or not to load \pkg{selnolig} (\LuaTeX{} only).
+% \begin{macrocode}
+\bool_new:N \l_@@_selnolig_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_luawidowcontrol_bool}
+% Whether or not to load \pkg{luawidowcontrol} (\LuaTeX{} only).
+% \begin{macrocode}
+\bool_new:N \l_@@_luawidowcontrol_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_microtype_bool}
+% Whether or not to load \pkg{microtype}.
+% \begin{macrocode}
+\bool_new:N \l_@@_microtype_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_cleveref_bool}
+% Whether or not to load and configure \pkg{cleveref}.
+% \begin{macrocode}
+\bool_new:N \l_@@_cleveref_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_all_bool}
+% Whether or not to load and configure all recommended packages.
+% \begin{macrocode}
+\bool_new:N \l_@@_all_bool
+% \end{macrocode}
+% \end{macro}
+%
+% Define the actual load-time options.
+% \begin{macrocode}
+\keys_define:nn { seiipackages }
+ {
+ csquotes .bool_gset:N = \l_@@_csquotes_bool,
+ csquotes .initial:n = true,
+ nocsquotes .meta:n = {csquotes=false},
+
+ booktabs .bool_gset:N = \l_@@_booktabs_bool,
+ booktabs .initial:n = true,
+ nobooktabs .meta:n = {booktabs=false},
+
+ siunitx .bool_gset:N = \l_@@_siunitx_bool,
+ siunitx .initial:n = false,
+
+ minted .bool_gset:N = \l_@@_minted_bool,
+ minted .initial:n = false,
+
+ listings .bool_gset:N = \l_@@_listings_bool,
+ listings .initial:n = false,
+
+ biblatex .bool_gset:N = \l_@@_biblatex_bool,
+ biblatex .initial:n = false,
+
+ selnolig .bool_gset:N = \l_@@_selnolig_bool,
+ selnolig .initial:n = true,
+ noselnolig .meta:n = {selnolig=false},
+
+ widowcontrol .bool_gset:N = \l_@@_luawidowcontrol_bool,
+ widowcontrol .initial:n = true,
+ nowidowcontrol .meta:n = {widowcontrol=false},
+
+ microtype .bool_gset:N = \l_@@_microtype_bool,
+ microtype .initial:n = true,
+ nomicrotype .meta:n = {microtype=false},
+
+ cleveref .bool_gset:N = \l_@@_cleveref_bool,
+ cleveref .initial:n = false,
+
+ all .bool_gset:N = \l_@@_all_bool,
+ all .initial:n = false,
+ }
+% \end{macrocode}
+%
+% \subsection{Option handling}
+%
+% \begin{macrocode}
+\IfFormatAtLeastTF { 2022-06-01 }
+ { \ProcessKeyOptions [ seiipackages ] }
+ {
+ \RequirePackage{ l3keys2e }
+ \ProcessKeysOptions { seiipackages }
+ }
+% \end{macrocode}
+%
+% Define an error message if both \pkg{minted} and \pkg{listings} are requested.
+% \begin{macrocode}
+\msg_set:nnnn { seiipackages } { conflicting-packages }
+ { Setting~ both~ minted~ and~ listings~ to~ true~ is~ not~ possible. }
+ { Choose~ either~ of~ them! }
+% \end{macrocode}
+%
+% Define a message for logging that a specific package will be loaded by
+% \pkg{se2packages}.
+% Expects as parameter the name of the package that will be loaded.
+% \begin{macrocode}
+\msg_new:nnn { seiipackages } { load-package }
+ { se2packages~ loads~ the~ #1~ package now. }
+% \end{macrocode}
+%
+% And, in case both values are set to |true|,
+% raise the error message.
+% \begin{macrocode}
+\bool_lazy_and:nnT { \l_@@_minted_bool } { \l_@@_listings_bool }
+ {
+ \msg_error:nn { seiipackages } { conflicting-packages }
+ }
+% \end{macrocode}
+%
+% In case the |all| option is set,
+% set all other values to |true|.
+% \begin{macrocode}
+\bool_if:NT \l_@@_all_bool
+ {
+ \bool_gset_true:N \l_@@_csquotes_bool
+ \bool_gset_true:N \l_@@_booktabs_bool
+ \bool_gset_true:N \l_@@_siunitx_bool
+ \bool_gset_true:N \l_@@_minted_bool
+ \bool_gset_false:N \l_@@_listings_bool
+ \bool_gset_true:N \l_@@_selnolig_bool
+ \bool_gset_true:N \l_@@_luawidowcontrol_bool
+ \bool_gset_true:N \l_@@_microtype_bool
+ \bool_gset_true:N \l_@@_biblatex_bool
+ \bool_gset_true:N \l_@@_cleveref_bool
+ }
+% \end{macrocode}
+%
+% \subsection{Package loading}
+%
+% Conditionally load the \pkg{csquotes} package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_csquotes_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { csquotes }
+ \RequirePackage{csquotes}
+ }
+% \end{macrocode}
+%
+% Conditionally load the \pkg{booktabs} package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_booktabs_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { booktabs }
+ \RequirePackage{booktabs}
+ }
+% \end{macrocode}
+%
+% Conditionally load and configure the \pkg{siunitx} package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_siunitx_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { siunitx }
+ \RequirePackage[
+ add-integer-zero=false,
+ detect-inline-weight=math,
+ detect-weight=true,
+ free-standing-units,
+ group-minimum-digits=4,
+ list-final-separator={, and },
+ round-mode=figures,
+ round-precision=3,
+ separate-uncertainty=true,
+ uncertainty-mode=separate,
+ ]{siunitx}
+ }
+% \end{macrocode}
+%
+% Conditionally load and configure the \pkg{minted} package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_minted_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { minted }
+ \RequirePackage[newfloat=true]{minted}
+ \setminted{
+ autogobble,
+ breaklines=true,
+ fontsize=\footnotesize,
+ frame=single,
+ linenos=false,
+ resetmargins=true,
+ xleftmargin=1em,
+ xrightmargin=1em,
+ }
+ }
+% \end{macrocode}
+%
+% Conditionally load and configure the \pkg{listings} package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_listings_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { listings }
+ \RequirePackage{listings}
+ \lstset{
+ basicstyle=\footnotesize\ttfamily,
+ breaklines=true,
+ captionpos=t,
+ extendedchars=true,
+ frame=single,
+ keywordstyle=\color{blue}\bfseries,
+ showspaces=false,
+ showtabs=false,
+ showstringspaces=false,
+ tabsize=2,
+ }
+ }
+% \end{macrocode}
+%
+% Conditionally load \pkg{selnolig} if present and we run \LuaTeX.
+% \begin{macrocode}
+\bool_lazy_and:nnT { \l_@@_selnolig_bool } { \sys_if_engine_luatex_p: }
+ {
+ \IfFileExists { selnolig.sty }
+ {
+ \RequirePackage{selnolig}
+ } {
+ \msg:nnnn { seiipackages }
+ { selnolig-not-available }
+ { Could~ not~ find~ selnolig.sty }
+ { You~ might~ want~ to~ install~ it~ for~ better~ ligatures~ control.}
+ \msg_note:nn { seipackages } { selnolig-not-available }
+ }
+ }
+% \end{macrocode}
+%
+% Conditionally load \pkg{luawidowcontrol} if present and we run \LuaTeX.
+% \begin{macrocode}
+\bool_lazy_and:nnT { \l_@@_luawidowcontrol_bool } { \sys_if_engine_luatex_p: }
+ {
+ \IfFileExists { lua-widow-control.sty }
+ {
+ \RequirePackage{lua-widow-control}
+ } {
+ \msg:nnnn { seiipackages }
+ { lua-widow-control-not-available }
+ { Could~ not~ find~ lua-widow-control.sty }
+ {
+ You~ might~ want~ to~ install~ it~ for~ better~ control~ over~
+ widows~ and~ orphans.
+ }
+ \msg_note:nn { seipackages } { lua-widow-control-not-available }
+ }
+ }
+% \end{macrocode}
+%
+% Conditionally load and configure \pkg{microtype}.
+% \begin{macrocode}
+\bool_if:NT \l_@@_microtype_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { microtype }
+ \RequirePackage{microtype}
+ \clubpenalty=10000
+ \widowpenalty=10000
+ \displaywidowpenalty=10000
+ \SetExtraKerning{
+ encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,EU1,EU2}
+ }{
+ \textemdash = {167,167},
+ — = {167,167}
+ }
+ }
+% \end{macrocode}
+%
+% Conditionally load and configure the \pkg{biblatex} package.
+% \begin{macrocode}
+\bool_if:NT \l_@@_biblatex_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { biblatex }
+ \PassOptionsToPackage
+ {
+ backend=biber,
+ backref=true,
+ giveninits=true,
+ hyperref=auto,
+ maxnames=100,
+ minalphanames=3,
+ sorting=nyt,
+ style=alphabetic,
+ } { biblatex }
+ \RequirePackage{biblatex}
+ }
+% \end{macrocode}
+%
+% Conditionally load the \pkg{cleveref} package as the last of the preamble.
+% \begin{macrocode}
+\bool_if:NT \l_@@_cleveref_bool
+ {
+ \msg_info:nnn { seiipackages } { load-package } { cleveref }
+ \AddToHook { begindocument/before }
+ {
+ \RequirePackage[capitalise]{cleveref}
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
index 3b09372b1c..df38c24126 100644
--- a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
+++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
index 2a7cf037a2..da47aaa56e 100644
--- a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
+++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
@@ -2,37 +2,25 @@
chapterprefix=true,%
open=right,%
twoside=true,%
+ paper=a4,%
logofile={logo.png},%
thesistype=master,%
- biblatex=true,%
UKenglish,%
]{se2thesis}
\listfiles
\usepackage[ngerman,main=UKenglish]{babel}
\usepackage{blindtext}
\usepackage[%
- group-minimum-digits=4,%
- list-final-separator={, and },%
- add-integer-zero=false,%
- free-standing-units,%
- round-mode=figures,%
- round-precision=3,%
- detect-weight=true,%
- separate-uncertainty=true,%
- uncertainty-mode=separate,%
-]{siunitx}
-
-\usepackage[newfloat=true]{minted}
-\setminted{%
- autogobble,%
- breaklines=true,%
- fontsize=\footnotesize,%
- linenos=false,%
- resetmargins=true,%
- xleftmargin=1em,%
- xrightmargin=1em,%
- frame=single,%
-}
+ csquotes=true,%
+ booktabs=true,%
+ siunitx=true,%
+ minted=true,%
+ selnolig=true,%
+ widowcontrol=false,%
+ microtype=true,%
+ biblatex=true,%
+ cleveref=true,%
+]{se2packages}
\begin{filecontents}{\jobname.bib}
@book{Knu86,
@@ -43,18 +31,14 @@
\end{filecontents}
\addbibresource{\jobname.bib}
-\usepackage{booktabs}
-
-\usepackage{csquotes}
-
\usepackage{hyperref}
-\usepackage{cleveref}
\author{Stephan Lukasczyk}
\title{A Master Thesis Example Document}
\degreeprogramme{Computer Science}
\matrnumber{0815}
\supervisor{Prof.\,Dr.~Max Mustermann}
+\external{Prof.~John Doe,~PhD}
\advisor{Marianne Musterfrau}
\department{Faculty of Examples}
\institute{Chair of Example}
diff --git a/macros/latex/contrib/se2thesis/se2thesis.dtx b/macros/latex/contrib/se2thesis/se2thesis.dtx
index 525d551869..8826356f6c 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.dtx
+++ b/macros/latex/contrib/se2thesis/se2thesis.dtx
@@ -80,6 +80,46 @@
% They are available as separate packages, however, to allow their reuse for
% other classes, packages, and projects, as well.
%
+% \subsection{Installation}\label{sec:doc-intro-install}
+%
+% The \pkg{se2thesis} bundle is available from \CTAN\footnote{
+% \href{https://ctan.org/pkg/se2thesis}{ctan.org/pkg/se2thesis}
+% }.
+% It is part of both \MiKTeX{} and \TeXLive.
+% You can find its development version from GitHub\footnote{
+% \href{https://github.com/se2p/se2thesis}{github.com/se2p/se2thesis}
+% }.
+% The easiest way of installing it is through your \TeX{} distribution;
+% please check your distribution's documentation on this.
+% Note that it might be necessary to update your \TeX{} distribution
+% because they might not provide you updates;
+% for example, there is a new version of \TeXLive{} every year
+% which needs to be installed separately.
+% If you have installed an older version of \pkg{se2thesis}
+% consider updating it to the latest version available from \CTAN{}
+% through your distribution.
+%
+% For manual installation, we recommend to clone the Git repository
+% and run the \texttt{l3build} tool that we also use for building the bundle.
+% Running |l3build ctan| builds the source files and compiles the documentation.
+% This creates a folder |build| containing these artefacts;
+% |build/doc| contains the documentation,
+% |build/local| the source files.
+% See the documentation of \texttt{l3build} and your \TeX{} distribution
+% on how to install them manually.
+% Please note that \texttt{l3build} also provides a |l3build install| target
+% to install the bundle files to your local texmf tree.
+%
+% The “Island of \TeX{}” project provides Docker images of \TeXLive.
+% If you do not want to install/update \TeXLive{} on your system
+% you might want to consider their \texttt{latest} image,
+% which contains a recent \TeXLive{} 2023 build.
+% They build their images weekly,
+% thus also recent releases of \pkg{se2thesis} will be part of the image
+% soon after their release date.
+%
+% \subsection{General Macros}\label{sec:doc-intro-macros}
+%
% They all have in common one macro, \cs{IfFormatAtLeastTF};
% this macro is part of the latest \LaTeX{} kernel.
% However, not all users might have upgraded their \TeX{} installation
@@ -128,7 +168,7 @@
%
% However, we recommend to use a couple of further packages, together with some
% further options to those package. We describe these settings in
-% \cref{sec:doc-se2thesis-pkgs}.
+% \cref{sec:doc-se2packages}.
% Please consider looking at this section when starting to write your document.
%
% Before we start with a detailed documentation of the class, we explain one
@@ -151,7 +191,7 @@
% \end{syntax}
% Set the base document class.
% Values are \cls{scrreprt}, \cls{scrartcl}, or \cls{scrbook}.
-% Default is |scrreprt|.
+% Default is |scrbook|.
% \end{function}
%
% \begin{function}{paper}
@@ -159,7 +199,7 @@
% |paper| = \meta{choice}
% \end{syntax}
% Set the paper format.
-% Possible values are |a4|, |a5|, or |b5|.
+% Possible values are |a4| or |b5|.
% Default is |a4|.
% \end{function}
%
@@ -182,14 +222,6 @@
% and |phd| for a PhD thesis.
% \end{function}
%
-% \begin{function}{biblatex}
-% \begin{syntax}
-% |biblatex| = \meta{true,false}
-% \end{syntax}
-% Whether \cls{se2thesis} shall load the \pkg{biblatex} package together with
-% some settings automatically.
-% \end{function}
-%
% \begin{function}{colormode}
% \begin{syntax}
% |colormode| = \meta{choice}
@@ -354,164 +386,6 @@
% page numbers in the outer margin and the headmarks split from the page numbers
% by a vertical bar.
%
-% \subsection{Recommended additional packages}\label{sec:doc-se2thesis-pkgs}
-%
-% Several packages can be useful for writing a thesis.
-% We list them in this section; for the recommended option settings, please have
-% a look at our examples.
-% Please note that you might not need all these packages, however, having a look
-% at them (especially their documentation) might give you an insight, whether to
-% use a package.
-% Our general recommendation is to use as few packages as you can; some might
-% have conflicts, others basically do the same or are outdated.
-% Please consider reading the documentation of each package you are using to
-% figure out whether they have any conflicts with other packages~(for example,
-% one cannot use the recommended \pkg{siunitx} package together with
-% \pkg{SIunits}) or they might require to be loaded at special places in your
-% preamble~(for example, \pkg{hyperref} is usually meant to be loaded as the
-% last package, except you are also using \pkg{cleveref}, which needs to be
-% loaded \emph{after} \pkg{hyperref}).
-%
-% \subsubsection{Quoting with \pkg{csquotes}}
-%
-% The \pkg{csquotes} package allows for intelligent quoting of text.
-% While verbose quotes are not that common on computer science, the package
-% still provides some useful macros to the user.
-%
-% \subsubsection{Number formatting with \pkg{siunitx}}
-%
-% While \pkg{siunitx}'s original purpose was to format physical quantities, it
-% provides a lot of useful features when typesetting theses~(and other
-% documents) in computer science.
-% When you skim through its documentation, especially look at the \cmd{\qty} and
-% \cmd{\num} macros, as well as the section on typesetting tabular material.
-% We also recommend reading an extensive discussion on number formatting,
-% precision of presented numbers, and many more related topics in Beyer et al.'s
-% journal paper on requirements and solutions for reliable
-% benchmarking~\cite{DBLP:journals/sttt/BeyerLW19}.
-%
-% When using the \pkg{siunitx} package, we recommend adding the following lines
-% to your document's preamble
-% \begin{LaTeXdemo}[code only]
-% \usepackage[
-% group-minimum-digits=4,
-% list-final-separator={, and },
-% add-integer-zero=false,
-% free-standing-units,
-% round-mode=figures,
-% round-precision=3,
-% detect-weight=true,
-% detect-inline-weight=math,
-% separate-uncertainty=true,
-% uncertainty-mode=separate,
-% ]{siunitx}
-% \end{LaTeXdemo}
-%
-% \subsubsection{Code listings with \pkg{minted}}
-%
-% We prefer using the \pkg{minted} package for code listings.
-% However, this package requires the installation of Python and the setting of
-% the |-shell-escape| option to your \TeX{} engine.
-% Please read the package's documentation to set it up.
-% If you do not want to install Python and the dependencies, we also provide
-% settings for the alternative \pkg{listings} package in the next subsection.
-%
-% When using \pkg{minted} we recommend the following settings:
-% \begin{LaTeXdemo}[code only]
-% \usepackage[newfloat=true]{minted}
-% \setminted{
-% autogobble,
-% breaklines=true,
-% fontsize=\footnotesize,
-% linenos=false,
-% resetmargins=true,
-% xleftmargin=1em,
-% xrightmargin=1em,
-% frame=single,
-% }
-% \end{LaTeXdemo}
-%
-% \subsubsection{Code listing with \pkg{listings}}
-%
-% In case you do not want to use the aforementioned \pkg{minted} package, please
-% consider using \pkg{listings} for typesetting your code listings.
-% \begin{LaTeXdemo}[code only]
-% \usepackage{listings}
-% \lstset{
-% frame=single,
-% extendedchars=true,
-% basicstyle=\footnotesize\ttfamily,
-% keywordstyle=\color{blue}\bfseries,
-% showstringspaces=false,
-% showspaces=false,
-% tabsize=2,
-% breaklines=true,
-% showtabs=false,
-% captionpos=t,
-% }
-% \end{LaTeXdemo}
-%
-% Please be aware to use \emph{either} \pkg{minted} \emph{or} \pkg{listings}!
-%
-% \subsubsection{Designing tables}
-%
-% A basically mandatory package to all users of tables is the \pkg{booktabs}
-% package.
-% Especially its documentation is a must read!
-% It provides a large variety of hints for designing tables,
-% most notably that one should never ever use vertical lines;
-% horizontal lines should be used sparsely; \pkg{booktabs} provides three macros
-% for lines that shall be used: \cmd{\toprule} for a rule on the top of a table,
-% above the column heads, \cmd{\midrule} to separate column heads and the
-% content but, and \cmd{\bottomrule} to mark the bottom of a table.
-%
-% Note that captions of tables shall be put \emph{above} the table whereas
-% captions of figures shall go \emph{below} the figure.
-% The rationale is that a figure should be more of less self explaining whereas
-% a table almost always needs some explanation.
-%
-% Unfortunately, the distances when using a \cmd{\caption} above a table are
-% wrong by default; when creating tables, consider loading the \pkg{hvfloats}
-% package and use its \cmd{\tabcaption} instead of \cmd{\caption} for tables.
-% The \pkg{hvfloats} package furthermore provides additional useful things to
-% typeset all kinds of floats.
-%
-% \subsubsection{Use \pkg{biblatex} for bibliographic references}
-%
-% The standard way of typesetting bibliographic references was using
-% \BibTeX.
-% The original \BibTeX, however, seems to be very outdated in
-% various ways: it originally supported only 7\,bit character sets and creating
-% citation styles requires the usage of an archaic language.
-% \BibLaTeX resolves many of the drawbacks of \BibTeX;
-% when combined with the |biber| engine, it supports full UTF-8 unicode,
-% therefore correct sorting of the references now works out of the box; also
-% creating citation styles can now be done using simple \LaTeX{} commands.
-%
-% For easier usage, we provide the load-time option |biblatex| that already sets
-% all settings~(see \cref{sec:doc-se2thesis-options}.
-% Set this options to \cls{se2thesis} and add your reference file using the
-% \cmd{\addbibresource} macro. \cmd{\printbibliography} will print your
-% references.
-%
-% \subsubsection{Use \pkg{cleveref} for internal references}
-%
-% \LaTeX{} provides an easy-to-use reference mechanism using the \cmd{\label}
-% and \cmd{\ref} macros.
-% However, this requires some manual effort and the text needs to specify
-% whether a reference is to a figure, section, or table.
-% We often see things in drafts such as \enquote{we discuss our findings in 4};
-% but what is \enquote{4} here?
-% Is it a section, a table, a figure?
-% To avoid such confusion, use the \pkg{cleveref} package, which automatically
-% infers the type of the reference~(see its documentation on how this works).
-% The \pkg{cleveref} package furthermore avoids one additional mistake: between
-% the name of the element and its reference one needs to have a non-breaking
-% space that often is forgotten.
-%
-% Please note that, in contrast to most other packages, \pkg{cleveref} has to be
-% loaded \emph{after} the \pkg{hyperref} package!
-%
% \subsection{Abstract for the thesis}\label{sec:doc-se2thesis-abstract}
%
% Each thesis shall come with an abstract that summarises its content.
@@ -648,12 +522,6 @@
% question;
% however, this can also be arbitrary text.
%
-% \begin{thebibliography}{9}
-% \bibitem{DBLP:journals/sttt/BeyerLW19} Dirk Beyer, Stefan Löwe, and Philipp
-% Wendler: \emph{Reliable benchmarking: requirements and solutions}. STTT
-% 21(1): 1--29 (2019)
-% \end{thebibliography}
-%
% \end{documentation}
%
% \clearpage
@@ -721,7 +589,7 @@
%
% Identify the class and give the overall version number.
% \begin{macrocode}
-\ProvidesExplClass {se2thesis} {2023-01-27} {2.1.0}
+\ProvidesExplClass {se2thesis} {2023-04-18} {3.0.0}
{A thesis class for the Chair of Software Engineering II}
% \end{macrocode}
%
@@ -788,14 +656,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\l_@@_biblatex_bool}
-% The user wants to load the \pkg{biblatex} package together with our
-% settings.
-% \begin{macrocode}
-\bool_new:N \l_@@_biblatex_bool
-% \end{macrocode}
-% \end{macro}
-%
% Define internal variables to hold the values of the fields of the title
% page.
% \begin{macro}
@@ -886,9 +746,9 @@
class / scrartcl .code:n = \tl_gset:Nn \l_@@_base_class_tl {scrartcl},
class / book .meta:n = {class=scrbook},
class / scrbook .code:n = \tl_gset:Nn \l_@@_base_class_tl {scrbook},
- class .initial:n = scrreprt,
+ class .initial:n = scrbook,
- paper .choices:nn = {a4,a5,b5}{
+ paper .choices:nn = {a4,b5}{
\int_gset_eq:NN \l_@@_paper_int \l_keys_choice_int
},
paper .initial:n = a4,
@@ -911,9 +771,6 @@
},
thesistype .initial:n = master,
- biblatex .bool_gset:N = \l_@@_biblatex_bool,
- biblatex .initial:n = false,
-
colormode .choices:nn = {cmyk,rgb,bw}{
\tl_gset_eq:NN \l_@@_colormode_tl \l_keys_choice_tl
},
@@ -986,86 +843,6 @@
\RequirePackage{se2fonts}
% \end{macrocode}
%
-% Load the \pkg{microtype} package.
-% We also set some options to \pkg{microtype}, namely the penalties for widows
-% and orphans (which might also be corrected by \pkg{lua-widow-control} when
-% using \LuaTeX{}) and a thin space around the m-dash.
-% We are aware of the discussion whether to have a space around the m-dash in
-% English, however, we think it looks more beautiful.
-% We took this from \href{https://tex.stackexchange.com/a/109188/14622}{a
-% \TeX{}.StackExchange post}.
-% \begin{macrocode}
-\RequirePackage{microtype}
-\clubpenalty=10000
-\widowpenalty=10000
-\displaywidowpenalty=10000
-\SetExtraKerning{
- encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,EU1,EU2}
-}{
- \textemdash = {167,167},
- — = {167,167}
-}
-% \end{macrocode}
-%
-% When using \LuaTeX{} load the \pkg{lua-widow-control} package for a better
-% control of orphans and widows.
-% \begin{macrocode}
-\ifengineT { \luatexengine }
- {
- \IfFileExists { lua-widow-control.sty }
- { \RequirePackage{lua-widow-control} }
- {
- \msg:nnn { seiithesis }
- { lua-widow-control-not-available }
- {
- Could~ not~ find~ lua-widow-control.sty.~ You~ might~ want~ to~
- install~ it~ for~ better~ control~ over~ orphans~ and~ widows.
- }
- \msg_note:nn { seiithesis } { lua-widow-control-not-available }
- }
- }
-% \end{macrocode}
-%
-% Similarly, load \pkg{ligtype} when using \LuaTeX.
-% \begin{macrocode}
-\ifengineT { \luatexengine }
- {
- \IfFileExists { selnolig.sty }
- { \RequirePackage{selnolig} }
- {
- \msg:nnn { seiithesis }
- { selnolig-not-available }
- {
- Could~ not~ find~ selnolig.sty.~ You~ might~ want~ to~ install~ it~
- for~ better~ ligatures~ control.
- }
- \msg_note:nn { seiithesis } { selnolig-not-available }
- }
- }
-% \end{macrocode}
-%
-% When the user requests the |biblatex| option, also load \pkg{biblatex}
-% \begin{macrocode}
-\bool_if:NT \l_@@_biblatex_bool
- {
- \PassOptionsToPackage
- {
- backend=biber,
- hyperref=auto,
- backref=true,
- style=alphabetic,
- maxnames=100,
- minalphanames=3,
- sorting=nyt,
- giveninits=true,
- }{biblatex}
- \RequirePackage{biblatex}
-% \end{macrocode}
-% End of the \BibLaTeX{} settings.
-% \begin{macrocode}
- }
-% \end{macrocode}
-%
% \subsection{User macros for the title page}
%
% In addition to the macros provided by the \KOMAScript{} classes
@@ -1174,7 +951,12 @@
\dim_if_exist:NF \l_@@_logo_height_dim
{
\dim_new:N \l_@@_logo_height_dim
- \dim_gset:Nn \l_@@_logo_height_dim { 67.5pt }
+ \int_compare:nTF { \l_@@_paper_int=1 }
+ {
+ \dim_gset:Nn \l_@@_logo_height_dim { 67.5pt }
+ } {
+ \dim_gset:Nn \l_@@_logo_height_dim { 56.8pt }
+ }
}
\box_if_exist:NF \l_@@_logo_box
{
@@ -1200,16 +982,9 @@
\setlength{\marginparsep}{8.5cm}
\setlength{\marginparsep}{1em}
}{
- \int_compare:nTF { \l_@@_paper_int=2 }
- {
- \areaset[current]{247pt}{400pt}
- \setlength{\marginparsep}{6.0cm}
- \setlength{\marginparsep}{0.71em}
- }{
- \areaset[current]{303pt}{491pt}
- \setlength{\marginparsep}{7.4cm}
- \setlength{\marginparsep}{0.87em}
- }
+ \areaset[current]{350pt}{567pt}
+ \setlength{\marginparsep}{7.4cm}
+ \setlength{\marginparsep}{0.87em}
}
% \end{macrocode}
%
@@ -1835,7 +1610,7 @@
% We provide the following English translations.
%
% \begin{macrocode}
-\ProvideDictionaryFor{English}{se2translations}[2023/01/27]
+\ProvideDictionaryFor{English}{se2translations}[2023/04/18]
\ProvideDictTranslation{abstract}{abstract}
\ProvideDictTranslation{Abstract}{Abstract}
\ProvideDictTranslation{acknowledgement}{acknowledgement}
@@ -1886,7 +1661,7 @@
% We provide the following German translations.
%
% \begin{macrocode}
-\ProvideDictionaryFor{German}{se2translations}[2023/01/27]
+\ProvideDictionaryFor{German}{se2translations}[2023/04/18]
\ProvideDictTranslation{abstract}{Zusammenfassung}
\ProvideDictTranslation{Abstract}{Zusammenfassung}
\ProvideDictTranslation{acknowledgement}{Danksagung}
diff --git a/macros/latex/contrib/se2thesis/se2thesis.ins b/macros/latex/contrib/se2thesis/se2thesis.ins
index 1ad8d4c021..c3af7cd020 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.ins
+++ b/macros/latex/contrib/se2thesis/se2thesis.ins
@@ -47,6 +47,7 @@ This work consists of the files se2thesis.dtx,
se2thesis.ins,
se2colors.dtx,
se2fonts.dtx,
+ se2packages.dtx,
se2thesis-master-thesis-example.tex
and the derived files se2thesis.pdf,
se2thesis.cls,
@@ -54,6 +55,7 @@ This work consists of the files se2thesis.dtx,
se2translations-german.trsl,
se2colors.sty,
se2fonts.sty,
+ se2packages.sty,
se2thesis-master-thesis-example.bib, and
se2thesis-master-thesis-example.pdf
\endpreamble
@@ -99,6 +101,14 @@ This work consists of the files se2thesis.dtx,
\from{se2fonts.dtx}{package}
}
}
+\generate
+ {%
+ \file{se2packages.sty}
+ {%
+ \from{se2thesis.dtx}{init}
+ \from{se2packages.dtx}{package}
+ }
+ }
\endbatchfile
diff --git a/macros/latex/contrib/se2thesis/se2thesis.pdf b/macros/latex/contrib/se2thesis/se2thesis.pdf
index 89835e4070..dd2d5278ec 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.pdf
+++ b/macros/latex/contrib/se2thesis/se2thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/se2thesis.tex b/macros/latex/contrib/se2thesis/se2thesis.tex
index 6035c60e18..4747857e55 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.tex
+++ b/macros/latex/contrib/se2thesis/se2thesis.tex
@@ -229,6 +229,7 @@ starting at page~\pageref{sec:impl}, for those who are curious.
\DocInput{se2thesis.dtx}
\DocInput{se2colors.dtx}
\DocInput{se2fonts.dtx}
+\DocInput{se2packages.dtx}
\EnableImplementation
\DisableDocumentation
diff --git a/macros/latex/contrib/se2thesis/test.pdf b/macros/latex/contrib/se2thesis/test.pdf
index 1690e75f98..d33ba70794 100644
--- a/macros/latex/contrib/se2thesis/test.pdf
+++ b/macros/latex/contrib/se2thesis/test.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/test.tex b/macros/latex/contrib/se2thesis/test.tex
index 866a44d2f2..79694db902 100644
--- a/macros/latex/contrib/se2thesis/test.tex
+++ b/macros/latex/contrib/se2thesis/test.tex
@@ -1,68 +1,107 @@
-\documentclass[twoside]{scrartcl}
-\usepackage[automark]{scrlayer-scrpage}
-\usepackage{xcolor}
+\documentclass[%
+ chapterprefix=true,%
+ open=right,%
+ twoside=true,%
+ logofile={logo.png},%
+ thesistype=master,%
+ biblatex=true,%
+ UKenglish,%
+ class=book,%
+ paper=b5,%
+]{se2thesis}
+\listfiles
+\usepackage[ngerman,main=UKenglish]{babel}
\usepackage{blindtext}
-%\DeclareLayer[clone=scrheadings.head.oneside,
-% contents={%
-% \color{yellow}%
-% \rule[-\dp\strutbox]%
-% {\layerwidth}{\layerheight}%
-% }%
-%]{scrheadings.head.oneside.background}
-%\DeclareLayer[clone=scrheadings.head.odd,
-% contents={%
-% \color{yellow}%
-% \rule[-\dp\strutbox]%
-% {\layerwidth}{\layerheight}%
-% }%
-%]{scrheadings.head.odd.background}
-%\DeclareLayer[clone=scrheadings.head.even,
-% contents={%
-% \color{yellow}%
-% \rule[-\dp\strutbox]%
-% {\layerwidth}{\layerheight}%
-% }%
-%]{scrheadings.head.even.background}
-%\AddLayersAtBeginOfPageStyle{scrheadings}{%
-% scrheadings.head.oneside.background,%
-% scrheadings.head.odd.background,%
-% scrheadings.head.even.background%
-%}
-\DeclareLayer[%
- clone=scrheadings.foot.odd,%
- contents={%
- {\ }%
- \footnotesize%
- {\color{blue}\headmark}%
- \hspace*{0.75cm}%
- {\color{blue}\rule[-5pt]{1.25pt}{15pt}}%
- \hspace*{0.75cm}%
- \begin{minipage}[b]{1.5cm}%
- \normalsize\textbf{\pagemark}%
- \end{minipage}%
- \hspace{-1.85cm}%
- }%
-]{scrheadings.foot.odd.slcd}
-\DeclareLayer[%
- clone=scrheadings.foot.even,%
- contents={%
- \null\hspace{-1.85cm}%
- \footnotesize%
- \begin{minipage}[b]{1.5cm}
- \raggedleft\normalsize\textbf{\pagemark}%
- \end{minipage}%
- \footnotesize%
- \hspace*{0.75cm}%
- {\color{blue}\rule[-5pt]{1.25pt}{15pt}}%
- \hspace*{0.75cm}%
- {\color{blue}\headmark}%
- }%
-]{scrheadings.foot.even.slcd}
-\AddLayersAtBeginOfPageStyle{scrheadings}{%
- scrheadings.foot.odd.slcd,%
- scrheadings.foot.even.slcd%
+\usepackage[%
+ group-minimum-digits=4,%
+ list-final-separator={, and },%
+ add-integer-zero=false,%
+ free-standing-units,%
+ round-mode=figures,%
+ round-precision=3,%
+ detect-weight=true,%
+ separate-uncertainty=true,%
+ uncertainty-mode=separate,%
+]{siunitx}
+
+\usepackage[newfloat=true]{minted}
+\setminted{%
+ autogobble,%
+ breaklines=true,%
+ fontsize=\footnotesize,%
+ linenos=false,%
+ resetmargins=true,%
+ xleftmargin=1em,%
+ xrightmargin=1em,%
+ frame=single,%
}
-\pagestyle{scrheadings}
+
+\begin{filecontents}{\jobname.bib}
+ @book{Knu86,
+ author = {Knuth, Donald E.},
+ year = {1986},
+ title = {The \TeX book},
+ }
+\end{filecontents}
+\addbibresource{\jobname.bib}
+
+\usepackage{booktabs}
+
+\usepackage{csquotes}
+
+\usepackage{hyperref}
+\usepackage{cleveref}
+
+\author{Stephan Lukasczyk}
+\title{A Master Thesis Example Document}
+\degreeprogramme{Computer Science}
+\matrnumber{0815}
+\supervisor{Prof.\,Dr.~Max Mustermann}
+\advisor{Marianne Musterfrau}
+\department{Faculty of Examples}
+\institute{Chair of Example}
+\location{Passau}
+
\begin{document}
+
+\frontmatter
+
+\maketitle
+
+\authorshipDeclaration
+
+\begin{abstract}
+ An English abstract to the thesis.
+\end{abstract}
+
+\begin{abstract}[german]
+ Eine deutschsprachige Zusammenfassung der Arbeit.
+\end{abstract}
+
+\begin{acknowledgements}
+ Some acknowledgements.
+\end{acknowledgements}
+
+\tableofcontents
+
+\mainmatter
+
\blinddocument
-\end{document} \ No newline at end of file
+
+\section{Further Examples}
+
+We could reference the \TeX{} book~\cite{Knu86}.
+
+\begin{resq}
+ What is \(41 + 1\)?
+\end{resq}
+
+\begin{summary}{Research Question 1}
+ It's 42, obviously!
+\end{summary}
+
+\backmatter
+
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/required/babel/base/README.md b/macros/latex/required/babel/base/README.md
index d355b868d3..1ecd1bfdba 100644
--- a/macros/latex/required/babel/base/README.md
+++ b/macros/latex/required/babel/base/README.md
@@ -1,6 +1,6 @@
-## Babel 3.87
+## Babel 3.88
-2023-03-28
+2023-04-18
This package manages culturally-determined typographical (and other)
rules, and hyphenation patterns for a wide range of languages. Many
@@ -10,9 +10,9 @@ is a set of ini files for about 250 languages.
The latest stable version is available on <https://ctan.org/pkg/babel>.
-Changes in version 3.87 are described in:
+Changes in version 3.88 are described in:
-https://latex3.github.io/babel/news/whats-new-in-babel-3.87.html
+https://latex3.github.io/babel/news/whats-new-in-babel-3.88.html
Apart from the manual, you can find information on some aspects of babel at:
@@ -48,18 +48,18 @@ respective authors.
### Summary of latest changes
```
-3.87 2023-03-28
- * Fixes:
- - Typo in 'syllable' counter name in Korean (#225).
- - Language leakage with xetex and on-the-fly loading in a few
- locales.
- - Misplaced text with tikz. Fixed thanks to Salim Bou (#211).
- - Misplaced text body with 'multicol' and RTL (#228).
- * 'hyphenrules=' is applied with the current locale.
- * Updates to the CLDR: Swedish, Swahili, Tamil, Telugu, Thai,
- Tigrinya, Turkmen, Tongan, Turkish, Tasawaq, Central Atlas
- Tamazight, Uyghur, Ukrainian, Urdu, Vietnamese, Yiddish,
- Yoruba, Cantonese.
+3.88 2023-04-18
+ * 37 new locale files: Abkhazian, Afar, Atsam, Baluchi, Bhojpuri,
+ Blin, Corsican, Erzya, Ga, Geez, Guarani, Haryanvi, Inuktitut,
+ Jju, Ligurian, Muscogee, Northern Sotho, Nyanja, N’Ko,
+ Papiamento, Prussian, Rajasthani, Saho, Sicilian, Silesian,
+ South Ndebele, Southern Sotho, Swati, Taroko, Tigre, Tok Pisin,
+ Tsonga, Tswana, Tyap, Venda, Volapük, Wolaytta.
+ * Fixed a few month names in Greek locales (thanks to Günter Milde).
+ * New hook 'begindocument'.
+ * Feature preview: option 'casing' in '\babelprovide' (requires a
+ future change in the LaTeX kernel).
+ * Some minor changes.
```
### Previous changes
diff --git a/macros/latex/required/babel/base/babel.dtx b/macros/latex/required/babel/base/babel.dtx
index 76a7168fb2..937d698789 100644
--- a/macros/latex/required/babel/base/babel.dtx
+++ b/macros/latex/required/babel/base/babel.dtx
@@ -32,7 +32,7 @@
%
% \iffalse
%<*filedriver>
-\ProvidesFile{babel.dtx}[2023/03/28 v3.87 The Babel package]
+\ProvidesFile{babel.dtx}[2023/04/18 v3.88 The Babel package]
\documentclass{ltxdoc}
\GetFileInfo{babel.dtx}
\usepackage{fontspec}
@@ -2579,7 +2579,7 @@ languages.
Polytonic Greek with but with some sections in Italian. Then, the
first attempt should be:
\begin{verbatim}
-\usepackage[italian, greek.polutonico]{babel}
+\usepackage[italian, greek.polutoniko]{babel}
\end{verbatim}
But if, say, accents in Greek are not shown correctly, you can try
\begin{verbatim}
@@ -2791,7 +2791,7 @@ which is not recommended).
\end{note}
\Describe{\localenumeral}{\marg{style}\marg{number}}
-\DescribeOther{\localecounterl}{\marg{style}\marg{counter}}
+\DescribeOther{\localecounter}{\marg{style}\marg{counter}}
\New{3.41} Many `ini` locale files has been extended with information
about non-positional numerical systems, based on those predefined in
@@ -2991,7 +2991,7 @@ expandable, and the available fields are:
extension whose singleton is \m{s} (currently the recognized
singletons are |x|, |t| and |u|). The internal syntax can be somewhat
complex, and this feature is still somewhat tentative. An example is
- \textsf{classiclatin} which sets |extension.x.tag.bcp47| to classic.
+ \textsf{classiclatin} which sets |extension.x.tag.bcp47| to |classic|.
\New{3.75}
\end{description}
@@ -4036,6 +4036,11 @@ three \TeX{} parameters (|#1|, |#2|, |#3|), with the meaning given:
\item[afterreset] \New{3.9i} Executed when selecting a language just after
|\originalTeX| is run and reset to its base value, before executing
|\captions|\m{language} and |\date|\m{language}.
+\item[begindocument] \New{3.88} Executed before the code written by
+ |ldf| files with |\AtBeginDocument|. The optional argument with the
+ language in this particular case is the language that wrote the code.
+ The special value |/| means ‘return to the core \babel{} definitions’
+ (in other words, what follows hasn’t been written by any language).
% STILL UNDER STUDY:
% \item[beforestart] \New{3.34} Executed either at the beginning of the
% |aux| file (when read at the start of the document), or else at begin
@@ -5295,8 +5300,8 @@ help from Bernd Raichle, for which I am grateful.
% \section{Tools}
%
% \begin{macrocode}
-%<<version=3.87>>
-%<<date=2023/03/28>>
+%<<version=3.88>>
+%<<date=2023/04/18>>
% \end{macrocode}
%
% \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -7222,16 +7227,17 @@ help from Bernd Raichle, for which I am grateful.
\bbl@csarg\newcommand{ev@#2@#3@#1}[\bbl@tempb]}
\newcommand\EnableBabelHook[1]{\bbl@csarg\let{hk@#1}\@firstofone}
\newcommand\DisableBabelHook[1]{\bbl@csarg\let{hk@#1}\@gobble}
-\def\bbl@usehooks#1#2{%
- \ifx\UseHook\@undefined\else\UseHook{babel/*/#1}\fi
+\def\bbl@usehooks{\bbl@usehooks@lang\languagename}
+\def\bbl@usehooks@lang#1#2#3{%
+ \ifx\UseHook\@undefined\else\UseHook{babel/*/#2}\fi
\def\bbl@elth##1{%
- \bbl@cs{hk@##1}{\bbl@cs{ev@##1@#1@}#2}}%
- \bbl@cs{ev@#1@}%
+ \bbl@cs{hk@##1}{\bbl@cs{ev@##1@#2@}#3}}%
+ \bbl@cs{ev@#2@}%
\ifx\languagename\@undefined\else % Test required for Plain (?)
- \ifx\UseHook\@undefined\else\UseHook{babel/\languagename/#1}\fi
+ \ifx\UseHook\@undefined\else\UseHook{babel/#1/#2}\fi
\def\bbl@elth##1{%
- \bbl@cs{hk@##1}{\bbl@cl{ev@##1@#1}#2}}%
- \bbl@cl{ev@#1}%
+ \bbl@cs{hk@##1}{\bbl@cs{ev@##1@#2@#1}#3}}%
+ \bbl@cs{ev@#2@#1}%
\fi}
% \end{macrocode}
%
@@ -7247,7 +7253,7 @@ help from Bernd Raichle, for which I am grateful.
adddialect=2,patterns=2,defaultcommands=0,encodedcommands=2,write=0,%
beforeextras=0,afterextras=0,stopcommands=0,stringprocess=0,%
hyphenation=2,initiateactive=3,afterreset=0,foreign=0,foreign*=0,%
- beforestart=0,languagename=2}
+ beforestart=0,languagename=2,begindocument=1}
\ifx\NewHook\@undefined\else
\def\bbl@tempa#1=#2\@@{\NewHook{babel/#1}}
\bbl@foreach\bbl@evargs{\bbl@tempa#1\@@}
@@ -7499,8 +7505,10 @@ help from Bernd Raichle, for which I am grateful.
\renewcommand\selectlanguage[1]{}%
\renewcommand\foreignlanguage[2]{#2}%
\global\let\babel@aux\@gobbletwo % Also as flag
- \fi
- \ifcase\bbl@engine\or\pagedir\bodydir\fi} % TODO - a better place
+ \fi}
+\ifcase\bbl@engine\or
+ \AtBeginDocument{\pagedir\bodydir} % TODO - a better place
+\fi
% \end{macrocode}
%
% \end{macro}
@@ -8498,8 +8506,7 @@ help from Bernd Raichle, for which I am grateful.
\def\bbl@clear@ttribs{%
\ifx\bbl@attributes\@undefined\else
\bbl@loopx\bbl@tempa{\bbl@attributes}{%
- \expandafter\bbl@clear@ttrib\bbl@tempa.
- }%
+ \expandafter\bbl@clear@ttrib\bbl@tempa.}%
\let\bbl@attributes\@undefined
\fi}
\def\bbl@clear@ttrib#1-#2.{%
@@ -9822,7 +9829,7 @@ help from Bernd Raichle, for which I am grateful.
\bbl@vforeach{captions,date,import,main,script,language,%
hyphenrules,linebreaking,justification,mapfont,maparabic,%
mapdigits,intraspace,intrapenalty,onchar,transforms,alph,%
- Alph,labels,labels*,calendar,date}%
+ Alph,labels,labels*,calendar,date,casing}%
{\bbl@csarg\let{KVP@##1}\@nnil}%
\global\let\bbl@release@transforms\@empty
\let\bbl@calendars\@empty
@@ -9830,8 +9837,8 @@ help from Bernd Raichle, for which I am grateful.
\global\let\bbl@extend@ini\@gobble
\gdef\bbl@key@list{;}%
\bbl@forkv{#1}{%
- \in@{/}{##1}%
- \ifin@
+ \in@{/}{##1}% With /, (re)sets a value in the ini
+ \ifin@
\global\let\bbl@extend@ini\bbl@extend@ini@aux
\bbl@renewinikey##1\@@{##2}%
\else
@@ -10126,6 +10133,10 @@ help from Bernd Raichle, for which I am grateful.
\\\babel@save\\\@Alph
\let\\\@Alph\<bbl@cntr@\bbl@KVP@Alph @\languagename>}}%
\fi
+ % == Casing ==
+ \bbl@exp{\def\<bbl@casing@\languagename>%
+ {\<bbl@lbcp@\languagename>%
+ \ifx\bbl@KVP@casing\@nnil\else-x-\bbl@KVP@casing\fi}}%
% == Calendars ==
\ifx\bbl@KVP@calendar\@nnil
\edef\bbl@KVP@calendar{\bbl@cl{calpr}}%
@@ -10307,7 +10318,8 @@ help from Bernd Raichle, for which I am grateful.
\fi}%
\ifnum\@tempcnta=\m@ne
\bbl@warning{%
- Requested 'hyphenrules=' for '\languagename' not found.\\%
+ Requested 'hyphenrules' for '\languagename' not found:\\%
+ \bbl@KVP@hyphenrules.\\%
Using the default value. Reported}%
\fi
\fi
@@ -10434,7 +10446,7 @@ help from Bernd Raichle, for which I am grateful.
\ifx\bbl@required@inis\@empty\else
\bbl@replace\bbl@required@inis{ }{,}%
\bbl@foreach\bbl@required@inis{%
- \openin\bbl@readstream=##1.ini
+ \openin\bbl@readstream=babel-##1.ini
\bbl@loop@ini}%
\fi
% == Process stored data ==
@@ -10460,10 +10472,6 @@ help from Bernd Raichle, for which I am grateful.
{\bbl@ini@calendar{##1}}%
{}%
\fi
- \in@{=identification/extension.}{=##1/##2}%
- \ifin@
- \bbl@ini@extension{##2}%
- \fi
\bbl@ifunset{bbl@inikv@##1}{}%
{\csname bbl@inikv@##1\endcsname{##2}{##3}}}%
\bbl@inidata}
@@ -10567,6 +10575,11 @@ help from Bernd Raichle, for which I am grateful.
% is called always (via |\bbl@inisec|), while |\bbl@after@ini| must be
% called explicitly after |\bbl@read@ini| if necessary.
%
+% Although BCP 47 doesn’t treat ‘-x-’ as an extension, the CLDR and
+% many other sources do (as a \textit{private use extension}). For
+% consistency with other single-letter subtags or ‘singletons’, here
+% is considered an extension, too.
+%
% \begin{macrocode}
\def\bbl@iniwarning#1{%
\bbl@ifunset{bbl@@kv@identification.warning#1}{}%
@@ -10576,25 +10589,6 @@ help from Bernd Raichle, for which I am grateful.
Reported }}}
%
\let\bbl@release@transforms\@empty
-% \end{macrocode}
-%
-% BCP 47 extensions are separated by a single letter (eg,
-% |latin-x-medieval|. The following macro handles this special case to
-% create correctly the correspondig info.
-%
-% \begin{macrocode}
-\def\bbl@ini@extension#1{%
- \def\bbl@tempa{#1}%
- \bbl@replace\bbl@tempa{extension.}{}%
- \bbl@replace\bbl@tempa{.tag.bcp47}{}%
- \bbl@ifunset{bbl@info@#1}%
- {\bbl@csarg\xdef{info@#1}{ext/\bbl@tempa}%
- \bbl@exp{%
- \\\g@addto@macro\\\bbl@moreinfo{%
- \\\bbl@exportkey{ext/\bbl@tempa}{identification.#1}{}}}}%
- {}}
-\let\bbl@moreinfo\@empty
-%
\def\bbl@ini@exports#1{%
% Identification always exported
\bbl@iniwarning{}%
@@ -10611,6 +10605,8 @@ help from Bernd Raichle, for which I am grateful.
{\csname bbl@elname@\languagename\endcsname}}%
\bbl@exportkey{tbcp}{identification.tag.bcp47}{}%
\bbl@exportkey{lbcp}{identification.language.tag.bcp47}{}%
+ % Somewhat hackish. TODO
+ \bbl@exportkey{casing}{identification.language.tag.bcp47}{}%
\bbl@exportkey{lotf}{identification.tag.opentype}{dflt}%
\bbl@exportkey{esname}{identification.script.name}{}%
\bbl@exp{\\\bbl@exportkey{sname}{identification.script.name.opentype}%
@@ -10619,7 +10615,9 @@ help from Bernd Raichle, for which I am grateful.
\bbl@exportkey{sotf}{identification.script.tag.opentype}{DFLT}%
\bbl@exportkey{rbcp}{identification.region.tag.bcp47}{}%
\bbl@exportkey{vbcp}{identification.variant.tag.bcp47}{}%
- \bbl@moreinfo
+ \bbl@exportkey{extt}{identification.extension.t.tag.bcp47}{}%
+ \bbl@exportkey{extu}{identification.extension.u.tag.bcp47}{}%
+ \bbl@exportkey{extx}{identification.extension.x.tag.bcp47}{}%
% Also maps bcp47 -> languagename
\ifbbl@bcptoname
\bbl@csarg\xdef{bcp@map@\bbl@cl{tbcp}}{\languagename}%
@@ -11251,9 +11249,29 @@ help from Bernd Raichle, for which I am grateful.
\@namedef{bbl@info@script.tag.opentype}{sotf}
\@namedef{bbl@info@region.tag.bcp47}{rbcp}
\@namedef{bbl@info@variant.tag.bcp47}{vbcp}
-% Extensions are dealt with in a special way
-% Now, an internal \LaTeX{} macro:
-\providecommand\BCPdata[1]{\localeinfo*{#1.tag.bcp47}}
+\@namedef{bbl@info@extension.t.tag.bcp47}{extt}
+\@namedef{bbl@info@extension.u.tag.bcp47}{extu}
+\@namedef{bbl@info@extension.x.tag.bcp47}{extx}
+% \end{macrocode}
+%
+% \LaTeX{} needs to know the BCP 47 codes for some features. For that,
+% it expects |\BCPdata| to be defined. While |language|, |region|,
+% |script|, and |variant| are recognized, |extension.|\m{s} for
+% singletons may change.
+%
+% \begin{macrocode}
+\providecommand\BCPdata{}
+\ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
+ \renewcommand\BCPdata[1]{%
+ \bbl@ifunset{bbl@info@#1.tag.bcp47}%
+ {\bbl@error{Unknown field '#1' in \string\BCPdata.\\%
+ Perhaps you misspelled it.}%
+ {See the manual for details.}}%
+ {\bbl@ifunset{bbl@\csname bbl@info@#1.tag.bcp47\endcsname @\languagename}{}%
+ {\bbl@cs{\csname bbl@info@#1.tag.bcp47\endcsname @\languagename}}}}
+\fi
+% Still somewhat hackish:
+\@namedef{bbl@info@casing.tag.bcp47}{casing}
% \end{macrocode}
%
% With version 3.75 |\BabelEnsureInfo| is executed always, but there is
@@ -11271,6 +11289,7 @@ help from Bernd Raichle, for which I am grateful.
\bbl@ifunset{bbl@lname@##1}{\bbl@load@info{##1}}{}}%
\fi
\bbl@foreach\bbl@loaded{{%
+ \let\bbl@ensuring\@empty % Flag used in a couple of babel-*.tex files
\def\languagename{##1}%
\bbl@ensureinfo{##1}}}}
\@ifpackagewith{babel}{ensureinfo=off}{}%
@@ -12386,7 +12405,9 @@ help from Bernd Raichle, for which I am grateful.
\expandafter\let\expandafter\bbl@afterlang
\csname\CurrentOption.ldf-h@@k\endcsname
\expandafter\let\expandafter\BabelModifiers
- \csname bbl@mod@\CurrentOption\endcsname}%
+ \csname bbl@mod@\CurrentOption\endcsname
+ \bbl@exp{\\\AtBeginDocument{%
+ \\\bbl@usehooks@lang{\CurrentOption}{begindocument}{{\CurrentOption}}}}}%
{\bbl@error{%
Unknown option '\CurrentOption'. Either you misspelled it\\%
or the language definition file \CurrentOption.ldf was not found}{%
@@ -12476,7 +12497,8 @@ help from Bernd Raichle, for which I am grateful.
\else
\bbl@info{Main language set with 'main='. Except if you have\\%
problems, prefer the default mechanism for setting\\%
- the main language. Reported}
+ the main language, ie, as the last declared.\\%
+ Reported}
\fi
% \end{macrocode}
%
@@ -12595,6 +12617,8 @@ help from Bernd Raichle, for which I am grateful.
\DeclareOption*{}
\ProcessOptions*
\fi
+\bbl@exp{%
+ \\\AtBeginDocument{\\\bbl@usehooks@lang{/}{begindocument}{{}}}}%
\def\AfterBabelLanguage{%
\bbl@error
{Too late for \string\AfterBabelLanguage}%
@@ -23176,6 +23200,7 @@ Babel.cjk_breaks = {
\bbl@elt{identification}{derivate}{no}}
\@namedef{bbl@tbcp@nil}{und}
\@namedef{bbl@lbcp@nil}{und}
+\@namedef{bbl@casing@nil}{und} % TODO
\@namedef{bbl@lotf@nil}{dflt}
\@namedef{bbl@elname@nil}{nil}
\@namedef{bbl@lname@nil}{nil}
diff --git a/macros/latex/required/babel/base/babel.ins b/macros/latex/required/babel/base/babel.ins
index 00ede1d332..f89a5a3498 100644
--- a/macros/latex/required/babel/base/babel.ins
+++ b/macros/latex/required/babel/base/babel.ins
@@ -26,7 +26,7 @@
%% and covered by LPPL is defined by the unpacking scripts (with
%% extension .ins) which are part of the distribution.
%%
-\def\filedate{2023/03/28}
+\def\filedate{2023/04/18}
\def\batchfile{babel.ins}
\input docstrip.tex
diff --git a/macros/latex/required/babel/base/babel.pdf b/macros/latex/required/babel/base/babel.pdf
index d729e48170..c9e2caadd7 100644
--- a/macros/latex/required/babel/base/babel.pdf
+++ b/macros/latex/required/babel/base/babel.pdf
Binary files differ
diff --git a/macros/latex/required/babel/base/bbcompat.dtx b/macros/latex/required/babel/base/bbcompat.dtx
index caebb44c38..59a9f961ef 100644
--- a/macros/latex/required/babel/base/bbcompat.dtx
+++ b/macros/latex/required/babel/base/bbcompat.dtx
@@ -30,7 +30,7 @@
%
% \iffalse
%<*dtx>
-\ProvidesFile{bbcompat.dtx}[2023/03/28 v3.87]
+\ProvidesFile{bbcompat.dtx}[2023/04/18 v3.88]
%</dtx>
%
%% File 'bbcompat.dtx'