summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/generic/expkv-opt/README.md2
-rw-r--r--macros/generic/expkv-opt/expkv-opt.dtx15
-rw-r--r--macros/generic/expkv-opt/expkv-opt.pdfbin260700 -> 260616 bytes
-rw-r--r--macros/generic/expkv/README.md2
-rw-r--r--macros/generic/expkv/expkv.dtx961
-rw-r--r--macros/generic/expkv/expkv.pdfbin397919 -> 410888 bytes
-rw-r--r--macros/latex/contrib/paresse/LISEZMOI.md11
-rw-r--r--macros/latex/contrib/paresse/MANIFEST.md64
-rw-r--r--macros/latex/contrib/paresse/README.md5
-rw-r--r--macros/latex/contrib/paresse/paresse-eng.pdfbin560865 -> 584993 bytes
-rw-r--r--macros/latex/contrib/paresse/paresse-fra.pdfbin595118 -> 619794 bytes
-rw-r--r--macros/latex/contrib/paresse/paresse.dtx56
-rw-r--r--macros/latex/contrib/paresse/paresse.pdfbin422473 -> 422824 bytes
-rw-r--r--macros/latex/contrib/pst-pdf/CHANGES3
-rw-r--r--macros/latex/contrib/pst-pdf/Makefile6
-rwxr-xr-xmacros/latex/contrib/pst-pdf/ps4pdf.bat132
-rw-r--r--macros/latex/contrib/pst-pdf/ps4pdf.bat.w9514
-rw-r--r--macros/latex/contrib/pst-pdf/pst-pdf-DE.pdfbin508746 -> 508125 bytes
-rw-r--r--macros/latex/contrib/pst-pdf/pst-pdf-example.pdfbin250157 -> 249990 bytes
-rw-r--r--macros/latex/contrib/pst-pdf/pst-pdf.dtx84
-rw-r--r--macros/latex/contrib/pst-pdf/pst-pdf.pdfbin434072 -> 516267 bytes
-rw-r--r--macros/latex/contrib/realtranspose/README.md31
-rw-r--r--macros/latex/contrib/realtranspose/realtranspose.dtx52
-rw-r--r--macros/latex/contrib/realtranspose/realtranspose.ins28
-rw-r--r--macros/latex/contrib/realtranspose/realtranspose.pdfbin0 -> 89253 bytes
-rw-r--r--macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdfbin40832 -> 40838 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdfbin175600 -> 175600 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalnotes.pdfbin119720 -> 119720 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-sidenotes.pdfbin145283 -> 145283 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-tabular.pdfbin187373 -> 187373 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdfbin121150 -> 121150 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses.pdfbin121318 -> 121318 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-antilabe.pdfbin128416 -> 128416 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-cross_referencing.pdfbin120386 -> 120386 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdfbin123574 -> 123574 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-glossaries.pdfbin132844 -> 132844 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-indexing.pdfbin185822 -> 185822 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdfbin122378 -> 122378 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdfbin142433 -> 142433 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-linespacing.pdfbin136296 -> 136296 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdfbin156021 -> 156021 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-notes-width.pdfbin126635 -> 126635 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdfbin131284 -> 131284 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-performances.pdfbin133738 -> 133738 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdfbin31060 -> 31053 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdfbin212782 -> 212782 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdfbin188331 -> 188331 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdfbin173338 -> 173338 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdfbin23275 -> 23275 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdfbin93085 -> 93085 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdfbin37801 -> 37801 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdfbin135907 -> 135907 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdfbin190058 -> 190058 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdfbin189289 -> 189289 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdfbin168067 -> 168067 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdfbin189695 -> 189695 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdfbin188621 -> 188621 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdfbin188677 -> 188677 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdfbin188808 -> 188808 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdfbin187768 -> 187768 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdfbin132837 -> 132837 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdfbin173906 -> 173906 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdfbin199864 -> 199864 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdfbin123230 -> 123230 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdfbin144326 -> 144326 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdfbin226079 -> 226079 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdfbin124679 -> 124679 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdfbin120874 -> 120874 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdfbin260966 -> 260966 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdfbin180904 -> 180904 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdfbin116963 -> 116963 bytes
-rw-r--r--macros/latex/contrib/reledmac/migration.pdfbin356983 -> 356983 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledmac.dtx39
-rw-r--r--macros/latex/contrib/reledmac/reledmac.pdfbin2007984 -> 2009886 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledpar.pdfbin988567 -> 988567 bytes
-rw-r--r--macros/latex/contrib/verifica/README4
-rw-r--r--macros/latex/contrib/verifica/example1.pdfbin154466 -> 154319 bytes
-rw-r--r--macros/latex/contrib/verifica/example1.tex2
-rw-r--r--macros/latex/contrib/verifica/example2.pdfbin104112 -> 103994 bytes
-rw-r--r--macros/latex/contrib/verifica/example2.tex2
-rw-r--r--macros/latex/contrib/verifica/example3.pdfbin82320 -> 82107 bytes
-rw-r--r--macros/latex/contrib/verifica/example3.tex2
-rw-r--r--macros/latex/contrib/verifica/example4.pdfbin126244 -> 126073 bytes
-rw-r--r--macros/latex/contrib/verifica/example4.tex2
-rw-r--r--macros/latex/contrib/verifica/example5.pdfbin86894 -> 86793 bytes
-rw-r--r--macros/latex/contrib/verifica/example5.tex2
-rw-r--r--macros/latex/contrib/verifica/verifica-template.tex2
-rw-r--r--macros/latex/contrib/verifica/verifica.dtx13
-rw-r--r--macros/latex/contrib/verifica/verifica.pdfbin865107 -> 880386 bytes
89 files changed, 975 insertions, 559 deletions
diff --git a/macros/generic/expkv-opt/README.md b/macros/generic/expkv-opt/README.md
index c92161eb5a..aa5d63cb02 100644
--- a/macros/generic/expkv-opt/README.md
+++ b/macros/generic/expkv-opt/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv-opt -- parse class and package options with expkv
-Version 2020-07-04 v0.1a
+Version 2020-10-10 v0.1b
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/macros/generic/expkv-opt/expkv-opt.dtx b/macros/generic/expkv-opt/expkv-opt.dtx
index 511cf6bf08..f9a30b7966 100644
--- a/macros/generic/expkv-opt/expkv-opt.dtx
+++ b/macros/generic/expkv-opt/expkv-opt.dtx
@@ -481,8 +481,8 @@ and the derived files expkv-opt.pdf
% \begin{macro}{\ekvoVersion,\ekvoDate}
% Store the packages version and date in two macros.
% \begin{macrocode}
-\newcommand*\ekvoVersion{0.1a}
-\newcommand*\ekvoDate{2020-07-04}
+\newcommand*\ekvoVersion{0.1b}
+\newcommand*\ekvoDate{2020-10-10}
% \end{macrocode}
% \end{macro}
% And we report who we are and what we need.
@@ -725,11 +725,12 @@ and the derived files expkv-opt.pdf
% commas isn't executed, else this is equivalent to
% |\ekvparse\ekvo@set@k\ekvo@set@kv{#1}|.
% \begin{macrocode}
-\long\def\ekvo@parse#1%
+\protected\long\def\ekvo@parse#1%
{%
\ekv@eq@other#1\ekv@nil\ekv@mark\ekv@parse@eq@other@a
- =\ekv@mark\ekv@parse@eq@active\ekv@stop
+ =\ekv@mark\ekv@parse@eq@active
\ekvo@set@k\ekvo@set@kv
+ \ekvo@tail
}
% \end{macrocode}
% \end{macro}
@@ -737,9 +738,9 @@ and the derived files expkv-opt.pdf
% \begin{macro}[internal]{\ekvo@set@k,\ekvo@set@kv}
% These two macros check whether the key is defined and if so call the handler
% for defined keys and execute the key, else the handler for undefined keys is
-% called.
+% called. They have to clean up a bit of code which is left by |\ekvo@parse|.
% \begin{macrocode}
-\protected\def\ekvo@set@k#1%
+\protected\def\ekvo@set@k#1#2\ekvo@tail
{%
\ekv@ifdefined{\ekvo@name{#1}N}%
{%
@@ -748,7 +749,7 @@ and the derived files expkv-opt.pdf
}%
{\ekvo@handle@undefined@k{#1}}%
}
-\protected\def\ekvo@set@kv#1#2%
+\protected\def\ekvo@set@kv#1#2#3\ekvo@tail
{%
\ekv@ifdefined{\ekvo@name{#1}}%
{%
diff --git a/macros/generic/expkv-opt/expkv-opt.pdf b/macros/generic/expkv-opt/expkv-opt.pdf
index 47257e50d3..140d0c79f3 100644
--- a/macros/generic/expkv-opt/expkv-opt.pdf
+++ b/macros/generic/expkv-opt/expkv-opt.pdf
Binary files differ
diff --git a/macros/generic/expkv/README.md b/macros/generic/expkv/README.md
index c885f8a0d0..730b302b5a 100644
--- a/macros/generic/expkv/README.md
+++ b/macros/generic/expkv/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv -- an expandable key=val implementation
-Version 2020-07-04 v1.4
+Version 2020-10-10 v1.5
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/macros/generic/expkv/expkv.dtx b/macros/generic/expkv/expkv.dtx
index f804e6ee0f..3cd8479be5 100644
--- a/macros/generic/expkv/expkv.dtx
+++ b/macros/generic/expkv/expkv.dtx
@@ -70,6 +70,7 @@ and the derived files expkv.pdf
\RequirePackage{array}
\RequirePackage{collcell}
\RequirePackage{siunitx}
+\DeclareSIUnit\ops{ops}
\RequirePackage{xcolor}
\RequirePackage{caption}
\RequirePackage{microtype}
@@ -102,6 +103,19 @@ and the derived files expkv.pdf
\definecolor{expkvred}{HTML}{9F393D}
\colorlet{expkvgrey}{black!75}
\makeatletter
+\newcommand*\expFormat
+ {^^A
+ {^^A
+ \rmfamily
+ \bfseries
+ {\color{expkvgrey}e\kern-.05em x\kern-.05em}^^A
+ \lower.493ex\hbox{{\color{expkvgrey}P}}^^A
+ }^^A
+ }
+\newcommand*\kvstyle
+ {^^A
+ \normalfont\rmfamily\bfseries\color{expkvred}^^A
+ }
\newcommand*\expkv
{^^A
\texorpdfstring
@@ -158,7 +172,7 @@ and the derived files expkv.pdf
\DoNotIndex{\def,\edef,\,,\=,\begingroup,\catcode,\chardef,\csname,\endcsname}
\DoNotIndex{\endgroup,\endinput,\errmessage,\expandafter,\input,\let,\long}
\DoNotIndex{\protected,\ProvidesFile,\ProvidesPackage,\relax,\space}
-\DoNotIndex{\@,\unexpanded,\string,\expanded,\detokenize}
+\DoNotIndex{\@,\unexpanded,\string,\expanded,\detokenize,\meaning,\lastnamedcs}
\DoNotIndex{\ifcsname}
\DoNotIndex{\ifx}
\DoNotIndex{\else}
@@ -182,7 +196,10 @@ and the derived files expkv.pdf
{^^A
\huge\expkv
\\[\medskipamount]
- \Large an expandable \kv\ implementation^^A
+ \Large an {\expFormat}andable
+ \meta{{\kvstyle k}\kern-.05em ey}=^^A
+ \meta{{\kvstyle v}\kern-.05em alue}
+ implementation^^A
}{expkv - an expandable <key>=<value> implementation}^^A
}
\date{\ekvDate\space v\ekvVersion}
@@ -198,10 +215,10 @@ and the derived files expkv.pdf
% \begin{abstract}
% \noindent\parfillskip=0pt
% \expkv\ provides a small interface for \kv\ parsing. The parsing macro is
-% fully expandable, the \meta{code} of your keys might be not. \expkv\ is pretty
-% fast, but not the fastest available \kv\ solution (\pkg{keyval} is one and a
-% half times as fast, but not expandable and it might strip braces it shouldn't
-% have stripped).
+% \emph{fully expandable}, the \meta{code} of your keys might be not. \expkv\ is
+% \emph{swift}, close to the fastest \kv\ implementation. However it is the
+% fastest which copes with active commas and equal signs and doesn't strip
+% braces accidentally.
% \end{abstract}
%
% \tableofcontents
@@ -259,7 +276,7 @@ and the derived files expkv.pdf
% prefixes allowed for |\let| can prefix those with ``|let|'' in their name,
% accordingly. Neither \set\ nor \key\ are allowed to be empty for new keys.
% \set\ will be used as is inside of |\csname ...\endcsname| and \key\ will get
-% \cs[no-index]{detokenize}d.
+% |\detokenize|d.
%
% \begin{function}{\ekvdef}
% \begin{syntax}
@@ -297,7 +314,8 @@ and the derived files expkv.pdf
% \cs{ekvletkv}\marg{set}\marg{key}\marg{set2}\marg{key2}
% \end{syntax}
% Let the \key\ in \set\ to \meta{key2} in \meta{set2}, it is not checked
-% whether that second key exists.
+% whether that second key exists (but take a look at
+% \cs[no-index]{ekvifdefined}).
% \end{function}
%
% \begin{function}{\ekvletkvNoVal}
@@ -305,7 +323,8 @@ and the derived files expkv.pdf
% \cs{ekvletkvNoVal}\marg{set}\marg{key}\marg{set2}\marg{key2}
% \end{syntax}
% Let the \key\ in \set\ to \meta{key2} in \meta{set2}, it is not checked
-% whether that second key exists.
+% whether that second key exists (but take a look at
+% \cs[no-index]{ekvifdefinedNoVal}).
% \end{function}
%
% \begin{function}{\ekvdefunknown}
@@ -349,18 +368,59 @@ and the derived files expkv.pdf
% |\ekvset| should be nestable.
% \end{function}
%
+% \begin{function}{\ekvsetSneaked}
+% \begin{syntax}
+% \cs{ekvsetSneaked}\marg{set}\marg{sneak}\{\kv,\ldots\}
+% \end{syntax}
+% Just like \cs[no-index]{ekvset}, this macro parses the \kv\ pairs within the
+% given \set. But \cs[no-index]{ekvsetSneaked} will behave as if
+% \cs[no-index]{ekvsneak} has been called with \meta{sneak} as its argument as
+% the first action.
+% \end{function}
+%
% \begin{function}{\ekvsetdef}
% \begin{syntax}
% \cs{ekvsetdef}\meta{cs}\marg{set}
% \end{syntax}
% With this function you can define a shorthand macro \meta{cs} to parse keys
% of a specified \set. It is always defined |\long|, but if you need to you
-% can also prefix it with |\global|. The resulting macro is a bit faster than
-% the idiomatic definition:\par
+% can also prefix it with |\global|. The resulting macro is faster than but
+% else equivalent to the idiomatic definition:\par
% \texttt
% {\string\long\string\def\meta{cs}\#1\{\string\ekvset\marg{set}\{\#1\}\}}
% \end{function}
%
+% \begin{function}{\ekvsetSneakeddef}
+% \begin{syntax}
+% \cs{ekvsetSneakeddef}\meta{cs}\marg{set}
+% \end{syntax}
+% Just like \cs[no-index]{ekvsetdef} this defines a shorthand macro \meta{cs},
+% but this macro will make it a shorthand for \cs[no-index]{ekvsetSneaked},
+% meaning that \meta{cs} will take two arguments, the first being stuff that
+% should be given to \cs[no-index]{ekvsneak} and the second the \kv\ list. The
+% resulting macro is faster than but else equivalent to the idiomatic
+% definition:\par
+% \texttt
+% {%
+% \string\long\string\def\meta{cs}\#1\#2\{^^A
+% \string\ekvsetSneaked\marg{set}\{\#1\}\{\#2\}\}^^A
+% }
+% \end{function}
+%
+% \begin{function}{\ekvsetdefSneaked}
+% \begin{syntax}
+% \cs{ekvsetSneakeddef}\meta{cs}\marg{set}\marg{sneaked}
+% \end{syntax}
+% And this one behaves like \cs[no-index]{ekvsetSneakeddef} but with a fixed
+% \meta{sneaked} argument. So the resulting macro is faster than but else
+% equivalent to the idiomatic definition:\par
+% \texttt
+% {%
+% \string\long\string\def\meta{cs}\#1\{^^A
+% \string\ekvsetSneaked\marg{set}\marg{sneaked}\{\#1\}\}^^A
+% }
+% \end{function}
+%
% \begin{function}{\ekvparse}
% \begin{syntax}
% \cs{ekvparse}\meta{cs1}\meta{cs2}\{\kv,\ldots\}
@@ -457,8 +517,9 @@ and the derived files expkv.pdf
% \meta{after} after any other tokens which might have been sneaked before,
% while |\ekvsneakPre| will put \meta{after} before other smuggled stuff.
% This reads and reinserts the remainder of the current |\ekvset| macro and
-% its argument list to do its job. A small usage example is shown in
-% \autoref{sec:sneakex}.
+% its argument list to do its job. After |\ekvset| has parsed the entire \kv\
+% list everything that has been |\ekvsneak|ed will be left in the input
+% stream. A small usage example is shown in \autoref{sec:sneakex}.
% \end{function}
%
% \begin{function}{\ekvchangeset}
@@ -481,20 +542,17 @@ and the derived files expkv.pdf
% \cs{ekv@name@key}\marg{key}
% \end{syntax}
% The names of the macros that correspond to a key in a set are build with
-% these macros. The default definition of |\ekv@name@set| is
-% ``\texttt{\csname ekv@name@set\endcsname{\set}}'' and the default of
-% |\ekv@name@key| is ``\texttt{\csname ekv@name@key\endcsname{\key}}''.
-% The complete name is build using |\ekv@name| which is equivalent to
-% \texttt
-% {^^A
-% \cs[no-index]{ekv@name@set}\marg{set}\cs{ekv@name@key}^^A
-% \{\cs[no-index]{detokenize}\marg{key}\}^^A
-% }.
+% these macros. The name is built from two blocks, one that is formatting the
+% \set\ name (|\ekv@name@set|) and one for formatting the \key\ name
+% (|\ekv@name@key|). To get the actual name the argument to |\ekv@name@key|
+% must be |\detokenize|d. Both blocks are put together (with the necessary
+% |\detokenize|) by |\ekv@name|.
% For |NoVal| keys an additional |N| gets appended irrespective of these
% macros' definition, so their name is
-% \cs[no-index]{\csname ekv@name\endcsname{\set}{\key}N}. You might redefine
-% |\ekv@name@set| and |\ekv@name@key| locally but \emph{don't redefine}
-% |\ekv@name|!
+% \texttt{\cs[no-index]{ekv@name}\marg{set}\marg{key}N}.\par
+% You can use these macros to implement additional functionality or access key
+% macros outside of \expkv, but \emph{don't} change them! \expkv\ relies on
+% their exact definitions internally.
% \end{function}
%
% \subsubsection{Bugs}
@@ -510,7 +568,8 @@ and the derived files expkv.pdf
% \pkg{l3benchmark} package. The key and its usage should be equivalent to
% \begin{lstlisting}
% \protected\ekvdef{test}{height}{\def\myheight{#1}}
-% \ekvset{test}{ height = 6 }
+% \ekvsetdef\expkvtest{test}
+% \expkvtest{ height = 6 }
% \end{lstlisting}
% and only the usage of the key, not its definition, is benchmarked. For the
% impatient, the essence of these comparisons regarding speed and buggy
@@ -527,14 +586,17 @@ and the derived files expkv.pdf
% contained, as most other packages don't provide equivalent features to my
% knowledge. |\ekvparse| is slightly faster than |\ekvset|, but keep in mind
% that it does less. The same is true for |\keyval_parse:NNn| compared to
-% |\keys_set:nn| of \pkg{expl3} (where the difference is much bigger).
-%
-% \paragraph{\pkg{keyval}} is about $1.6$ times faster and has a comparable
-% feature set just a slightly different way how it handles keys without values.
-% That might be considered a drawback, as it limits the versatility, but also as
-% an advantage, as it might reduce doubled code. Keep in mind that as soon as
-% someone loads \pkg{xkeyval} the performance of \pkg{keyval} gets replaced by
-% \pkg{xkeyval}'s.
+% |\keys_set:nn| of \pkg{expl3} (where the difference is much bigger). Comparing
+% just the two, |\ekvparse| is a tad faster than |\keyval_parse:NNn| because of
+% the two tests (for empty key names and only a single equal sign) which are
+% omitted.
+%
+% \paragraph{\pkg{keyval}} is about \SIrange{30}{40}{\percent} faster and has a
+% comparable feature set just a slightly different way how it handles keys
+% without values. That might be considered a drawback, as it limits the
+% versatility, but also as an advantage, as it might reduce doubled code. Keep
+% in mind that as soon as someone loads \pkg{xkeyval} the performance of
+% \pkg{keyval} gets replaced by \pkg{xkeyval}'s.
%
% Also \pkg{keyval} has a bug, which unfortunately can't really be resolved
% without breaking backwards compatibility for \emph{many} documents, namely it
@@ -545,49 +607,58 @@ and the derived files expkv.pdf
% \begin{lstlisting}[belowskip=0pt]
% \setkeys{foo}{bar=baz}
% \setkeys{foo}{bar= {baz}}
-% \setkeys{foo}{bar={ baz}}
-% \setkeys{foo}{bar={{baz}}}
+% \setkeys{foo}{bar={ baz}} % should be ` baz'
+% \setkeys{foo}{bar={{baz}}} % should be `{baz}'
% \end{lstlisting}
%
-% \paragraph{\pkg{xkeyval}} is roughly seventeen times slower, but it provides
-% more functionality, e.g., it has choice keys, boolean keys, and so on. It
-% contains the same bug as \pkg{keyval} as it has to be compatible with it by
-% design (it replaces \pkg{keyval}'s frontend), but also adds even more cases in
-% which braces are stripped that shouldn't be stripped, worsening the situation.
-%
-% \paragraph{\pkg{ltxkeys}} is over 370 times slower -- which is funny, because
-% it aims to be ``[\ldots] faster [\ldots] than these earlier packages
-% [referring to \pkg{keyval} and \pkg{xkeyval}].'' It needs more time to parse
-% zero keys than four of the packages in this comparison need to parse 100 keys.
-% Since it aims to have a bigger feature set than \pkg{xkeyval}, it most
-% definitely also has a bigger feature set than \expkv. Also, it can't parse
-% |\long| input, so as soon as your values contain a |\par|, it'll throw errors.
-% Furthermore, \pkg{ltxkeys} doesn't strip outer braces at all by design, which,
-% imho, is a weird design choice. In addition \pkg{ltxkeys} loads
+% \paragraph{\pkg{xkeyval}} is roughly twenty times slower, but it provides more
+% functionality, e.g., it has choice keys, boolean keys, and so on. It contains
+% the same bug as \pkg{keyval} as it has to be compatible with it by design (it
+% replaces \pkg{keyval}'s frontend), but also adds even more cases in which
+% braces are stripped that shouldn't be stripped, worsening the situation.
+%
+% \paragraph{\pkg{ltxkeys}} is no longer compatible with the \LaTeX\ kernel
+% starting with the release 2020-10-01. It is over 380 times slower -- which is
+% funny, because it aims to be ``[\ldots] faster [\ldots] than these earlier
+% packages [referring to \pkg{keyval} and \pkg{xkeyval}].'' It needs more time
+% to parse zero~keys than five of the packages in this comparison need to parse
+% 100~keys. Since it aims to have a bigger feature set than \pkg{xkeyval}, it
+% most definitely also has a bigger feature set than \expkv. Also, it can't
+% parse |\long| input, so as soon as your values contain a |\par|, it'll throw
+% errors. Furthermore, \pkg{ltxkeys} doesn't strip outer braces at all by
+% design, which, imho, is a weird design choice. In addition \pkg{ltxkeys} loads
% \pkg{catoptions} which is known to introduce bugs (e.g., see
-% \url{https://tex.stackexchange.com/questions/461783}).
-%
-% \paragraph{\pkg{l3keys}} is around six times slower, but has an, imho, great
-% interface to define keys. It strips \emph{all} outer spaces, even if somehow
-% multiple spaces ended up on either end. It offers more features, but is pretty
-% much bound to \pkg{expl3} code. Whether that's a drawback is up to you. Note
-% that this comparison uses the version contained in \TeX Live 2019 (frozen)
-% which is a bit slower than versions starting with \TeX Live 2020.
-%
-% \paragraph{\pkg{pgfkeys}} is around $2.7$ times slower for one key,
-% but has an \emph{enormous} feature set.
+% \url{https://tex.stackexchange.com/questions/461783}). Because it is no longer
+% compatible with the kernel, I stop benchmarking it (so the numbers listed here
+% and in \autoref{tab:comp} regarding \pkg{ltxkeys} were last updated on
+% 2020-10-05).
+%
+% \paragraph{\pkg{l3keys}} is around four and a half times slower, but has an,
+% imho, great interface to define keys. It strips \emph{all} outer spaces, even
+% if somehow multiple spaces ended up on either end. It offers more features,
+% but is pretty much bound to \pkg{expl3} code. Whether that's a drawback is up
+% to you.
+%
+% \paragraph{\pkg{pgfkeys}} is around \num{2.7} times slower for one key if one
+% uses the |/|\meta{path}|/.cd| syntax and almost \SI{20}{\percent} slower if
+% one uses |\pgfqkeys|, but has an \emph{enormous} feature set.
+% To get the best performance |\pgfqkeys| was used in the benchmark. This
+% reduces the overhead for setting the base directory of the benchmark keys by
+% about \SI{43}{\ops} (so both $p_0$ and $T_0$ would be about \SI{43}{\ops}
+% bigger if |\pgfkeys{|\meta{path}|/.cd,|\meta{keys}|}| was used instead).
% It has the same or a very similar bug \pkg{keyval} has. The brace bug (and
% also the category fragility) can be fixed by \pkg{pgfkeyx}, but this package
-% was last updated in 2012 and it slows down |\pgfkeys| by factor~$8$. Also I
-% don't know whether this might introduce new bugs.
+% was last updated in 2012 and it slows down |\pgfkeys| by factor~\num{8}. Also
+% \pkg{pgfkeyx} is no longer compatible with versions of \pkg{pgfkeys} newer
+% than 2020-05-25.
%
-% \paragraph{\pkg{kvsetkeys} with \pkg{kvdefinekeys}} is about $3.7$ times
+% \paragraph{\pkg{kvsetkeys} with \pkg{kvdefinekeys}} is about \num{4.4} times
% slower, but it works even if commas and equals have category codes different
% from 12 (just as some other packages in this list). Else the features of the
% keys are equal to those of \pkg{keyval}, the parser has more features, though.
%
-% \paragraph{\pkg{options}} is $1.5$ times slower for only a single value. It
-% has a much bigger feature set. Unfortunately it also suffers from the
+% \paragraph{\pkg{options}} is \num{1.7} times slower for only a single value.
+% It has a much bigger feature set. Unfortunately it also suffers from the
% premature unbracing bug \pkg{keyval} has.
%
% \paragraph{\pkg{simplekv}} is hard to compare because I don't speak French (so
@@ -597,10 +668,11 @@ and the derived files expkv.pdf
% packages. It has problems with stripping braces and spaces in a hard to
% predict manner just like \pkg{keyval}. Also, while it tries to be robust
% against category code changes of commas and equal signs, the used mechanism
-% fails if the \kv\ list already got tokenized. Regarding unknown keys it got a
+% fails if the \kv\ list already got tokenised. Regarding unknown keys it got a
% very interesting behaviour. It doesn't throw an error, but stores the \val\ in
% a new entry accessible with \cs[no-index]{useKV}. Also if you omit \val\ it
-% stores |true| for that \key. It is around $10\,\%$ faster than \expkv.
+% stores |true| for that \key. For up to three keys, \expkv\ is a bit faster,
+% for more keys \pkg{simplekv} takes the lead.
%
% \paragraph{\pkg{yax}} is over twenty times slower. It has a pretty strange
% syntax, imho, and again a direct equivalent is hard to define. It has the
@@ -640,16 +712,16 @@ and the derived files expkv.pdf
% \toprule
% \rmfamily Package & {$p_1$} & {$p_0$} & {$T_0$}& BB & CF & Date \\
% \midrule
-% keyval & 13.694 & 1.504 & 7.008 & \yes & \yes & 2014-10-28 \\
-% simplekv & 18.739 & 5.325 & 17.68 & \yes & \yes & 2020-04-27 \\
-% \expkv & 22.007 & 3.100 & 10.095 & \no & \no & 2020-06-21 \\
-% options & 24.351 & 12.010 & 20.38 & \yes & \yes & 2015-03-01 \\
-% pgfkeys & 24.621 & 45.474 & 53.25 & \yes & \yes & 2020-06-17 \\
-% kvsetkeys & {\fnsym} & {\fnsym} & 40.0 & \no & \no & 2019-12-15 \\
-% l3keys & 92.103 & 32.724 & 38.05 & \no & \no & 2020-06-18 \\
-% xkeyval & 257.125 & 173.704 & 164.5 & \yes & \yes & 2014-12-03 \\
-% yax & 440.234 & 76.276 & 113.9 & \yes & \yes & 2010-01-22 \\
-% ltxkeys & 3448.339 & 4470.031 & 5241.0 & \no & \no & 2012-11-17 \\
+% keyval & 13.742 & 1.486 & 7.254 & \yes & \yes & 2014-10-28 \\
+% \expkv & 19.701 & 2.169 & 6.592 & \no & \no & 2020-10-10 \\
+% simplekv & 18.334 & 6.971 & 17.710 & \yes & \yes & 2020-04-27 \\
+% pgfkeys & 24.274 & 1.725 & 10.650 & \yes & \yes & 2020-09-05 \\
+% options & 23.600 & 15.638 & 20.830 & \yes & \yes & 2015-03-01 \\
+% kvsetkeys & {\fnsym} & {\fnsym} & 40.290 & \no & \no & 2019-12-15 \\
+% l3keys & 71.309 & 33.131 & 31.590 & \no & \no & 2020-09-24 \\
+% xkeyval & 253.563 & 202.246 & 168.300 & \yes & \yes & 2014-12-03 \\
+% yax & 421.853 & 157.003 & 114.700 & \yes & \yes & 2010-01-22 \\
+% ltxkeys & 3400.142 & 4737.958 & 5368.000 & \no & \no & 2012-11-17 \\
% \bottomrule
% \end{tabular}
% \par
@@ -658,12 +730,12 @@ and the derived files expkv.pdf
% \fnsym For \pkg{kvsetkeys} the linear model used for the other
% packages is a poor fit, \pkg{kvsetkeys} seems to have approximately
% quadratic run-time, the coefficients of the second degree polynomial fit are
-% $p_2=\num{8.811}$, $p_1=\num{36.015}$, and $p_0=\num{81.792}$. Of course the
+% $p_2=\num{8.240}$, $p_1=\num{44.862}$, and $p_0=\num{60.793}$. Of course the
% other packages might not really have linear run-time, but at least from 1~to
% 20~keys the fits don't seem too bad. If one extrapolates the fits for 100
% \kv\ pairs one finds that most of them match pretty well, the exception
% being \pkg{ltxkeys}, which behaves quadratic as well with
-% $p_2=\num{29.496}$, $p_1=\num{2828.933}$, and $p_0=\num{6741.189}$.
+% $p_2=\num{23.500}$, $p_1=\num{2906.634}$, and $p_0=\num{6547.489}$.
% \end{table}
%
% \subsection{Examples}
@@ -672,7 +744,7 @@ and the derived files expkv.pdf
%
% Say we have a macro for which we want to create a \kv\ interface. The macro
% has a parameter, which is stored in the dimension |\ourdim| having a default
-% value from its initialization. Now we want to be able to change that dimension
+% value from its initialisation. Now we want to be able to change that dimension
% with the |width| key to some specified value. For that we'd do
% \begin{lstlisting}
% \newdimen\ourdim
@@ -1010,8 +1082,8 @@ and the derived files expkv.pdf
% \begin{macro}{\ekvVersion,\ekvDate}
% We're on our first input, so lets store the version and date in a macro.
% \begin{macrocode}
-\def\ekvVersion{1.4}
-\def\ekvDate{2020-07-04}
+\def\ekvVersion{1.5}
+\def\ekvDate{2020-10-10}
% \end{macrocode}
% \end{macro}
%
@@ -1034,6 +1106,34 @@ and the derived files expkv.pdf
% restore it at the end of the file, we never care for the actual definition of
% it.
%
+% \begin{macro}[internal]{\ekv@if@lastnamedcs}
+% If the primitive |\lastnamedcs| is available, we can be a bit faster than
+% without it. So we test for this and save the test's result in this macro.
+% \begin{macrocode}
+\begingroup
+ \edef\ekv@tmpa{\string \lastnamedcs}
+ \edef\ekv@tmpb{\meaning\lastnamedcs}
+ \ifx\ekv@tmpa\ekv@tmpb
+ \def\ekv@if@lastnamedcs{\long\def\ekv@if@lastnamedcs##1##2{##1}}
+ \else
+ \def\ekv@if@lastnamedcs{\long\def\ekv@if@lastnamedcs##1##2{##2}}
+ \fi
+ \expandafter
+\endgroup
+\ekv@if@lastnamedcs
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\ekv@empty}
+% Sometimes we have to introduce a token to prevent accidental brace stripping.
+% This token would then need to be removed by |\@gobble| or similar. Instead we
+% can use |\ekv@empty| which will just expand to nothing, that is faster than
+% gobbling an argument.
+% \begin{macrocode}
+\def\ekv@empty{}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[internal]
% {
% \@gobble,\@firstofone,\@firstoftwo,\@secondoftwo,
@@ -1112,28 +1212,89 @@ and the derived files expkv.pdf
%
% \begin{macro}[internal]{\ekv@ifdefined}
% We'll need to check whether something is defined quite frequently, so why not
-% define a macro that does this. The following test is expandable, slower than
-% the typical expandable test for undefined control sequences, but faster for
-% defined ones. Since we want to be as fast as possible for correct input, this
-% is to be preferred.
+% define a macro that does this. The following test is expandable and pretty
+% fast. The version with |\lastnamedcs| is the fastest version to test for an
+% undefined macro I know of (that considers both undefined macros and those with
+% the meaning |\relax|).
% \begin{macrocode}
-\def\ekv@ifdefined#1%
+\ekv@if@lastnamedcs
{%
- \expandafter
- \ifx\csname\ifcsname #1\endcsname #1\else relax\fi\endcsname\relax
- \ekv@fi@secondoftwo
- \fi
- \@firstoftwo
+ \def\ekv@ifdefined#1{\ifcsname#1\endcsname\ekv@ifdef@\fi\@secondoftwo}
+ \def\ekv@ifdef@\fi\@secondoftwo
+ {%
+ \fi
+ \expandafter\ifx\lastnamedcs\relax
+ \ekv@fi@secondoftwo
+ \fi
+ \@firstoftwo
+ }
+ }
+ {%
+ \def\ekv@ifdefined#1%
+ {%
+ \ifcsname#1\endcsname\ekv@ifdef@\fi\ekv@ifdef@false#1\endcsname\relax
+ \ekv@fi@secondoftwo
+ \fi
+ \@firstoftwo
+ }
+ \def\ekv@ifdef@\fi\ekv@ifdef@false{\fi\expandafter\ifx\csname}
+ \long\def\ekv@ifdef@false
+ #1\endcsname\relax\ekv@fi@secondoftwo\fi\@firstoftwo#2#3%
+ {#3}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\ekv@strip,\ekv@strip@a,\ekv@strip@b,\ekv@strip@c}
+% We borrow some ideas of \pkg{expl3}'s \pkg{l3tl} to strip spaces
+% from keys and values. This |\ekv@strip| also strips one level of outer braces
+% \emph{after} stripping spaces, so an input of | {abc} | becomes |abc| after
+% stripping. It should be used with |#1| prefixed by |\ekv@mark|. Also this
+% implementation at most strips \emph{one} space from both sides (which should
+% be fine most of the time, since \TeX\ reads consecutive spaces as a single one
+% during tokenisation).
+% \begin{macrocode}
+\def\ekv@strip#1%
+ {%
+ \long\def\ekv@strip##1%
+ {%
+ \ekv@strip@a
+ ##1\ekv@nil
+ \ekv@mark#1%
+ #1\ekv@nil
+ \ekv@stop
+ }%
+ \long\def\ekv@strip@a##1\ekv@mark#1{\ekv@strip@b##1\ekv@mark}%
+ \long\def\ekv@strip@b##1#1\ekv@nil {\ekv@strip@c##1\ekv@nil}%
+ }
+\ekv@strip{ }
+\long\def\ekv@strip@c\ekv@mark#1\ekv@nil\ekv@mark#2\ekv@nil\ekv@stop#3{#3{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\ekv@expB@unbraceA,\ekv@expB@unbraceA@}
+% To reduce some code doublets while gaining some speed, it is often useful to
+% expand the first token in a definition once. Let's define a wrapper for this.
+% \begin{macrocode}
+\long\def\ekv@expB@unbraceA#1#2%
+ {%
+ \expandafter\ekv@expB@unbraceA@\expandafter{#2}{#1}%
}
+\long\def\ekv@expB@unbraceA@#1#2{#2{#1}}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ekv@name,\ekv@name@set,\ekv@name@key}
% The keys will all follow the same naming scheme, so we define it here.
% \begin{macrocode}
-\def\ekv@name#1#2{\ekv@name@set{#1}\ekv@name@key{\detokenize{#2}}}
\def\ekv@name@set#1{ekv#1(}
\def\ekv@name@key#1{#1)}
+\edef\ekv@name
+ {%
+ \unexpanded\expandafter{\ekv@name@set{#1}}%
+ \unexpanded\expandafter{\ekv@name@key{\detokenize{#2}}}%
+ }
+\ekv@expB@unbraceA{\def\ekv@name#1#2}{\ekv@name}
% \end{macrocode}
% \end{macro}
%
@@ -1158,31 +1319,38 @@ and the derived files expkv.pdf
% package if an |\outer| has been gobbled this way. I consider that good,
% because keys shouldn't be defined |\outer| anyways.
% \begin{macrocode}
-\protected\def\ekv@checkvalid#1#2%
+\edef\ekv@checkvalid
{%
- \ekv@ifempty{#1}%
- {%
+ \unexpanded\expandafter{\ekv@ifempty{#1}}%
+ \unexpanded
+ {{%
\def\ekv@tmp{}%
\errmessage{expkv Error: empty set name not allowed}%
- }%
+ }}%
{%
- \ekv@ifempty{#2}%
+ \unexpanded\expandafter{\ekv@ifempty{#2}}%
+ \unexpanded
{%
- \def\ekv@tmp{}%
- \errmessage{expkv Error: empty key name not allowed}%
+ {%
+ \def\ekv@tmp{}%
+ \errmessage{expkv Error: empty key name not allowed}%
+ }%
+ \@secondoftwo
}%
- \@secondoftwo
}%
- \@gobble
+ \unexpanded{\@gobble}%
}
+\ekv@expB@unbraceA{\protected\def\ekv@checkvalid#1#2}{\ekv@checkvalid}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ekvifdefined,\ekvifdefinedNoVal}
% And provide user-level macros to test whether a key is defined.
% \begin{macrocode}
-\def\ekvifdefined#1#2{\ekv@ifdefined{\ekv@name{#1}{#2}}}
-\def\ekvifdefinedNoVal#1#2{\ekv@ifdefined{\ekv@name{#1}{#2}N}}
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\def\ekvifdefined#1#2}}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}}}
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\def\ekvifdefinedNoVal#1#2}}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}N}}
% \end{macrocode}
% \end{macro}
%
@@ -1191,74 +1359,71 @@ and the derived files expkv.pdf
% \ekvdef,\ekvdefNoVal,\ekvlet,\ekvletNoVal,\ekvletkv,\ekvletkvNoVal,
% \ekvdefunknown,\ekvdefunknownNoVal
% }
-% Set up the key defining macros |\ekvdef| etc.
+% Set up the key defining macros |\ekvdef| etc. We use temporary macros to set
+% these up with a few expansions already done.
% \begin{macrocode}
-\protected\long\def\ekvdef#1#2#3%
+\def\ekvdef#1#2#3#4%
{%
- \ekv@checkvalid{#1}{#2}%
+ \protected\long\def\ekvdef##1##2##3%
+ {#1{\expandafter\def\csname#2\endcsname####1{##3}#3}}%
+ \protected\long\def\ekvdefNoVal##1##2##3%
+ {#1{\expandafter\def\csname#2N\endcsname{##3}#3}}%
+ \protected\def\ekvlet##1##2##3%
+ {#1{\expandafter\let\csname#2\endcsname##3#3}}%
+ \protected\def\ekvletNoVal##1##2##3%
+ {#1{\expandafter\let\csname#2N\endcsname##3#3}}%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+ \protected\long\def\ekvdefunknown##1##2}}}%
{%
- \expandafter\def\csname\ekv@name{#1}{#2}\endcsname##1{#3}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
- }%
- }
-\protected\long\def\ekvdefNoVal#1#2#3%
- {%
- \ekv@checkvalid{#1}{#2}%
- {%
- \expandafter\def\csname\ekv@name{#1}{#2}N\endcsname{#3}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
- }%
- }
-\protected\def\ekvlet#1#2#3%
- {%
- \ekv@checkvalid{#1}{#2}%
- {%
- \expandafter\let\csname\ekv@name{#1}{#2}\endcsname#3%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
- }%
- }
-\protected\def\ekvletNoVal#1#2#3%
- {%
- \ekv@checkvalid{#1}{#2}%
- {%
- \expandafter\let\csname\ekv@name{#1}{#2}N\endcsname#3%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ \expandafter\ekv@expB@unbraceA@\expandafter
+ {%
+ \expandafter\expandafter\expandafter
+ \def\expandafter\csname\ekv@name{##1}{}u\endcsname####1####2{##2}%
+ #3%
+ }%
+ {\ekv@checkvalid{##1}.}%
}%
- }
-\protected\def\ekvletkv#1#2#3#4%
- {%
- \ekv@checkvalid{#1}{#2}%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+ \protected\long\def\ekvdefunknownNoVal##1##2}}}%
{%
- \expandafter\let\csname\ekv@name{#1}{#2}\expandafter\endcsname
- \csname\ekv@name{#3}{#4}\endcsname
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ \expandafter\ekv@expB@unbraceA@\expandafter
+ {%
+ \expandafter\expandafter\expandafter
+ \def\expandafter\csname\ekv@name{##1}{}uN\endcsname####1{##2}%
+ #3%
+ }%
+ {\ekv@checkvalid{##1}.}%
}%
- }
-\protected\def\ekvletkvNoVal#1#2#3#4%
- {%
- \ekv@checkvalid{#1}{#2}%
+ \protected\def\ekvletkv##1##2##3##4%
{%
- \expandafter\let\csname\ekv@name{#1}{#2}N\expandafter\endcsname
- \csname\ekv@name{#3}{#4}N\endcsname
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ #1%
+ {%
+ \expandafter\let\csname#2\expandafter\endcsname
+ \csname#4\endcsname
+ #3%
+ }%
}%
- }
-\protected\def\ekvdefunknown#1#2%
- {%
- \ekv@checkvalid{#1}{.}%
+ \protected\def\ekvletkvNoVal##1##2##3##4%
{%
- \expandafter\def\csname\ekv@name{#1}{}u\endcsname##1##2{#2}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
+ #1%
+ {%
+ \expandafter\let\csname#2N\expandafter\endcsname
+ \csname#4N\endcsname
+ #3%
+ }%
}%
}
-\protected\def\ekvdefunknownNoVal#1#2%
+\edef\ekvdefNoVal
{%
- \ekv@checkvalid{#1}{.}%
- {%
- \expandafter\def\csname\ekv@name{#1}{}uN\endcsname##1{#2}%
- \expandafter\ekv@defsetmacro\csname\ekv@undefined@set{#1}\endcsname{#1}%
- }%
- }
+ {\unexpanded\expandafter{\ekv@checkvalid{#1}{#2}}}%
+ {\unexpanded\expandafter{\ekv@name{#1}{#2}}}%
+ {%
+ \unexpanded{\expandafter\ekv@defsetmacro\csname}%
+ \unexpanded\expandafter{\ekv@undefined@set{#1}\endcsname{#1}}%
+ }%
+ {\unexpanded\expandafter{\ekv@name{#3}{#4}}}%
+ }%
+\expandafter\ekvdef\ekvdefNoVal
% \end{macrocode}
% \end{macro}
%
@@ -1267,20 +1432,24 @@ and the derived files expkv.pdf
% into a control sequence pretty early, so we have to define that control
% sequence.
% \begin{macrocode}
-\protected\def\ekv@defsetmacro#1#2%
+\edef\ekv@defsetmacro
{%
- \ifx#1\relax
- \edef#1##1{\ekv@name@set{#2}\ekv@name@key{\noexpand\detokenize{##1}}}%
- \fi
+ \unexpanded{\ifx#1\relax\edef#1##1}%
+ {%
+ \unexpanded\expandafter{\ekv@name@set{#2}}%
+ \unexpanded\expandafter{\ekv@name@key{##1}}%
+ }%
+ \unexpanded{\fi}%
}
+\ekv@expB@unbraceA{\protected\def\ekv@defsetmacro#1#2}{\ekv@defsetmacro}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ekvifdefinedset}
% \begin{macrocode}
-\def\ekvifdefinedset#1%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\def\ekvifdefinedset#1}}%
{%
- \ekv@ifdefined{\ekv@undefined@set{#1}}%
+ \expandafter\ekv@ifdefined\expandafter{\ekv@undefined@set{#1}}%
}
% \end{macrocode}
% \end{macro}
@@ -1294,11 +1463,13 @@ and the derived files expkv.pdf
% |#1| will be a \texttt{,\textsubscript{13}} and |#2| will be a
% \texttt{=\textsubscript{13}}.
% \begin{macrocode}
+\begingroup
\def\ekvset#1#2{%
\endgroup
-\long\def\ekvset##1##2%
+\ekv@expB@unbraceA{\long\def\ekvset##1##2}%
{%
- \expandafter\ekv@set\csname\ekv@undefined@set{##1}\endcsname
+ \expandafter\expandafter\expandafter
+ \ekv@set\expandafter\csname\ekv@undefined@set{##1}\endcsname
\ekv@mark##2#1\ekv@stop#1{}%
}
% \end{macrocode}
@@ -1315,13 +1486,9 @@ and the derived files expkv.pdf
% \begin{macrocode}
\ekv@gobble@from@mark@to@stop##2\ekv@endset\ekv@stop
% \end{macrocode}
-% else go on with other commas,
+% else go on with other commas.
% \begin{macrocode}
\ekv@set@other##1##2,\ekv@stop,%
-% \end{macrocode}
-% and get the next active comma delimited \kv\ pair.
-% \begin{macrocode}
- \ekv@set##1\ekv@mark
}
% \end{macrocode}
% \end{macro}
@@ -1331,9 +1498,8 @@ and the derived files expkv.pdf
% of |\ekv@set| and unbrace the sneaked stuff.
% \begin{macrocode}
\long\def\ekv@endset
- \ekv@stop\ekv@set@other##1,\ekv@stop,\ekv@set##2\ekv@mark
- ##3%
- {##3}
+ \ekv@stop\ekv@set@other##1\ekv@mark\ekv@stop,\ekv@stop,##2%
+ {##2}
% \end{macrocode}
% \end{macro}
%
@@ -1349,11 +1515,11 @@ and the derived files expkv.pdf
% fast branching based on \TeX's argument grabbing rules and we don't have to
% split after the branching if the equal sign was there.
% \begin{macrocode}
-\long\def\ekv@eq@other##1=##2\ekv@mark##3##4\ekv@stop
+\long\def\ekv@eq@other##1=##2\ekv@mark##3%
{%
##3##1\ekv@stop\ekv@mark##2%
}
-\long\def\ekv@eq@active##1#2##2\ekv@mark##3##4\ekv@stop
+\long\def\ekv@eq@active##1#2##2\ekv@mark##3%
{%
##3##1\ekv@stop\ekv@mark##2%
}
@@ -1373,12 +1539,12 @@ and the derived files expkv.pdf
% If not we split at the equal sign of category other.
% \begin{macrocode}
\ekv@eq@other##2\ekv@nil\ekv@mark\ekv@set@eq@other@a
- =\ekv@mark\ekv@set@eq@active\ekv@stop
+ =\ekv@mark\ekv@set@eq@active
% \end{macrocode}
-% And insert the set name and the next recursion step of |\ekv@set@other|.
+% And insert the set name for the next recursion step of |\ekv@set@other|.
% \begin{macrocode}
##1%
- \ekv@set@other##1\ekv@mark
+ \ekv@mark
}
% \end{macrocode}
% \end{macro}
@@ -1391,39 +1557,41 @@ and the derived files expkv.pdf
% \begin{macrocode}
\long\def\ekv@set@eq@other@a##1\ekv@stop
{%
- \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@other@active@a
- #2\ekv@mark\ekv@set@eq@other@b\ekv@stop
+ \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@other@active
+ #2\ekv@mark\ekv@set@eq@other@b
}
% \end{macrocode}
% The second macro will have been called by |\ekv@eq@active| if no active
% equal sign was found. All it does is remove the excess tokens of that
-% test and forward the \kv\ pair to |\ekv@set@pair|.
+% test and forward the \kv\ pair to |\ekv@set@pair|. Normally we would have to
+% also gobble an additional |\ekv@mark| after |\ekv@stop|, but this mark is
+% needed to delimit |\ekv@set@pair|'s argument anyway, so we just leave it
+% there.
% \begin{macrocode}
-\long\def\ekv@set@eq@other@b
- ##1\ekv@nil\ekv@mark\ekv@set@eq@other@active@a\ekv@stop\ekv@mark
+\ekv@expB@unbraceA
{%
- \ekv@strip{##1}\ekv@set@pair
- }
+ \long\def\ekv@set@eq@other@b
+ ##1\ekv@nil\ekv@mark\ekv@set@eq@other@active\ekv@stop\ekv@mark
+ ##2\ekv@nil=\ekv@mark\ekv@set@eq@active
+ }%
+ {\ekv@strip{##1}{\expandafter\ekv@set@pair\detokenize}\ekv@mark##2\ekv@nil}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\ekv@set@eq@other@active@a,\ekv@set@eq@other@active@b}
-% |\ekv@set@eq@other@active@a| will be called if the \kv\ pair was wrongly
+% \begin{macro}[internal]{\ekv@set@eq@other@active}
+% |\ekv@set@eq@other@active| will be called if the \kv\ pair was wrongly
% split on an equal sign of category other but has an earlier equal sign of
% category active. |##1| will be the contents up to the active equal sign and
% |##2| everything that remains until the first found other equal sign. It has
-% to reinsert the equal sign and passes things on to
-% |\ekv@set@eq@other@active@b| which calls |\ekv@set@pair| on the then
-% correctly split \kv\ pair.
+% to reinsert the equal sign and forward things to |\ekv@set@pair|.
% \begin{macrocode}
-\long\def\ekv@set@eq@other@active@a##1\ekv@stop##2\ekv@nil\ekv@mark
+\ekv@expB@unbraceA
{%
- \ekv@set@eq@other@active@b{##1}##2=%
- }
-\long\def\ekv@set@eq@other@active@b##1%
- {%
- \ekv@strip{##1}\ekv@set@pair
- }
+ \long\def\ekv@set@eq@other@active
+ ##1\ekv@stop##2\ekv@nil#2\ekv@mark
+ \ekv@set@eq@other@b\ekv@mark##3=\ekv@mark\ekv@set@eq@active
+ }%
+ {\ekv@strip{##1}{\expandafter\ekv@set@pair\detokenize}\ekv@mark##2=##3}
% \end{macrocode}
% \end{macro}
%
@@ -1436,15 +1604,16 @@ and the derived files expkv.pdf
##1\ekv@nil\ekv@mark\ekv@set@eq@other@a\ekv@stop\ekv@mark
{%
\ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@active@
- #2\ekv@mark\ekv@set@noeq\ekv@stop
+ #2\ekv@mark\ekv@set@noeq
}
% \end{macrocode}
% If an active equal sign was found in |\ekv@set@eq@active| we'll have to pass
% the now split \kv\ pair on to |\ekv@set@pair|.
% \begin{macrocode}
-\long\def\ekv@set@eq@active@##1\ekv@stop
+\ekv@expB@unbraceA
+ {\long\def\ekv@set@eq@active@##1\ekv@stop##2\ekv@nil#2\ekv@mark\ekv@set@noeq}%
{%
- \ekv@strip{##1}\ekv@set@pair
+ \ekv@strip{##1}{\expandafter\ekv@set@pair\detokenize}\ekv@mark##2\ekv@nil
}
% \end{macrocode}
% \end{macro}
@@ -1456,12 +1625,31 @@ and the derived files expkv.pdf
% to gobble the set-name which was put after these tests by |\ekv@set@other|).
% Else this is a |NoVal| key and the entry is passed on to |\ekv@set@key|.
% \begin{macrocode}
-\long\def\ekv@set@noeq##1\ekv@nil\ekv@mark\ekv@set@eq@active@\ekv@stop\ekv@mark
+\edef\ekv@set@noeq
+ {%
+ \unexpanded
+ {%
+ \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@set@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ }%
+ \unexpanded\expandafter
+ {\ekv@strip{##1}{\expandafter\ekv@set@key\detokenize}\ekv@mark}%
+ }
+\ekv@expB@unbraceA
+ {%
+ \long\def\ekv@set@noeq
+ ##1\ekv@nil\ekv@mark\ekv@set@eq@active@\ekv@stop\ekv@mark
+ }%
+ {\ekv@set@noeq}
+\def\ekv@set@was@blank##1%
{%
- \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F@gobble
- \ekv@ifempty@A\ekv@ifempty@B\@firstofone
- {\ekv@strip{##1}\ekv@set@key}%
+ \def\ekv@set@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ \ekv@strip@a\ekv@mark####1\ekv@nil\ekv@mark##1##1\ekv@nil\ekv@stop
+ ####2\ekv@mark
+ {\ekv@set@other}%
}
+\ekv@set@was@blank{ }
% \end{macrocode}
% \end{macro}
%
@@ -1471,11 +1659,9 @@ and the derived files expkv.pdf
% \begin{macrocode}
\long\def\ekv@endset@other
\ekv@stop
- \ekv@eq@other##1\ekv@nil\ekv@mark\ekv@set@eq@other@a
- =\ekv@mark\ekv@set@eq@active\ekv@stop
- ##2%
- \ekv@set@other##3\ekv@mark
- {}
+ \ekv@eq@other\ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@set@eq@other@a
+ =\ekv@mark\ekv@set@eq@active
+ {\ekv@set}
% \end{macrocode}
% \end{macro}
%
@@ -1524,7 +1710,6 @@ and the derived files expkv.pdf
{%
\ekv@gobble@from@mark@to@stop##3\ekv@endparse\ekv@stop
\ekv@parse@other##1##2##3,\ekv@stop,%
- \ekv@parse##1##2\ekv@mark
}
% \end{macrocode}
% \end{macro}
@@ -1532,7 +1717,7 @@ and the derived files expkv.pdf
% \begin{macro}[internal]{\ekv@endparse}
% \begin{macrocode}
\long\def\ekv@endparse
- \ekv@stop\ekv@parse@other##1,\ekv@stop,\ekv@parse##2\ekv@mark
+ \ekv@stop\ekv@parse@other##1\ekv@mark\ekv@stop,\ekv@stop,%
{}
% \end{macrocode}
% \end{macro}
@@ -1543,9 +1728,9 @@ and the derived files expkv.pdf
{%
\ekv@gobble@from@mark@to@stop##3\ekv@endparse@other\ekv@stop
\ekv@eq@other##3\ekv@nil\ekv@mark\ekv@parse@eq@other@a
- =\ekv@mark\ekv@parse@eq@active\ekv@stop
+ =\ekv@mark\ekv@parse@eq@active
##1##2%
- \ekv@parse@other##1##2\ekv@mark
+ \ekv@mark
}
% \end{macrocode}
% \end{macro}
@@ -1554,28 +1739,28 @@ and the derived files expkv.pdf
% \begin{macrocode}
\long\def\ekv@parse@eq@other@a##1\ekv@stop
{%
- \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active@a
- #2\ekv@mark\ekv@parse@eq@other@b\ekv@stop
+ \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active
+ #2\ekv@mark\ekv@parse@eq@other@b
}
-\long\def\ekv@parse@eq@other@b
- ##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active@a\ekv@stop\ekv@mark
+\ekv@expB@unbraceA
{%
- \ekv@strip{##1}\ekv@parse@pair
- }
+ \long\def\ekv@parse@eq@other@b
+ ##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active\ekv@stop\ekv@mark
+ ##2\ekv@nil=\ekv@mark\ekv@parse@eq@active
+ }%
+ {\ekv@strip{##1}\ekv@parse@pair##2\ekv@nil}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]
-% {\ekv@parse@eq@other@active@a,\ekv@parse@eq@other@active@b}
+% \begin{macro}[internal]{\ekv@parse@eq@other@active}
% \begin{macrocode}
-\long\def\ekv@parse@eq@other@active@a##1\ekv@stop##2\ekv@nil\ekv@mark
- {%
- \ekv@parse@eq@other@active@b{##1}##2=%
- }
-\long\def\ekv@parse@eq@other@active@b##1%
+\ekv@expB@unbraceA
{%
- \ekv@strip{##1}\ekv@parse@pair
- }
+ \long\def\ekv@parse@eq@other@active
+ ##1\ekv@stop##2\ekv@nil#2\ekv@mark
+ \ekv@parse@eq@other@b\ekv@mark##3=\ekv@mark\ekv@parse@eq@active
+ }%
+ {\ekv@strip{##1}\ekv@parse@pair##2=##3}
% \end{macrocode}
% \end{macro}
%
@@ -1585,24 +1770,42 @@ and the derived files expkv.pdf
##1\ekv@nil\ekv@mark\ekv@parse@eq@other@a\ekv@stop\ekv@mark
{%
\ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@active@
- #2\ekv@mark\ekv@parse@noeq\ekv@stop
+ #2\ekv@mark\ekv@parse@noeq
}
-\long\def\ekv@parse@eq@active@##1\ekv@stop
+\ekv@expB@unbraceA
+ {\long\def\ekv@parse@eq@active@##1\ekv@stop##2#2\ekv@mark\ekv@parse@noeq}%
{%
- \ekv@strip{##1}\ekv@parse@pair
+ \ekv@strip{##1}\ekv@parse@pair##2%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[internal]{\ekv@parse@noeq}
% \begin{macrocode}
-\long\def\ekv@parse@noeq
- ##1\ekv@nil\ekv@mark\ekv@parse@eq@active@\ekv@stop\ekv@mark
+\edef\ekv@parse@noeq
+ {%
+ \unexpanded
+ {%
+ \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@parse@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ }%
+ \unexpanded\expandafter{\ekv@strip{##1}\ekv@parse@key}%
+ }
+\ekv@expB@unbraceA
+ {%
+ \long\def\ekv@parse@noeq
+ ##1\ekv@nil\ekv@mark\ekv@parse@eq@active@\ekv@stop\ekv@mark
+ }%
+ {\ekv@parse@noeq}
+\def\ekv@parse@was@blank##1%
{%
- \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F@gobbletwo
- \ekv@ifempty@A\ekv@ifempty@B\@firstofone
- {\ekv@strip{##1}\ekv@parse@key}%
+ \def\ekv@parse@was@blank
+ \ekv@ifempty@A\ekv@ifempty@B
+ \ekv@strip@a\ekv@mark####1\ekv@nil\ekv@mark##1##1\ekv@nil\ekv@stop
+ \ekv@parse@key
+ {\ekv@parse@other}%
}
+\ekv@parse@was@blank{ }
% \end{macrocode}
% \end{macro}
%
@@ -1610,23 +1813,22 @@ and the derived files expkv.pdf
% \begin{macrocode}
\long\def\ekv@endparse@other
\ekv@stop
- \ekv@eq@other##1\ekv@nil\ekv@mark\ekv@parse@eq@other@a
- =\ekv@mark\ekv@parse@eq@active\ekv@stop
- ##2%
- \ekv@parse@other##3\ekv@mark
- {}
+ \ekv@eq@other\ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@parse@eq@other@a
+ =\ekv@mark\ekv@parse@eq@active
+ {\ekv@parse}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[internal]{\ekv@parse@pair,\ekv@parse@pair@}
% \begin{macrocode}
-\long\def\ekv@parse@pair##1##2\ekv@nil
+\ekv@expB@unbraceA{\long\def\ekv@parse@pair##1##2\ekv@nil}%
{%
\ekv@strip{##2}\ekv@parse@pair@{##1}%
}
\long\def\ekv@parse@pair@##1##2##3##4%
{%
\unexpanded{##4{##2}{##1}}%
+ \ekv@parse@other##3##4%
}
% \end{macrocode}
% \end{macro}
@@ -1636,6 +1838,7 @@ and the derived files expkv.pdf
\long\def\ekv@parse@key##1##2##3%
{%
\unexpanded{##2{##1}}%
+ \ekv@parse@other##2##3%
}
% \end{macrocode}
% \end{macro}
@@ -1643,12 +1846,26 @@ and the derived files expkv.pdf
% Finally really setting things up with |\ekvset|'s temporary meaning:
% \begin{macrocode}
}
-\begingroup
\catcode`\,=13
\catcode`\==13
\ekvset,=
% \end{macrocode}
%
+% \begin{macro}{\ekvsetSneaked}
+% This macro can be defined just by expanding |\ekvsneak| once after expanding
+% |\ekvset|. To expand everything as much as possible early on we use a
+% temporary definition.
+% \begin{macrocode}
+\edef\ekvsetSneaked
+ {%
+ \unexpanded{\ekvsneak{#2}}%
+ \unexpanded\expandafter{\ekvset{#1}{#3}}%
+ }
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def\ekvsetSneaked#1#2#3}}%
+ {\ekvsetSneaked}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\ekvchangeset}
% Provide a macro that is able to switch out the current \set\ in |\ekvset|.
% This operation is slow (by comparison, it should be slightly faster than
@@ -1658,111 +1875,147 @@ and the derived files expkv.pdf
% switch out the set expandably, so this works similar to the |\ekvsneak| macros
% reading and reinserting the remainder of the \kv\ list.
% \begin{macrocode}
-\def\ekvchangeset#1%
+\ekv@expB@unbraceA{\def\ekvchangeset#1}%
{%
- \expandafter\ekv@changeset\csname\ekv@undefined@set{#1}\endcsname\ekv@mark
+ \expandafter\expandafter\expandafter
+ \ekv@changeset\expandafter\csname\ekv@undefined@set{#1}\endcsname\ekv@empty
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[internal]{\ekv@changeset}
-% This macro does the real change-out of |\ekvchangeset|. We introduced an
-% |\ekv@mark| to not accidentally remove some braces which we have to remove
-% again.
+% This macro does the real change-out of |\ekvchangeset|. |#2| will have a
+% leading |\ekv@empty| so that braces aren't stripped accidentally, but that
+% will not hurt and just expand to nothing in one step.
% \begin{macrocode}
-\long\def\ekv@changeset#1#2\ekv@set@other#3#4\ekv@set#5%
+\long\def\ekv@changeset#1#2\ekv@set@other#3%
{%
- \ekv@gobble@mark#2\ekv@set@other#1#4\ekv@set#1%
+ #2\ekv@set@other#1%
}
% \end{macrocode}
% \end{macro}
%
%
-% \begin{macro}[internal]{\ekv@set@pair}
-% |\ekv@set@pair| gets invoked with the space and brace stripped key-name as
-% its first argument, the value as the second argument, and the set name as
-% the third argument. It builds the key-macro name and provides everything to
-% be able to throw meaningful error messages if it isn't defined.
-% |\ekv@set@pair@| will space and brace strip the value if the macro is
-% defined and call the key-macro. Else it'll branch into the check whether an
-% unknown key handler is defined for this set and that one will branch into
-% the error messages provided by |\ekv@set@pair| if it isn't.
+% \begin{macro}[internal]
+% {
+% \ekv@set@pair,\ekv@set@pair@a,\ekv@set@pair@b,\ekv@set@pair@c,
+% \ekv@set@pair@d,\ekv@set@pair@e
+% }
+% |\ekv@set@pair| gets invoked with the space and brace stripped and
+% |\detokenize|d key-name as its first, the value as the second, and the set
+% name as the third argument. It provides tests for the key-macros and
+% everything to be able to throw meaningful error messages if it isn't
+% defined. We have two routes here, one if |\lastnamedcs| is defined and one
+% if it isn't. The big difference is that if it is we can omit a |\csname| and
+% instead just expand |\lastnamedcs| once to get the control sequence.
+% If the macro is defined the value will be space and brace stripped and the
+% key-macro called. Else branch into the error handling provided by
+% |\ekv@set@pair|.
% \begin{macrocode}
-\long\def\ekv@set@pair#1#2\ekv@nil#3%
+\ekv@if@lastnamedcs
{%
- \expandafter\ekv@set@pair@
- \csname
- \ifcsname #3{#1}\endcsname
- #3{#1}%
- \else
- relax%
- \fi
- \endcsname
- {#2}%
+ \long\def\ekv@set@pair#1\ekv@mark#2\ekv@nil#3%
{%
- \expandafter\ekv@set@pair@
- \csname
- \ifcsname #3{}u\endcsname
- #3{}u%
- \else
- relax%
- \fi
- \endcsname
+ \ifcsname #3{#1}\endcsname\ekv@set@pair@a\fi\@secondoftwo
{#2}%
{%
- \ekv@ifdefined{#3{#1}N}%
- \ekv@err@noarg
- \ekv@err@unknown
- #3%
+ \ifcsname #3{}u\endcsname\ekv@set@pair@a\fi\@secondoftwo
+ {#2}%
+ {%
+ \ekv@ifdefined{#3{#1}N}%
+ \ekv@err@noarg
+ \ekv@err@unknown
+ #3%
+ }%
+ {#1}%
}%
- {#1}%
- }%
+ \ekv@set@other#3%
+ }
+ \def\ekv@set@pair@a\fi\@secondoftwo
+ {\fi\expandafter\ekv@set@pair@b\lastnamedcs}
+ }
+ {%
+ \long\def\ekv@set@pair#1\ekv@mark#2\ekv@nil#3%
+ {%
+ \ifcsname #3{#1}\endcsname
+ \ekv@set@pair@a\fi\ekv@set@pair@c#3{#1}\endcsname
+ {#2}%
+ {%
+ \ifcsname #3{}u\endcsname
+ \ekv@set@pair@a\fi\ekv@set@pair@c#3{}u\endcsname
+ {#2}%
+ {%
+ \ekv@ifdefined{#3{#1}N}%
+ \ekv@err@noarg
+ \ekv@err@unknown
+ #3%
+ }%
+ {#1}%
+ }%
+ \ekv@set@other#3%
+ }
+ \def\ekv@set@pair@a\fi\ekv@set@pair@c{\fi\expandafter\ekv@set@pair@b\csname}
+ \long\def\ekv@set@pair@c#1\endcsname#2#3{#3}
}
-\long\def\ekv@set@pair@#1#2%
+\long\def\ekv@set@pair@b#1%
{%
\ifx#1\relax
- \ekv@fi@secondoftwo
+ \ekv@set@pair@e
\fi
- \@firstoftwo
- {\ekv@strip{#2}#1}%
+ \ekv@set@pair@d#1%
}
+\ekv@expB@unbraceA{\long\def\ekv@set@pair@d#1#2#3}{\ekv@strip{#2}#1}
+\long\def\ekv@set@pair@e\fi\ekv@set@pair@d#1#2#3{\fi#3}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\ekv@set@key}
+% \begin{macro}[internal]
+% {\ekv@set@key,\ekv@set@key@a,\ekv@set@key@b,\ekv@set@key@c}
% Analogous to |\ekv@set@pair|, |\ekv@set@key| builds the |NoVal| key-macro and
% provides an error-branch. |\ekv@set@key@| will test whether the key-macro is
% defined and if so call it, else the errors are thrown.
% \begin{macrocode}
-\long\def\ekv@set@key#1#2%
+\ekv@if@lastnamedcs
{%
- \expandafter\ekv@set@key@
- \csname
- \ifcsname #2{#1}N\endcsname
- #2{#1}N%
- \else
- relax%
- \fi
- \endcsname
+ \long\def\ekv@set@key#1\ekv@mark#2%
{%
- \expandafter\ekv@set@key@
- \csname
- \ifcsname #2{}uN\endcsname
- #2{}uN%
- \else
- relax%
- \fi
- \endcsname
+ \ifcsname #2{#1}N\endcsname\ekv@set@key@a\fi\@firstofone
{%
- \ekv@ifdefined{#2{#1}}%
- \ekv@err@reqval
- \ekv@err@unknown
- #2%
+ \ifcsname #2{}uN\endcsname\ekv@set@key@a\fi\@firstofone
+ {%
+ \ekv@ifdefined{#2{#1}}%
+ \ekv@err@reqval
+ \ekv@err@unknown
+ #2%
+ }%
+ {#1}%
}%
- {#1}%
- }%
+ \ekv@set@other#2%
+ }
+ \def\ekv@set@key@a\fi\@firstofone{\fi\expandafter\ekv@set@key@b\lastnamedcs}
+ }
+ {%
+ \long\def\ekv@set@key#1\ekv@mark#2%
+ {%
+ \ifcsname #2{#1}N\endcsname
+ \ekv@set@key@a\fi\ekv@set@key@c#2{#1}N\endcsname
+ {%
+ \ifcsname #2{}uN\endcsname
+ \ekv@set@key@a\fi\ekv@set@key@c#2{}uN\endcsname
+ {%
+ \ekv@ifdefined{#2{#1}}%
+ \ekv@err@reqval
+ \ekv@err@unknown
+ #2%
+ }%
+ {#1}%
+ }%
+ \ekv@set@other#2%
+ }
+ \def\ekv@set@key@a\fi\ekv@set@key@c{\fi\expandafter\ekv@set@key@b\csname}
+ \long\def\ekv@set@key@c#1N\endcsname#2{#2}
}
-\def\ekv@set@key@#1%
+\long\def\ekv@set@key@b#1%
{%
\ifx#1\relax
\ekv@fi@secondoftwo
@@ -1774,24 +2027,34 @@ and the derived files expkv.pdf
%
% \begin{macro}{\ekvsetdef}
% Provide a macro to define a shorthand to use |\ekvset| on a specified \set.
-% The first macro expands |\ekvset| twice, such that everything which can be
-% done up to this point is done.
+% To gain the maximum speed |\ekvset| is expanded twice by
+% |\ekv@expB@unbraceA| so that during runtime the macro storing the set name
+% is already built and one |\expandafter| doesn't have to be used.
% \begin{macrocode}
-\protected\def\ekvsetdef#1#2%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+\protected\def\ekvsetdef#1#2}}}}%
{%
- \expandafter\expandafter\expandafter
- \ekv@setdef\expandafter\expandafter\expandafter{\ekvset{#2}{##1}}#1%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def#1##1}}%
+ {\ekvset{#2}{##1}}%
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\ekv@setdef}
-% This auxiliary macro defines the shorthand macro after |\ekvset| got
-% expanded as far as possible.
+% \begin{macro}{\ekvsetSneakeddef,\ekvsetdefSneaked}
+% And do the same for |\ekvsetSneaked| in the two possible ways, with a fixed
+% sneaked argument and with a flexible one.
% \begin{macrocode}
-\protected\def\ekv@setdef#1#2%
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+\protected\def\ekvsetSneakeddef#1#2}}}}%
+ {%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def#1##1##2}}%
+ {\ekvsetSneaked{#2}{##1}{##2}}%
+ }
+\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{\ekv@expB@unbraceA{%
+\protected\def\ekvsetdefSneaked#1#2#3}}}}%
{%
- \long\def#2##1{#1}%
+ \ekv@expB@unbraceA{\ekv@expB@unbraceA{\long\def#1##1}}%
+ {\ekvsetSneaked{#2}{#3}{##1}}%
}
% \end{macrocode}
% \end{macro}
@@ -1827,44 +2090,12 @@ and the derived files expkv.pdf
% \begin{macrocode}
\long\def\ekv@err@common #1#2{\expandafter\ekv@err@common@\string#2{#1}}
\long\def\ekv@err@common@#1`#2' #3.#4#5{\ekv@err{#4 (`#5', set `#2')}}
-\long\def\ekv@err@unknown#1#2{\ekv@err@common{unknown key}#1{#2}}
-\long\def\ekv@err@noarg #1#2{\ekv@err@common{value forbidden}#1{#2}}
-\long\def\ekv@err@reqval #1#2{\ekv@err@common{value required}#1{#2}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[internal]{\ekv@strip,\ekv@strip@a,\ekv@strip@b,\ekv@strip@c}
-% Finally we borrow some ideas of \pkg{expl3}'s \pkg{l3tl} to strip spaces
-% from keys and values. This |\ekv@strip| also strips one level of outer braces
-% \emph{after} stripping spaces, so an input of | {abc} | becomes |abc| after
-% stripping. It should be used with |#1| prefixed by |\ekv@mark|. Also this
-% implementation at most strips \emph{one} space from both sides.
-% \begin{macrocode}
-\def\ekv@strip#1%
- {%
- \long\def\ekv@strip##1%
- {%
- \ekv@strip@a
- ##1%
- \ekv@nil
- \ekv@mark#1%
- #1\ekv@nil{}%
- \ekv@stop
- }%
- \long\def\ekv@strip@a##1\ekv@mark#1##2\ekv@nil##3%
- {%
- \ekv@strip@b##3##1##2\ekv@nil
- }%
- \long\def\ekv@strip@b##1#1\ekv@nil
- {%
- \ekv@strip@c##1\ekv@nil
- }%
- \long\def\ekv@strip@c\ekv@mark##1\ekv@nil##2\ekv@stop##3%
- {%
- ##3{##1}%
- }%
- }
-\ekv@strip{ }
+\ekv@expB@unbraceA{\long\def\ekv@err@unknown#1}%
+ {\ekv@err@common{unknown key}{#1}}
+\ekv@expB@unbraceA{\long\def\ekv@err@noarg #1}%
+ {\ekv@err@common{value forbidden}{#1}}
+\ekv@expB@unbraceA{\long\def\ekv@err@reqval #1}%
+ {\ekv@err@common{value required}{#1}}
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/generic/expkv/expkv.pdf b/macros/generic/expkv/expkv.pdf
index 627341a78f..4396ddfee2 100644
--- a/macros/generic/expkv/expkv.pdf
+++ b/macros/generic/expkv/expkv.pdf
Binary files differ
diff --git a/macros/latex/contrib/paresse/LISEZMOI.md b/macros/latex/contrib/paresse/LISEZMOI.md
index c2aca51649..43234ae010 100644
--- a/macros/latex/contrib/paresse/LISEZMOI.md
+++ b/macros/latex/contrib/paresse/LISEZMOI.md
@@ -1,4 +1,4 @@
-<!-- Time-stamp: <2020-10-06 14:12:28 administrateur> -->
+<!-- Time-stamp: <2020-10-10 12:11:12 administrateur> -->
<!-- Crรฉation : 2020-10-06T14:12:21+0200 -->
# paresse
@@ -22,9 +22,14 @@ lettres grecques qui ont un nom de macro comme `\alpha` ou `\Omega`.
## Historique
+* Version 5.0.1 โ€” 2020-10-10
+ * correction de bogue: les clรฉs ttau et ttheta nโ€™รฉtaient plus
+ dรฉfiniesย ;
+ * changements mineurs dans la documentation.
+
* Version 5.0 โ€” 2020-10-06
- * abandon de l'extension <kbd>skeyval</kbd> ;
- * gestion des clรฉs avec <kbd>l3keys</kbd> ;
+ * abandon de l'extension <kbd>skeyval</kbd>ย ;
+ * gestion des clรฉs avec <kbd>l3keys</kbd>ย ;
* deux *sous-extensions* <kbd>paresse-old</kbd> and <kbd>paresse-utf8</kbd>;
* passage partiel ร  <kbd>expl3</kbd>.
diff --git a/macros/latex/contrib/paresse/MANIFEST.md b/macros/latex/contrib/paresse/MANIFEST.md
index 080a0a96b8..268b614253 100644
--- a/macros/latex/contrib/paresse/MANIFEST.md
+++ b/macros/latex/contrib/paresse/MANIFEST.md
@@ -16,49 +16,46 @@ These are source files for a number of purposes, including the `unpack` process
generates the installation files of the package. Additional files included here will also
be installed for processing such as testing.
-* paresse.dtx
-* paresse.ins
+* paresse.dtx โ€ก
+* paresse.ins โ€ก
### Typeset documentation source files
These files are typeset using LaTeX to produce the PDF documentation for the package.
-* paresse.dtx
+* paresse.dtx โ€ก
### Documentation files
These files form part of the documentation but are not typeset. Generally they will be
additional input files for the typeset documentation files listed above.
-* LISEZMOI.md
-* MANIFEST.md
-* README.md
-* paresse-fra.pdf
-* paresse-eng.pdf
+* LISEZMOI.md โ€ก
+* README.md โ€ก
### Text files
Plain text files included as documentation or metadata.
-* LISEZMOI.md
-* MANIFEST.md
-* README.md
+* LISEZMOI.md โ€ก
+* MANIFEST.md โ€ก
+* README.md โ€ก
### Derived files
The files created by โ€˜unpackingโ€™ the package sources. This typically includes
`.sty` and `.cls` files created from DocStrip `.dtx` files.
-* paresse-old.sty
-* paresse-utf8.sty
-* paresse.sty
+* paresse-old.sty โ€ 
+* paresse-utf8.sty โ€ 
+* paresse.sty โ€ 
### Typeset documents
The output files (PDF, essentially) from typesetting the various source, demo,
etc., package files.
-* paresse.pdf
+* paresse.pdf โ€ก
## TDS manifest
@@ -66,7 +63,44 @@ etc., package files.
The following groups list the files included in the TeX Directory Structure used to install
the package into a TeX distribution.
+### Source files (TDS)
+
+All files included in the `paresse/source` directory.
+
+* paresse.dtx
+* paresse.ins
+
+### TeX files (TDS)
+
+All files included in the `paresse/tex` directory.
+
+* paresse-old.sty
+* paresse-utf8.sty
+* paresse.sty
+
+### Doc files (TDS)
+
+All files included in the `paresse/doc` directory.
+
+* LISEZMOI.md
+* MANIFEST.md
+* README.md
+* paresse-eng.pdf
+* paresse-fra.pdf
+* paresse.pdf
+
## CTAN manifest
The following group lists the files included in the CTAN package.
+
+### CTAN files
+
+* LISEZMOI.md
+* MANIFEST.md
+* README.md
+* paresse-eng.pdf
+* paresse-fra.pdf
+* paresse.dtx
+* paresse.ins
+* paresse.pdf
diff --git a/macros/latex/contrib/paresse/README.md b/macros/latex/contrib/paresse/README.md
index 90b918cf8e..5018ac04e8 100644
--- a/macros/latex/contrib/paresse/README.md
+++ b/macros/latex/contrib/paresse/README.md
@@ -1,4 +1,4 @@
-<!-- Time-stamp: <2020-10-06 14:12:38 administrateur> -->
+<!-- Time-stamp: <2020-10-10 12:10:59 administrateur> -->
<!-- Crรฉation : 2020-10-06T14:12:21+0200 -->
# paresse
@@ -22,6 +22,9 @@ letters which have a macro name as `\alpha` or `\Omega`.
## History
+* Version 5.0.1 โ€” 2020-10-10
+ * bug correction: the keys ttau and ttheta had been left undefined;
+ * tiny changes in documentation.
* Version 5.0 โ€” 2020-10-06
* doesn't use package <kbd>skeyval</kbd> anymore;
diff --git a/macros/latex/contrib/paresse/paresse-eng.pdf b/macros/latex/contrib/paresse/paresse-eng.pdf
index db9bc65168..3482861a12 100644
--- a/macros/latex/contrib/paresse/paresse-eng.pdf
+++ b/macros/latex/contrib/paresse/paresse-eng.pdf
Binary files differ
diff --git a/macros/latex/contrib/paresse/paresse-fra.pdf b/macros/latex/contrib/paresse/paresse-fra.pdf
index b43c4ce8eb..214fd42f5c 100644
--- a/macros/latex/contrib/paresse/paresse-fra.pdf
+++ b/macros/latex/contrib/paresse/paresse-fra.pdf
Binary files differ
diff --git a/macros/latex/contrib/paresse/paresse.dtx b/macros/latex/contrib/paresse/paresse.dtx
index 9e2b79c1da..0bf79afefe 100644
--- a/macros/latex/contrib/paresse/paresse.dtx
+++ b/macros/latex/contrib/paresse/paresse.dtx
@@ -13,7 +13,7 @@
%
%<*driver|package|doc>
\RequirePackage{expl3}[2020/09/24]
-\GetIdInfo$Id: paresse.dtx 5.0 2020-10-06 TdS $
+\GetIdInfo$Id: paresse.dtx 5.0.1 2020-10-06 TdS $
{}
%</driver|package|doc>
%<*driver>
@@ -70,6 +70,8 @@
% \changes{v5.0}{2020/10/06}{Uses expl3 to replace skeyval.}
% \changes{v5.0}{2020/10/06}{Two sub-packages.}
% \changes{v5.0}{2020/10/06}{\cs{varsigma} is added as \PSVerb{j} to legacy encoding.}
+% \changes{v5.0.1}{2020/10/10}{Bug correction: keys ttheta and ttau had disappeared.}
+% \changes{v5.0.1}{2020/10/10}{Some changes in documentation.}
%
% \thispagestyle{empty}
%
@@ -551,23 +553,27 @@ uses a utf-8 encoded source with \hologo{LaTeX}.\label{restriction}
\section{The Package Options}
\label{sec:keys}
+In the margin the default options are in boldface.
+
%</ENG>
%<*FRA>
\section{Les options de l'extension}
\label{sec:clefs}
+Dans la marge, les options par dรฉfaut sont donnรฉes en gras.
+
%</FRA>
\begin{itemize}
%<*FRA>
-\item \Option{tame} \DescribeOption{tame / wild} s'oppose ร 
+\item \Option{tame} \DescribeOption{tame / \textbf{wild}} s'oppose ร 
\Option{wild} qui est l'option par dรฉfaut. Lorsque \Option{tame}
rรจgne, il \textbf{faut} un environnement |ParesseActive| ou une
commande \cs{ActiveLaParesse} pour utiliser les macros ร  ยง.
%</FRA>
%<*ENG>
-\item \Option{tame} \DescribeOption{tame / wild} is the contrary of
+\item \Option{tame} \DescribeOption{tame / \textbf{wild}} is the contrary of
\Option{wild} which is the option by default. When \Option{tame}
reigns, one \textbf{must} use an environment |ParesseActive| or a
command \cs{ActiveLaParesse} in order to use the ยง-macros.
@@ -575,7 +581,7 @@ uses a utf-8 encoded source with \hologo{LaTeX}.\label{restriction}
%<*FRA>
-\item \Option{Levi} \DescribeOption{legacy / Levi} s'oppose ร 
+\item \Option{Levi} \DescribeOption{\textbf{legacy} / Levi} s'oppose ร 
\Option{legacy} qui est l'option par dรฉfaut. Avec l'option
\Option{legacy} on utilise le codage \og originel\fg de
\pkg{paresse} tel que le donne la
@@ -583,7 +589,7 @@ uses a utf-8 encoded source with \hologo{LaTeX}.\label{restriction}
\textsc{Levi}, cf. la table~\ref{codagelevi}.
%</FRA>
%<*ENG>
-\item \Option{Levi} \DescribeOption{legacy / Levi} is the
+\item \Option{Levi} \DescribeOption{\textbf{legacy} / Levi} is the
contrary of \Option{legacy} which is the default. With
\Option{legacy} one uses the original encoding of
\pkg{paresse} as it is given by the
@@ -593,7 +599,7 @@ uses a utf-8 encoded source with \hologo{LaTeX}.\label{restriction}
%</ENG>
%<*FRA>
-\item \Option{ttau} \DescribeOption{ttau / ttheta} s'oppose ร 
+\item \Option{ttau} \DescribeOption{ttau / \textbf{ttheta}} s'oppose ร 
\Option{ttheta} qui est l'option par dรฉfaut. Lorsque \Option{ttheta}
est active |ยงt| donne \(\theta\) dans le cas contraire |ยงt| donne
\(\tau\). En tous cas, \(\theta\) est accessible par |ยงv| et
@@ -601,7 +607,7 @@ uses a utf-8 encoded source with \hologo{LaTeX}.\label{restriction}
\Option{Levi} a รฉtรฉ choisie.
%</FRA>
%<*ENG>
-\item \Option{ttau} \DescribeOption{ttau / ttheta} is the contrary of
+\item \Option{ttau} \DescribeOption{ttau / \textbf{ttheta}} is the contrary of
\Option{ttheta} which is selected by default. When \Option{ttheta}
is active |ยงt| gives \(\theta\) in the contrary |ยงt| gives
\(\tau\). In all cases, \(\theta\) is given by |ยงv| and \(\tau\) by
@@ -624,13 +630,13 @@ the option \Option{Levi}, |ยงV| doesn't correspond to any greek letter.
%</ENG>
%<*FRA>
-\item \Option{epsilon} \DescribeOption{epsilon / varepsilon} s'oppose ร 
+\item \Option{epsilon} \DescribeOption{epsilon / \textbf{varepsilon}} s'oppose ร 
\Option{varepsilon} qui est l'option par dรฉfaut. Avec
\Option{epsilon}, |ยงe| donne \(\epsilon\) sinon |ยงe| donne
\(\varepsilon\).
%</FRA>
%<*ENG>
-\item \Option{epsilon} \DescribeOption{epsilon / varepsilon} is the
+\item \Option{epsilon} \DescribeOption{epsilon / \textbf{varepsilon}} is the
contrary of \Option{varepsilon} which is selected by default. With
\Option{epsilon}, |ยงe| gives \(\epsilon\) otherwise |ยงe| gives
\(\varepsilon\).
@@ -665,8 +671,8 @@ The default options are \Option{varepsilon}, \Option{theta},
version behaves, by default, as the preceding one.
%</ENG>
-%<FRA>\subsection{Commandes et environnement}
-%<ENG>\subsection{Commands and Environment}
+%<FRA>\section{Commandes et environnement}
+%<ENG>\section{Commands and Environment}
\DescribeMacro{\makeparesseletter}
%<*FRA>
@@ -727,11 +733,11 @@ package \texttt{paresse} is loaded whith the option \texttt{tame}.
\newpage{}
-%<FRA>\subsection{Tableaux des macros}
-%<ENG>\subsection{Tables of the Macros}
+%<FRA>\section{Tableaux des macros}
+%<ENG>\section{Tables of the Macros}
-%<FRA>\subsubsection{Codage originel de \pkg{paresse}}
-%<ENG>\subsubsection{\pkg{paresse}'s Original Encoding}
+%<FRA>\subsection{Codage originel de \pkg{paresse}}
+%<ENG>\subsection{\pkg{paresse}'s Original Encoding}
%<*FRA>
C'est le codage actif lorsque l'on a choisit les options \Option{legacy} et
@@ -754,7 +760,7 @@ e & ยงe & z & ยงz & h & ยงh & v & ยงv\\ \hline
i & ยงi & k & ยงk & l & ยงl & m & ยงm\\ \hline
n & ยงn & x & ยงx & p & ยงp & r & ยงr\\ \hline
s & ยงs & y & ยงy & u & ยงu & f & ยงf\\ \hline
-c & ยงc & q & ยงq & w & ยงw &\multicolumn{1}{c|}{}&\\ \hline\hline
+c & ยงc & q & ยงq & w & ยงw & j & ยงj\\ \hline\hline
G & ยงG & D & ยงD & V & ยงV & L & ยงL\\ \hline
X & ยงX & P & ยงP & S & ยงS & U & ยงU\\ \hline
F & ยงF & Q & ยงQ & W & ยงW & Z & ยงZ\\ \hline
@@ -789,15 +795,15 @@ des capitales latines, s'obtiennent ร  l'aide de la majuscule correspondante.
%</FRA>
%<*ENG>
\paragraph{Remarks : } all the latin letters used in the name of the
-ยง-macros, but for {\ActiveLaParesse ยงv, ยงy and ยงq}, are loaded with
+ยง-macros, but for {\ActiveLaParesse ยงv, ยงy, ยงq and ยงj}, are loaded with
reminiscences, I hope \texttt{:-)} and the greek uppercases are
obtained with the (latin) corresponding uppercases.
%</ENG>
\pagebreak[4]
-%<FRA>\subsubsection{Codage de Sylvio \textsc{Levi}}
-%<ENG>\subsubsection{Sylvio \textsc{Levi}'s Encoding}
+%<FRA>\subsection{Codage de Sylvio \textsc{Levi}}
+%<ENG>\subsection{Sylvio \textsc{Levi}'s Encoding}
%<*FRA>
On active ce codage avec l'option \Option{Levi}.
@@ -990,16 +996,16 @@ Masson, Paris, Milan, Barcelone, \oldstylenums{1995}.
letter_t_is_theta .bool_set:N = \g_@@_letter_t_is_theta_bool,
letter_t_is_tau .bool_set_inverse:N =
\g_@@_letter_t_is_theta_bool,
- theta .meta:n = {
+ ttheta .meta:n = {
letter_t_is_theta = #1
},
- theta .default:n = {true},
- theta .initial:n = {true},
- tau .meta:n = {
+ ttheta .default:n = {true},
+ ttheta .initial:n = {true},
+ ttau .meta:n = {
letter_t_is_tau = #1
},
- tau .default:n = {true},
- tau .initial:n = {false},
+ ttau .default:n = {true},
+ ttau .initial:n = {false},
letter_theta_is_theta .bool_set:N = \g_@@_letter_theta_is_theta_bool,
letter_theta_is_vartheta .bool_set_inverse:N =
diff --git a/macros/latex/contrib/paresse/paresse.pdf b/macros/latex/contrib/paresse/paresse.pdf
index 8ef2eb3e55..fd50452b00 100644
--- a/macros/latex/contrib/paresse/paresse.pdf
+++ b/macros/latex/contrib/paresse/paresse.pdf
Binary files differ
diff --git a/macros/latex/contrib/pst-pdf/CHANGES b/macros/latex/contrib/pst-pdf/CHANGES
index db9952fe79..1b78f94da0 100644
--- a/macros/latex/contrib/pst-pdf/CHANGES
+++ b/macros/latex/contrib/pst-pdf/CHANGES
@@ -148,3 +148,6 @@ v1.2e
expanded to \pdfTeXext
General: gobble optional argument for \makeindex, \makeglossary
and \printindex
+v1.2f
+ General: No more loading of file โ€˜dvisps.defโ€™ (RN)
+ No more loading of file โ€˜pdftex.defโ€™ (RN)
diff --git a/macros/latex/contrib/pst-pdf/Makefile b/macros/latex/contrib/pst-pdf/Makefile
index 2c5f7e7305..17eb36728d 100644
--- a/macros/latex/contrib/pst-pdf/Makefile
+++ b/macros/latex/contrib/pst-pdf/Makefile
@@ -53,6 +53,7 @@ dist : doc doc-DE pdf example CHANGES
@ echo $(ARCHNAME).tar.gz
%.gls %.pdf : %.dtx $(PACKAGE).sty
+ $(PDFLATEX) $<
test -f $(basename $<).glo || touch -f $(basename $<).glo
test -f $(basename $<).idx || touch -f $(basename $<).idx
makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
@@ -62,13 +63,14 @@ dist : doc doc-DE pdf example CHANGES
$(PDFLATEX) $<
$(PACKAGE)-DE.gls $(PACKAGE)-DE.pdf : $(PACKAGE).dtx $(PACKAGE).sty
+ cp $< $(basename $@).dtx
+ $(PDFLATEX) '\newcommand*{\mainlang}{ngerman}\input{$(basename $@).dtx}'
test -f $(basename $@).glo || touch -f $(basename $@).glo
test -f $(basename $@).idx || touch -f $(basename $@).idx
makeindex -s gglo.ist -t $(basename $@).glg -o $(basename $@).gls \
$(basename $@).glo
makeindex -s gind.ist -t $(basename $@).ilg -o $(basename $@).ind \
$(basename $@).idx
- cp $< $(basename $@).dtx
$(PDFLATEX) '\newcommand*{\mainlang}{ngerman}\input{$(basename $@).dtx}'
$(RM) $(basename $@).dtx
@@ -125,6 +127,8 @@ arch-tds : CHANGES pst-pdf.pdf pst-pdf-DE.pdf pst-pdf-example.pdf
clean :
$(RM) $(addprefix $(PACKAGE), \
.dvi .log .aux .bbl .blg .idx .ind .ilg .gls .glg .glo) \
+ $(addprefix $(PACKAGE)-DE, \
+ .dvi .log .aux .bbl .blg .idx .ind .ilg .gls .glg .glo) \
$(addprefix $(basename $(EXAMPLE)), .ps .dvi .log .aux) \
$(EXAMPLE) $(PDF_CONTAINER:.pdf=.ps) $(PDF_CONTAINER) \
CHANGES.pdf
diff --git a/macros/latex/contrib/pst-pdf/ps4pdf.bat b/macros/latex/contrib/pst-pdf/ps4pdf.bat
index b60630d862..62e0d659a5 100755
--- a/macros/latex/contrib/pst-pdf/ps4pdf.bat
+++ b/macros/latex/contrib/pst-pdf/ps4pdf.bat
@@ -1,69 +1,69 @@
-:: **********************************************
-:: ps4pdf.bat
-:: author Lutz Ihlenburg, 09-may-2005
-::
-:: Batch file for using Rolf Niepraschk's package
-:: pst-pdf under MiKTeX
-::
-:: More info: ps4pdf-bat.txt
-:: **********************************************
-
-@echo off
-:: Command extensions must be enabled (Default in Windows XP)
-:: Localize temporary variables
-setlocal
-
-:: Called with no argument?
-if {%1} == {} goto USAGE
-if {%1} == {/?} goto USAGE
-if {%1} == {-h} goto USAGE
-if {%1} == {--help} goto USAGE
-
-:: Look for existence of main tex file.
-:: This procedure will not work, if You transfer a filename without extension,
-:: having dots in the name :-)
-:: Command shell for-statement allows only one command.
-:: For more, a multiple command must be created with &
-for %%a in (%1) do set _fullname=%%~fa& set _drive=%%~da& set _path=%%~pa& set _name=%%~na& set _ext=%%~xa
-:: XP command shell doesn't know "if not defined..."
-if defined _ext (
-rem
-) else (
-set _ext=.tex
-set _fullname=%_fullname%.tex
-)
-if not exist "%_fullname%" goto :MISSINGFILE
-
-:OPERATION
-%_drive%
-cd %_path%
-@echo on
-latex --src -interaction=nonstopmode "%_name%%_ext%" >"%_name%-ps4pdf.log"
-@if errorlevel 1 goto :ERROR
-dvips -o "%_name%-pics.ps" "%_name%.dvi" >>"%_name%-ps4pdf.log"
-@if errorlevel 1 goto :ERROR
-ps2pdf -dAutoRotatePages#/None "%_name%-pics.ps" >>"%_name%-ps4pdf.log"
-@if errorlevel 1 goto :ERROR
-texify -b -l latex -p "%_name%%_ext%" >>"%_name%-ps4pdf.log"
-@if errorlevel 1 goto :ERROR
-@goto :EOF
-
-:MISSINGFILE
-echo *** File not found: %_fullname%
-echo *** Batch job aborted
-pause
-goto :EOF
-
-:ERROR
-@echo *** An error message appeared. Abnormal termination! Look at %_name%-pst-pdf.log ***
-@pause
-@goto :EOF
-
-:USAGE
-for %%a in (%0) do set _progname=%%~na
-echo Usage: %_progname% SourceFile[.tex]
-pause
-goto :EOF
+:: **********************************************
+:: ps4pdf.bat
+:: author Lutz Ihlenburg, 09-may-2005
+::
+:: Batch file for using Rolf Niepraschk's package
+:: pst-pdf under MiKTeX
+::
+:: More info: ps4pdf-bat.txt
+:: **********************************************
+
+@echo off
+:: Command extensions must be enabled (Default in Windows XP)
+:: Localize temporary variables
+setlocal
+
+:: Called with no argument?
+if {%1} == {} goto USAGE
+if {%1} == {/?} goto USAGE
+if {%1} == {-h} goto USAGE
+if {%1} == {--help} goto USAGE
+
+:: Look for existence of main tex file.
+:: This procedure will not work, if You transfer a filename without extension,
+:: having dots in the name :-)
+:: Command shell for-statement allows only one command.
+:: For more, a multiple command must be created with &
+for %%a in (%1) do set _fullname=%%~fa& set _drive=%%~da& set _path=%%~pa& set _name=%%~na& set _ext=%%~xa
+:: XP command shell doesn't know "if not defined..."
+if defined _ext (
+rem
+) else (
+set _ext=.tex
+set _fullname=%_fullname%.tex
+)
+if not exist "%_fullname%" goto :MISSINGFILE
+
+:OPERATION
+%_drive%
+cd %_path%
+@echo on
+latex --src -interaction=nonstopmode "%_name%%_ext%" >"%_name%-ps4pdf.log"
+@if errorlevel 1 goto :ERROR
+dvips -o "%_name%-pics.ps" "%_name%.dvi" >>"%_name%-ps4pdf.log"
+@if errorlevel 1 goto :ERROR
+ps2pdf -dAutoRotatePages#/None "%_name%-pics.ps" >>"%_name%-ps4pdf.log"
+@if errorlevel 1 goto :ERROR
+texify -b -l latex -p "%_name%%_ext%" >>"%_name%-ps4pdf.log"
+@if errorlevel 1 goto :ERROR
+@goto :EOF
+
+:MISSINGFILE
+echo *** File not found: %_fullname%
+echo *** Batch job aborted
+pause
+goto :EOF
+
+:ERROR
+@echo *** An error message appeared. Abnormal termination! Look at %_name%-pst-pdf.log ***
+@pause
+@goto :EOF
+
+:USAGE
+for %%a in (%0) do set _progname=%%~na
+echo Usage: %_progname% SourceFile[.tex]
+pause
+goto :EOF
%~na
echo Usage: %_progname% SourceFile[.tex]
pause
diff --git a/macros/latex/contrib/pst-pdf/ps4pdf.bat.w95 b/macros/latex/contrib/pst-pdf/ps4pdf.bat.w95
index ce73848182..c507b37693 100644
--- a/macros/latex/contrib/pst-pdf/ps4pdf.bat.w95
+++ b/macros/latex/contrib/pst-pdf/ps4pdf.bat.w95
@@ -1,8 +1,8 @@
-rem call with ps4pdf.bat FILE without suffix
-@echo off
-set FILE=%1
-latex %FILE%.tex
-dvips -Ppdf -o %FILE%-pics.ps %FILE%.dvi
-ps2pdf -dAutoRotatePages#/None %File%-pics.ps %File%-pics.pdf
-texify -b -l latex -p %File%.tex
+rem call with ps4pdf.bat FILE without suffix
+@echo off
+set FILE=%1
+latex %FILE%.tex
+dvips -Ppdf -o %FILE%-pics.ps %FILE%.dvi
+ps2pdf -dAutoRotatePages#/None %File%-pics.ps %File%-pics.pdf
+texify -b -l latex -p %File%.tex
%.tex
diff --git a/macros/latex/contrib/pst-pdf/pst-pdf-DE.pdf b/macros/latex/contrib/pst-pdf/pst-pdf-DE.pdf
index 561f570f1b..b1c1ebfed2 100644
--- a/macros/latex/contrib/pst-pdf/pst-pdf-DE.pdf
+++ b/macros/latex/contrib/pst-pdf/pst-pdf-DE.pdf
Binary files differ
diff --git a/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf b/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf
index d910e4a708..f6d4756d7f 100644
--- a/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf
+++ b/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/pst-pdf/pst-pdf.dtx b/macros/latex/contrib/pst-pdf/pst-pdf.dtx
index bf3cbc1a48..55841e50ef 100644
--- a/macros/latex/contrib/pst-pdf/pst-pdf.dtx
+++ b/macros/latex/contrib/pst-pdf/pst-pdf.dtx
@@ -24,7 +24,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{pst-pdf}
%<*package>
- [2019/11/15 v1.2e PS graphics for pdfLaTeX (RN,HjG)]
+ [2020/10/10 v1.2f PS graphics for pdfLaTeX (RN,HjG)]
%</package>
%
%<*driver>
@@ -50,7 +50,7 @@
%</driver>
% \fi
%
-% \CheckSum{839}
+% \CheckSum{818}
%
% \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
@@ -748,7 +748,8 @@
\newcommand*\ppf@is@pdfTeX@graphic[5]{%
\@ppf@pdftex@graphicfalse%
\begingroup
- \edef\pdfTeXext{\detokenize\expandafter{#2}}%
+ \edef\pdfTeXext{,#2,}%
+ \edef\pdfTeXext{\detokenize\expandafter{\pdfTeXext}}%
% \end{macrocode}
% \ifGERMAN
% Statt Einladen einer identifizierten Grafik nur Test der Grafikendung.
@@ -758,7 +759,8 @@
% \fi
% \begin{macrocode}
\def\Gin@setfile##1##2##3{%
- \@expandtwoargs\in@{,\detokenize\expandafter{##2},}{,\pdfTeXext,}%
+ \edef\@tempa{,##2,}%
+ \@expandtwoargs\in@{\detokenize\expandafter{\@tempa}}{\pdfTeXext}%
\ifin@\global\@ppf@pdftex@graphictrue\fi}%
% \end{macrocode}
% \ifGERMAN
@@ -822,7 +824,7 @@
% \changes{v1.1q}{2008/02/17}{\cmd{\overfullrule} must not be > 0.}
% \begin{macrocode}
\PackageInfo{pst-pdf}{%
- MODE: \ppf@TeX@mode\space (dvi -- extraction mode)}
+ MODE: \ppf@TeX@mode\space (dvi -- extraction mode)}%
\nofiles
\let\makeindex\@empty \let\makeglossary\@empty \let\printindex\@empty
\renewcommand*\makeindex[1][]{}%
@@ -831,31 +833,28 @@
\AtBeginDocument{\overfullrule=\z@}%
\if@ppf@PST@used\RequirePackage{pstricks}\fi
\RequirePackage[active,dvips,tightpage]{preview}[2005/01/29]%
- \newcommand*\ppf@PreviewBbAdjust{}
+ \newcommand*\ppf@PreviewBbAdjust{}%
\newcommand*\ppf@RestoreBbAdjust{%
\let\PreviewBbAdjust\ppf@PreviewBbAdjust}%
% \end{macrocode}
% \ifGERMAN
% Es werden auch die im pdf\LaTeX-Modus erlaubten Endungen von Grafikdateien
-% ben\"otigt.
+% ben\"otigt (Argument aus `pdftex.def' -- 2020/10/05 -- kopiert).
% \fi
% \ifENGLISH
% The pdf\LaTeX\ mode compliant graphics file formats are needed too.
+% (Argument copied from `pdftex.def' -- 2020/10/05).
% \fi
% \changes{v1.1u}{2008/09/16}{\cmd{\pdfoutput} must be set when
% loading ``pdftex.def'' in DVI mode. (RN)}
% \changes{v1.1v}{2008/10/09}{Local redefinition of \cmd{\pdfoutput} to be a
% counter. (RN)}
+% \changes{v1.2f}{2020/10/10}{No more loading of file `pdftex.def' (RN)}
% \begin{macrocode}
- \begingroup
- \let\AtBeginDocument\@gobble \let\PackageWarningNoLine\@gobbletwo
- \chardef\pdftexversion=121 %
- \newcount\pdfoutput
- \pdfoutput=1 %
- \input{pdftex.def}%
- \edef\x{\endgroup\def\noexpand\ppf@other@extensions{\Gin@extensions}
- }%
- \x
+ \def\ppf@other@extensions{%
+ .pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,%
+ .PDF,.PNG,.JPG,.JPEG,.JBIG2,.JB2%
+ }
% \end{macrocode}
% \changes{v1.1c}{2005/04/17}{Supress handling of pdf\LaTeX\ graphic
% formats in DVI mode. (RN)}
@@ -903,7 +902,7 @@
\define@key{Gin}{ignore}[true]{}%
\define@key{Gin}{showname}[true]{}%
\define@key{Gin}{namefont}{}%
- \@ifundefined{Gin@page}{\define@key{Gin}{page}{}}{}
+ \@ifundefined{Gin@page}{\define@key{Gin}{page}{}}{}%
% \end{macrocode}
% \changes{v1.0o}{2005/03/12}{New code for ``notightpage''. (RN)}
% \changes{v1.1r}{2008/05/02}{Fixed values for \cmd{\PreviewBbAdjust}
@@ -989,7 +988,7 @@
\expandafter\let\expandafter\ppf@pr@psmatrix%
\expandafter=\csname pr@\string\psmatrix\endcsname
\let\ppf@endpsmatrix=\endpsmatrix
- \def\psmatrix{\ppf@test@mmode\ppf@psmatrix}
+ \def\psmatrix{\ppf@test@mmode\ppf@psmatrix}%
\expandafter\def\csname pr@\string\psmatrix\endcsname{%
\ppf@set@mode\ppf@pr@psmatrix}%
\def\endpsmatrix{\ppf@endpsmatrix\ppf@set@mode}%
@@ -1030,7 +1029,7 @@
?({#{(#1)}{({#1})}}{}%
?({#{(#1)}{({#1})}}{}%
?({#{(#1)}{({#1})}}{}%
- }]{\pst@object}}
+ }]{\pst@object}}%
% \end{macrocode}
% \ifGERMAN
% Mehrfaches testweises Setzen von Tabelleninhalten durch ``tabularx''
@@ -1072,7 +1071,7 @@
% \begin{macrocode}
\def\Gscale@@box#1#2#3{%
\toks@{\mbox}%
- }
+ }%
% \end{macrocode}
% \end{macro}
% \begin{macro}{\Ginclude@graphics}
@@ -1175,7 +1174,7 @@
% \begin{macrocode}
\if@ppf@PST@used
\let\ppf@temp\AtBeginDvi\let\AtBeginDvi\@gobble
- \def\c@lor@to@ps#1 #2\@@{}
+ \def\c@lor@to@ps#1 #2\@@{}%
\RequirePackage{pstricks}\let\AtBeginDvi\ppf@temp
\fi
% \end{macrocode}
@@ -1192,8 +1191,8 @@
% Necessary if PSTricks $<$ 2.0.
% \fi
% \begin{macrocode}
- \PSTricksOff
- \def\c@lor@to@ps#1 #2\@@{}
+ \PSTricksOff%
+ \def\c@lor@to@ps#1 #2\@@{}%
}%
}%
% \end{macrocode}
@@ -1204,7 +1203,7 @@
% \PS\ output is now inhibited and later once again.
% \fi
% \begin{macrocode}
- \the\@temptokena
+ \the\@temptokena%
\expandafter\AtBeginDocument\expandafter
{\the\@temptokena\@temptokena{}}%
\@ifundefined{PSTricksLoaded}{}{%
@@ -1294,16 +1293,15 @@
% \end{macrocode}
% \ifGERMAN
% Es werden auch die im DVI-Modus erlaubten Endungen von Grafikdateien
-% ben\"otigt.
+% ben\"otigt (Argument aus `dvips.def' -- 2017/06/20 -- kopiert).
% \fi
% \ifENGLISH
% Too the supported file name extensions from DVI mode are needed.
+% (Argument copied from `dvips.def' -- 2017/06/20).
% \fi
-% \begin{macrocode}
- \begingroup
- \input{dvips.def}%
- \edef\x{\endgroup\def\noexpand\ppf@other@extensions{\Gin@extensions}}%
- \x
+% \changes{v1.2f}{2020/10/10}{No more loading of file `dvisps.def' (RN)}
+% \begin{macrocode}
+ \def\ppf@other@extensions{.eps,.ps,.eps.gz,.ps.gz,.eps.Z,.mps}%
% \end{macrocode}
% \ifGERMAN
% Dummy-Definition f\"ur die im DVI-Modus g\"ultigen Dateitypen.
@@ -1336,7 +1334,7 @@
\or
\ifGin@frame\else\let\@tempa\relax\fi
\fi
- \@tempa
+ \@tempa%
}%
\define@key{Gin}{showname}[true]{%
\lowercase{\Gin@boolkey{#1}}{showname}}%
@@ -1344,7 +1342,7 @@
\begingroup
\@temptokena\expandafter{\ppf@namefont#1}%
\edef\x{\endgroup\def\noexpand\ppf@namefont{\the\@temptokena}}%
- \x
+ \x%
}%
\newcommand*\ppf@filename{}%
\newcommand*\ppf@namefont{\tiny\ttfamily}%
@@ -1435,11 +1433,11 @@
% ``|frame@@=0|''\,$=$\,inner frame, ``|frame@@=1|''\,$=$\,outer frame.
% \fi
% \begin{macrocode}
- \edef\@tempa{\noexpand\ppf@Gin@ii[frame@@=0,\the\@temptokena,
+ \edef\@tempa{\noexpand\ppf@Gin@ii[frame@@=0,\the\@temptokena,%
frame@@=1]{\ppf@tempb}}%
- \@tempa
+ \@tempa%
\ifGin@showname
- \ppf@namefont
+ \ppf@namefont%
\raisebox{-\ht\strutbox}[0pt][0pt]{\llap{\ppf@filename}}%
\gdef\ppf@filename{}%
\fi
@@ -1493,8 +1491,8 @@
\ifnum\c@pspicture>\z@
\filename@parse{\PDFcontainer}%
\PackageWarningNoLine{pst-pdf}{%
- File `\PDFcontainer' not found.\MessageBreak
- Use the following commands to create it:\MessageBreak
+ File `\PDFcontainer' not found. \MessageBreak
+ Use the following commands to create it: \MessageBreak
----------------------------------------------------
\MessageBreak
latex \jobname.tex\MessageBreak
@@ -1568,7 +1566,7 @@
\else
\def\ppf@Gin@keys{}%
\fi
- \ppf@@getpicture
+ \ppf@@getpicture%
\Collect@Body\@gobble}{}%
\AtBeginDocument{%
\@ifundefined{PSTricksLoaded}{}{%
@@ -1649,15 +1647,15 @@
\xdef\ppf@filename{#2}%
\setbox\z@\hbox{\pdfrefximage\@nameuse{ppf@@@#2}}%
\Gin@nat@height\ht\z@ \Gin@nat@width\wd\z@
- \def\Gin@llx{0} \let\Gin@lly\Gin@llx
+ \def\Gin@llx{0}\let\Gin@lly\Gin@llx
\Gin@defaultbp\Gin@urx{\Gin@nat@width}%
\Gin@defaultbp\Gin@ury{\Gin@nat@height}%
- \Gin@bboxtrue\Gin@viewport@code
+ \Gin@bboxtrue\Gin@viewport@code%
\Gin@nat@height\Gin@ury bp%
\advance\Gin@nat@height-\Gin@lly bp%
\Gin@nat@width\Gin@urx bp%
\advance\Gin@nat@width-\Gin@llx bp%
- \Gin@req@sizes
+ \Gin@req@sizes%
\ht\z@\Gin@req@height \wd\z@\Gin@req@width
\leavevmode\box\z@}%
\define@key{Gin}{type}{}%
@@ -1748,14 +1746,14 @@
% \fi
% \begin{macrocode}
\PackageInfo{pst-pdf}{MODE: \ppf@TeX@mode\space (inactive mode)}%
- \newenvironment{postscript}[1][]{\ignorespaces}{}
+ \newenvironment{postscript}[1][]{\ignorespaces}{}%
\let\ppf@is@pdfTeX@graphic\relax
\fi
% \end{macrocode}
% \changes{v1.0f}{2005/02/04}{Config file loading added. (RN)}
% \begin{macrocode}
\InputIfFileExists{pst-pdf.cfg}{%
- \PackageInfo{pst-pdf}{Local config file pst-pdf.cfg used}}{}
+ \PackageInfo{pst-pdf}{Local config file pst-pdf.cfg used}}{}%
%</package>
% \end{macrocode}
%
diff --git a/macros/latex/contrib/pst-pdf/pst-pdf.pdf b/macros/latex/contrib/pst-pdf/pst-pdf.pdf
index f314a58682..9a92fbd080 100644
--- a/macros/latex/contrib/pst-pdf/pst-pdf.pdf
+++ b/macros/latex/contrib/pst-pdf/pst-pdf.pdf
Binary files differ
diff --git a/macros/latex/contrib/realtranspose/README.md b/macros/latex/contrib/realtranspose/README.md
new file mode 100644
index 0000000000..fb2eed3de3
--- /dev/null
+++ b/macros/latex/contrib/realtranspose/README.md
@@ -0,0 +1,31 @@
+# realtranspose - The REAL way to transpose Matrix
+
+With realtranspose you can actually transpose the symbols by rotating them 90 degrees!
+
+See github for examples.
+
+## Usage
+
+It's as easy as `1 succ(1) succ(succ(1))`!
+```latex
+\usepackage{realtranspose}
+
+\begin{document}
+A matrix is symmetric iff
+\[ A = \realtranspose{A} \]
+\end{document}
+```
+
+## Contributing
+
+You have any idea how to extend this joke?
+
+Feel free to either fork it or just open an issue and I'll implement it for you!
+
+## Acknowledgements
+
+- [realhats](https://github.com/mscroggs/realhats) for the idea and much of the Boilerplate
+
+- [Papa Flammy](https://www.youtube.com/channel/UCtAIs1VCQrymlAnw3mGonhw) for all the math ideas
+
+- [This](https://twitter.com/FlammableMaths/status/1293551550179225601) and [that](https://twitter.com/FlammableMaths/status/1281160091845173251) Meme for the inspirations
diff --git a/macros/latex/contrib/realtranspose/realtranspose.dtx b/macros/latex/contrib/realtranspose/realtranspose.dtx
new file mode 100644
index 0000000000..473b75490d
--- /dev/null
+++ b/macros/latex/contrib/realtranspose/realtranspose.dtx
@@ -0,0 +1,52 @@
+%\iffalse meta-comment
+%Copyright 2020 Lars Quentin, Matthew Scroggs, Adam Townsend
+%
+%Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+%and associated documentation files (the "Software"), to deal in the Software without restriction,
+%including without limitation the rights to use, copy, modify, merge, publish, distribute,
+%sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+%furnished to do so, subject to the following conditions:
+%
+%The above copyright notice and this permission notice shall be included in all copies or
+%substantial portions of the Software.
+%
+%THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+%BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+%NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+%DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+%OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%\fi
+
+%\iffalse
+%<*realtranspose>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{realtranspose}[2020/10/08 realtranspose 1.1]
+\RequirePackage{graphicx}
+
+\newcommand{\realtranspose}[1]{
+ % The problem is, that within mathbin it always gets
+ % rendered as textstyle.
+ %
+ % To bypass that, we detect which style was used before
+ %
+ % This way, we can do fun stuff like
+ %
+ % \int_0^T dt = \realtranspose{ \int_0 } dt
+ %
+ \mathchoice{
+ % displaystyle
+ \mathbin{\rotatebox[origin=c]{90}{$\displaystyle #1$}}
+ }{
+ % textstyle
+ \mathbin{\rotatebox[origin=c]{90}{$\textstyle #1$}}
+ }{
+ % scriptstyle
+ \mathbin{\rotatebox[origin=c]{90}{$\scriptstyle #1$}}
+ }{
+ %scriptscriptstyle
+ \mathbin{\rotatebox[origin=c]{90}{$\scriptscriptstyle #1$}}
+ }
+}
+
+%</realtranspose>
+%\fi
diff --git a/macros/latex/contrib/realtranspose/realtranspose.ins b/macros/latex/contrib/realtranspose/realtranspose.ins
new file mode 100644
index 0000000000..7aa5d39bf9
--- /dev/null
+++ b/macros/latex/contrib/realtranspose/realtranspose.ins
@@ -0,0 +1,28 @@
+\input docstrip
+\keepsilent
+% Tells where it has to be installed, not the path of the source
+% (if a docstrip.cfg is provided)
+\usedir{tex/latex/realtranspose}
+\preamble
+Copyright 2020 Lars Quentin, Matthew Scroggs, Adam Townsend
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\endpreamble
+\askforoverwritefalse
+\generate{
+ \file{realtranspose.sty}{\from{realtranspose.dtx}{realtranspose}}
+}
+\endbatchfile
diff --git a/macros/latex/contrib/realtranspose/realtranspose.pdf b/macros/latex/contrib/realtranspose/realtranspose.pdf
new file mode 100644
index 0000000000..c26a8ad707
--- /dev/null
+++ b/macros/latex/contrib/realtranspose/realtranspose.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
index f3a0e2f7b8..c94edcf4a9 100644
--- a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
+++ b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
index d1596dc811..36a027f2c2 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
index 5e2a4a5760..ad18055085 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
index ac57d3f117..2709c594cb 100644
--- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
index 807eed9b3f..e4fe95fabb 100644
--- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
index f15a346e37..b177cb0627 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf
index b2ceb2a40c..930cf8b303 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
index dd35be84bf..109b52fa47 100644
--- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
index 2d7e20cf09..807f3e29d5 100644
--- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
index 452237da2e..6e9b4fc87f 100644
--- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
index ac5f99ee3f..eb7bef384e 100644
--- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
index e27ec9ad9b..63494b04bf 100644
--- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
index 02cddde88f..116f0e7eb3 100644
--- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
index 2ead331ff6..cc0877822e 100644
--- a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
index b3f703a708..c8b233c176 100644
--- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
index 899c73e0cb..7f0f4c1c95 100644
--- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
index 6729f21c12..fa396cc06b 100644
--- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
index d1cbc77bb3..305b066157 100644
--- a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf
index 6b45cd5ba8..12244b8f69 100644
--- a/macros/latex/contrib/reledmac/examples/2-performances.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
index 9fe6fddf58..922f1f5bc6 100644
--- a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
index 61ccac8dce..1e38d33146 100644
--- a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
index 0f6ae4dae2..bdd55b8e45 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
index 92b6229cac..94cdfe1659 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
index f2b6ee1c7a..fbca34a8c1 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
index 268fd1468e..45ac71f195 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
index 0d8864408b..ddc7c4e749 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
index 39ca247aa0..2de01aef9e 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
index c3a643d486..89e1ea3103 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
index 59e2af4868..a5f3355d67 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
index 7d3654143b..5f83fd57ee 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
index 06f2a19a5a..617e0ee82a 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
index 4dadb2ab1b..593c24df9e 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
index 4f2e3e02ba..c80fd4b49f 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
index 6caa79d4fb..ff5d6911e6 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
index 5dc2f6609f..94804f51f5 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
index eb55f87205..67ae673b4f 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
index e3d066a336..e25c1b3650 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
index 066672132b..e4bdc2d5cb 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
index 8f4e7e578c..953a25666d 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
index ab4d8d79d7..93a9b9898f 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
index 9e4354a45c..c442363e00 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
index fb4fc9e6eb..3785224913 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
index 12c76ef43f..27570bd60c 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
index e9285204b4..3376b666bc 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
index 017949e363..042048f611 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
index aab86d692e..4e93e687c9 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/migration.pdf b/macros/latex/contrib/reledmac/migration.pdf
index a4ba1b2694..5c687349c4 100644
--- a/macros/latex/contrib/reledmac/migration.pdf
+++ b/macros/latex/contrib/reledmac/migration.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledmac.dtx b/macros/latex/contrib/reledmac/reledmac.dtx
index 2ce385c8e2..90a5e2558b 100644
--- a/macros/latex/contrib/reledmac/reledmac.dtx
+++ b/macros/latex/contrib/reledmac/reledmac.dtx
@@ -566,6 +566,7 @@
% \changes{v2.34.4}{2020/09/16}{Fix some bugs with lineation by page, when a numbered section starts at the very beginning of page.}
% \changes{v2.34.4}{2020/09/16}{Fix bugs with \protect\cs{parafootsepX} outside of numbered section.}
% \changes{v2.34.5}{2020/09/23}{Fix incompatibility between \protect\cs{apprefwithpage} / \protect\cs{SErefwithpage} and line number annotation mechanism.}
+% \changes{v2.34.6}{2020/09/23}{Fix incompatibility with \protect\package{calc} package (add with v.2.34.4}
% Typeset scholarly editions with \LaTeX\thanks{This file (\dtxfilename)
% has version number \fileversion, last revised \filedate.}}
%
@@ -4406,7 +4407,7 @@
% \begin{macrocode}
%<*code>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{reledmac}[2020/09/23 v2.34.5 typesetting critical editions]%
+\ProvidesPackage{reledmac}[2020/10/10 v2.34.6 typesetting critical editions]%
% \end{macrocode}
%
% \subsection{Package options}
@@ -5042,6 +5043,11 @@
\reledmac@error{Failed to patch the \string\addtocounter\space command}{\@ehc}%
}%
% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\led@error@fail@patch@stepcounter}{%
+ \reledmac@error{Failed to patch the \string\stepcounter\space command}{\@ehc}%
+}%
+% \end{macrocode}
% \end{macro}
% \begin{macro}{\led@warn@edinde@outsidenumbering}
% \begin{macrocode}
@@ -16265,16 +16271,27 @@
{}%
{\led@error@fail@patch@@outputpage}%
}%
-\apptocmd{\setcounter}{%
- \IfStrEq{#1}{page}{\set@this@c@page}{}%
- }%
- {}%
- {\led@error@fail@patch@setcounter}%
-\apptocmd{\addtocounter}{%
- \IfStrEq{#1}{page}{\set@this@c@page}{}%
- }%
- {}%
- {\led@error@fail@patch@addtocounter}%
+\catcode`\#=12%
+\AtBeginDocument{%
+ \apptocmd{\setcounter}{%
+ \IfStrEq{#1}{page}{\set@this@c@page}{}%
+ }%
+ {}%
+ {\led@error@fail@patch@setcounter}%
+ \apptocmd{\addtocounter}{%
+ \IfStrEq{#1}{page}{\set@this@c@page}{}%
+ }%
+ {}%
+ {\led@error@fail@patch@addtocounter}%
+ \@ifpackageloaded{calc}{%
+ \apptocmd{\stepcounter}{%Because calc.sty does not use addtocounter in stepcounter
+ \IfStrEq{#1}{page}{\set@this@c@page}{}%
+ }%
+ {}%
+ {\led@error@fail@patch@steptocounter}%
+ }{}%
+}%
+\catcode`\#=6%
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/reledmac/reledmac.pdf b/macros/latex/contrib/reledmac/reledmac.pdf
index af374f3c86..a5b454de51 100644
--- a/macros/latex/contrib/reledmac/reledmac.pdf
+++ b/macros/latex/contrib/reledmac/reledmac.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf
index b2755adbda..05dcb216ea 100644
--- a/macros/latex/contrib/reledmac/reledpar.pdf
+++ b/macros/latex/contrib/reledmac/reledpar.pdf
Binary files differ
diff --git a/macros/latex/contrib/verifica/README b/macros/latex/contrib/verifica/README
index d170805cef..4f2664ee70 100644
--- a/macros/latex/contrib/verifica/README
+++ b/macros/latex/contrib/verifica/README
@@ -1,4 +1,4 @@
-The verifica document class v1.2 2020/02/07
+The verifica document class v1.3 2020/10/10
---------------------------------------------------------------------
Riccardo Dossena Email: riccardo.dossena@gmail.com
---------------------------------------------------------------------
@@ -77,7 +77,7 @@ setspace, multicol, gensymb, newunicodechar, textcomp, eurosym,
tabto, tabularx, lineno, bm, cmbright.
If the option "14pt" is set, it loads the extarticle document class.
-2020/02/07
+2020/10/10
Riccardo Dossena
---------------------------------------------------------------------
If you have any ideas, questions, suggestions, feedback or bugs to
diff --git a/macros/latex/contrib/verifica/example1.pdf b/macros/latex/contrib/verifica/example1.pdf
index 6c2d513dd7..2aee584747 100644
--- a/macros/latex/contrib/verifica/example1.pdf
+++ b/macros/latex/contrib/verifica/example1.pdf
Binary files differ
diff --git a/macros/latex/contrib/verifica/example1.tex b/macros/latex/contrib/verifica/example1.tex
index c802df96cf..b14f4dae1d 100644
--- a/macros/latex/contrib/verifica/example1.tex
+++ b/macros/latex/contrib/verifica/example1.tex
@@ -11,7 +11,7 @@
\disciplina{matematica}
\istituto{Liceo ``G. Novello'' -- Codogno}
\classe{5\tsa B}
-\data{7 febbraio 2020}
+\data{10 ottobre 2020}
\tempo{60 minuti}
\intestazione
diff --git a/macros/latex/contrib/verifica/example2.pdf b/macros/latex/contrib/verifica/example2.pdf
index 14c3f9cb56..542e67a7dc 100644
--- a/macros/latex/contrib/verifica/example2.pdf
+++ b/macros/latex/contrib/verifica/example2.pdf
Binary files differ
diff --git a/macros/latex/contrib/verifica/example2.tex b/macros/latex/contrib/verifica/example2.tex
index e25d13d39e..e633757259 100644
--- a/macros/latex/contrib/verifica/example2.tex
+++ b/macros/latex/contrib/verifica/example2.tex
@@ -10,7 +10,7 @@
\disciplina{matematica}
\istituto{Liceo ``G. Novello'' -- Codogno}
\classe{5\tsa B}
-\data{7 febbraio 2020}
+\data{10 ottobre 2020}
\tempo{60 minuti}
\intestazione
diff --git a/macros/latex/contrib/verifica/example3.pdf b/macros/latex/contrib/verifica/example3.pdf
index a9959d2209..23dbccc670 100644
--- a/macros/latex/contrib/verifica/example3.pdf
+++ b/macros/latex/contrib/verifica/example3.pdf
Binary files differ
diff --git a/macros/latex/contrib/verifica/example3.tex b/macros/latex/contrib/verifica/example3.tex
index 6d83a3e170..4b1d17964b 100644
--- a/macros/latex/contrib/verifica/example3.tex
+++ b/macros/latex/contrib/verifica/example3.tex
@@ -10,7 +10,7 @@
\disciplina{matematica}
\istituto{Liceo ``G. Novello'' -- Codogno}
\classe{5\tsa B}
-\data{7 febbraio 2020}
+\data{10 ottobre 2020}
\tempo{60 minuti}
\intestazione
diff --git a/macros/latex/contrib/verifica/example4.pdf b/macros/latex/contrib/verifica/example4.pdf
index 8cbd3e6db4..5a6619cf4a 100644
--- a/macros/latex/contrib/verifica/example4.pdf
+++ b/macros/latex/contrib/verifica/example4.pdf
Binary files differ
diff --git a/macros/latex/contrib/verifica/example4.tex b/macros/latex/contrib/verifica/example4.tex
index d65141df8b..58548368fd 100644
--- a/macros/latex/contrib/verifica/example4.tex
+++ b/macros/latex/contrib/verifica/example4.tex
@@ -12,7 +12,7 @@
\disciplina{matematica e fisica}
\istituto{Liceo ``G. Novello'' -- Codogno}
\classe{4\tsa C}
-\data{7 febbraio 2020}
+\data{10 ottobre 2020}
\tempo{55 minuti}
\lineanome
diff --git a/macros/latex/contrib/verifica/example5.pdf b/macros/latex/contrib/verifica/example5.pdf
index 9b5854976d..806f3533c8 100644
--- a/macros/latex/contrib/verifica/example5.pdf
+++ b/macros/latex/contrib/verifica/example5.pdf
Binary files differ
diff --git a/macros/latex/contrib/verifica/example5.tex b/macros/latex/contrib/verifica/example5.tex
index cd4e8df1d8..96584a3176 100644
--- a/macros/latex/contrib/verifica/example5.tex
+++ b/macros/latex/contrib/verifica/example5.tex
@@ -11,7 +11,7 @@
\disciplina{matematica e fisica}
\istituto{Liceo ``G. Novello'' -- Codogno}
\classe{4\tsa C}
-\data{7 febbraio 2020}
+\data{10 ottobre 2020}
\tempo{55 minuti}
\lineanome
diff --git a/macros/latex/contrib/verifica/verifica-template.tex b/macros/latex/contrib/verifica/verifica-template.tex
index 0a01bcc0c2..b0c2f944c7 100644
--- a/macros/latex/contrib/verifica/verifica-template.tex
+++ b/macros/latex/contrib/verifica/verifica-template.tex
@@ -13,7 +13,7 @@
%\disciplina{matematica}
%\istituto{Liceo ``G. Novello'' -- Codogno}
%\classe{5\tsa W}
-%\data{7 febbraio 2020}
+%\data{10 ottobre 2020}
%\tempo{2 ore}
%\lineanome % stampa una linea punteggiata per scrivere il nome del candidato
diff --git a/macros/latex/contrib/verifica/verifica.dtx b/macros/latex/contrib/verifica/verifica.dtx
index 38c9d521f2..84fca3a2b3 100644
--- a/macros/latex/contrib/verifica/verifica.dtx
+++ b/macros/latex/contrib/verifica/verifica.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% verifica.cls. Version: 1.2 - February 7, 2020.
+% verifica.cls. Version: 1.3 - October 10, 2020.
% Author: Riccardo DOSSENA <riccardo.dossena@gmail.com>
%
% Questa รจ una classe per comporre le verifiche
@@ -29,7 +29,7 @@
%<class>\ProvidesClass{verifica}
%<package>\ProvidesPackage{ver-doc}
%<*class|package>
- [2020/02/07 v1.2 Riccardo Dossena]
+ [2020/10/10 v1.3 Riccardo Dossena]
%</class|package>
%
%<*driver>
@@ -1935,7 +1935,6 @@ Di default sono definiti $\phi$ e $\theta$, ma si possono ripristinare
\RequirePackage{gensymb}
\RequirePackage{newunicodechar}
\RequirePackage{textcomp}
-\RequirePackage{eurosym}
\RequirePackage{tabto}
\RequirePackage{tabularx}
\RequirePackage[running]{lineno}
@@ -1987,9 +1986,13 @@ Di default sono definiti $\phi$ e $\theta$, ma si possono ripristinare
\SetSymbolFont{operators}{bold}{OT1}{cmbr}{b}{n}
\relax}{}
% \end{macrocode}
-% The \pack{bm} package will be loaded after all the other packages (in
-% particular after \pack{cmbright}).
+% \changes{v1.3}{2020/10/10}{Fixed a bug related to the \pack{eurosym} package,
+% which must be loaded after \pack{babel}.}
+% The \pack{eurosym} and \pack{bm} packages will be loaded after all the other
+% packages (in particular, \pack{eurosym} must be loaded after \pack{babel},
+% and \pack{bm} after \pack{cmbright}).
% \begin{macrocode}
+\RequirePackage{eurosym}
\RequirePackage{bm}
% \end{macrocode}
% \begin{macro}{\restorephi}
diff --git a/macros/latex/contrib/verifica/verifica.pdf b/macros/latex/contrib/verifica/verifica.pdf
index 010da52ba6..7682f38d4c 100644
--- a/macros/latex/contrib/verifica/verifica.pdf
+++ b/macros/latex/contrib/verifica/verifica.pdf
Binary files differ