diff options
Diffstat (limited to 'macros')
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 Binary files differindex 47257e50d3..140d0c79f3 100644 --- a/macros/generic/expkv-opt/expkv-opt.pdf +++ b/macros/generic/expkv-opt/expkv-opt.pdf 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 Binary files differindex 627341a78f..4396ddfee2 100644 --- a/macros/generic/expkv/expkv.pdf +++ b/macros/generic/expkv/expkv.pdf 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 Binary files differindex db9bc65168..3482861a12 100644 --- a/macros/latex/contrib/paresse/paresse-eng.pdf +++ b/macros/latex/contrib/paresse/paresse-eng.pdf diff --git a/macros/latex/contrib/paresse/paresse-fra.pdf b/macros/latex/contrib/paresse/paresse-fra.pdf Binary files differindex b43c4ce8eb..214fd42f5c 100644 --- a/macros/latex/contrib/paresse/paresse-fra.pdf +++ b/macros/latex/contrib/paresse/paresse-fra.pdf 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 Binary files differindex 8ef2eb3e55..fd50452b00 100644 --- a/macros/latex/contrib/paresse/paresse.pdf +++ b/macros/latex/contrib/paresse/paresse.pdf 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 Binary files differindex 561f570f1b..b1c1ebfed2 100644 --- a/macros/latex/contrib/pst-pdf/pst-pdf-DE.pdf +++ b/macros/latex/contrib/pst-pdf/pst-pdf-DE.pdf diff --git a/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf b/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf Binary files differindex d910e4a708..f6d4756d7f 100644 --- a/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf +++ b/macros/latex/contrib/pst-pdf/pst-pdf-example.pdf 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 Binary files differindex f314a58682..9a92fbd080 100644 --- a/macros/latex/contrib/pst-pdf/pst-pdf.pdf +++ b/macros/latex/contrib/pst-pdf/pst-pdf.pdf 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 Binary files differnew file mode 100644 index 0000000000..c26a8ad707 --- /dev/null +++ b/macros/latex/contrib/realtranspose/realtranspose.pdf diff --git a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf Binary files differindex 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 diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf Binary files differindex d1596dc811..36a027f2c2 100644 --- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf Binary files differindex 5e2a4a5760..ad18055085 100644 --- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf Binary files differindex ac57d3f117..2709c594cb 100644 --- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf Binary files differindex 807eed9b3f..e4fe95fabb 100644 --- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf +++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf Binary files differindex f15a346e37..b177cb0627 100644 --- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf +++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf Binary files differindex b2ceb2a40c..930cf8b303 100644 --- a/macros/latex/contrib/reledmac/examples/1-verses.pdf +++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf Binary files differindex dd35be84bf..109b52fa47 100644 --- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf +++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf Binary files differindex 2d7e20cf09..807f3e29d5 100644 --- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf Binary files differindex 452237da2e..6e9b4fc87f 100644 --- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf Binary files differindex ac5f99ee3f..eb7bef384e 100644 --- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf +++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf Binary files differindex e27ec9ad9b..63494b04bf 100644 --- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf Binary files differindex 02cddde88f..116f0e7eb3 100644 --- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf +++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf 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 Binary files differindex 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 diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf Binary files differindex b3f703a708..c8b233c176 100644 --- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf Binary files differindex 899c73e0cb..7f0f4c1c95 100644 --- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf +++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf Binary files differindex 6729f21c12..fa396cc06b 100644 --- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf +++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf 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 Binary files differindex 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 diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf Binary files differindex 6b45cd5ba8..12244b8f69 100644 --- a/macros/latex/contrib/reledmac/examples/2-performances.pdf +++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf Binary files differindex 268fd1468e..45ac71f195 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/macros/latex/contrib/reledmac/migration.pdf b/macros/latex/contrib/reledmac/migration.pdf Binary files differindex a4ba1b2694..5c687349c4 100644 --- a/macros/latex/contrib/reledmac/migration.pdf +++ b/macros/latex/contrib/reledmac/migration.pdf 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 Binary files differindex af374f3c86..a5b454de51 100644 --- a/macros/latex/contrib/reledmac/reledmac.pdf +++ b/macros/latex/contrib/reledmac/reledmac.pdf diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf Binary files differindex b2755adbda..05dcb216ea 100644 --- a/macros/latex/contrib/reledmac/reledpar.pdf +++ b/macros/latex/contrib/reledmac/reledpar.pdf 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 Binary files differindex 6c2d513dd7..2aee584747 100644 --- a/macros/latex/contrib/verifica/example1.pdf +++ b/macros/latex/contrib/verifica/example1.pdf 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 Binary files differindex 14c3f9cb56..542e67a7dc 100644 --- a/macros/latex/contrib/verifica/example2.pdf +++ b/macros/latex/contrib/verifica/example2.pdf 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 Binary files differindex a9959d2209..23dbccc670 100644 --- a/macros/latex/contrib/verifica/example3.pdf +++ b/macros/latex/contrib/verifica/example3.pdf 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 Binary files differindex 8cbd3e6db4..5a6619cf4a 100644 --- a/macros/latex/contrib/verifica/example4.pdf +++ b/macros/latex/contrib/verifica/example4.pdf 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 Binary files differindex 9b5854976d..806f3533c8 100644 --- a/macros/latex/contrib/verifica/example5.pdf +++ b/macros/latex/contrib/verifica/example5.pdf 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 Binary files differindex 010da52ba6..7682f38d4c 100644 --- a/macros/latex/contrib/verifica/verifica.pdf +++ b/macros/latex/contrib/verifica/verifica.pdf |