summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/ifetex/README17
-rw-r--r--macros/latex/contrib/ifetex/ifetex.dtx235
-rw-r--r--macros/latex/contrib/ifetex/ifetex.ins11
-rw-r--r--macros/latex/contrib/ifetex/ifetex.pdfbin144943 -> 0 bytes
-rw-r--r--macros/latex/contrib/iftex/README29
-rw-r--r--macros/latex/contrib/iftex/README.md65
-rw-r--r--macros/latex/contrib/iftex/ann.txt52
-rw-r--r--macros/latex/contrib/iftex/ifetex.sty18
-rw-r--r--macros/latex/contrib/iftex/ifluatex.sty17
-rw-r--r--macros/latex/contrib/iftex/ifpdf.sty17
-rw-r--r--macros/latex/contrib/iftex/iftex.pdfbin30641 -> 201646 bytes
-rw-r--r--macros/latex/contrib/iftex/iftex.sty304
-rw-r--r--macros/latex/contrib/iftex/iftex.tex256
-rw-r--r--macros/latex/contrib/iftex/ifvtex.sty45
-rw-r--r--macros/latex/contrib/iftex/ifxetex.sty17
-rw-r--r--macros/latex/contrib/latino-sine-flexione/README.md35
-rw-r--r--macros/latex/contrib/latino-sine-flexione/fundamento.tex135
-rw-r--r--macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty33
-rw-r--r--macros/latex/contrib/oberdiek/README.txt2
-rw-r--r--macros/latex/contrib/oberdiek/accsupp.pdfbin142568 -> 146703 bytes
-rw-r--r--macros/latex/contrib/oberdiek/aliascnt.pdfbin101507 -> 103506 bytes
-rw-r--r--macros/latex/contrib/oberdiek/alphalph.pdfbin192492 -> 198686 bytes
-rw-r--r--macros/latex/contrib/oberdiek/askinclude.pdfbin253846 -> 265850 bytes
-rw-r--r--macros/latex/contrib/oberdiek/atbegshi.pdfbin230223 -> 238401 bytes
-rw-r--r--macros/latex/contrib/oberdiek/atenddvi.pdfbin94323 -> 96112 bytes
-rw-r--r--macros/latex/contrib/oberdiek/attachfile2.pdfbin261387 -> 271773 bytes
-rw-r--r--macros/latex/contrib/oberdiek/atveryend.pdfbin185103 -> 191935 bytes
-rw-r--r--macros/latex/contrib/oberdiek/auxhook.pdfbin103134 -> 105339 bytes
-rw-r--r--macros/latex/contrib/oberdiek/bigintcalc.pdfbin334661 -> 352284 bytes
-rw-r--r--macros/latex/contrib/oberdiek/bitset.pdfbin334786 -> 350945 bytes
-rw-r--r--macros/latex/contrib/oberdiek/bmpsize.pdfbin320950 -> 334590 bytes
-rw-r--r--macros/latex/contrib/oberdiek/bookmark.pdfbin283904 -> 295034 bytes
-rw-r--r--macros/latex/contrib/oberdiek/catchfile.pdfbin139933 -> 144454 bytes
-rw-r--r--macros/latex/contrib/oberdiek/centernot.pdfbin165845 -> 167624 bytes
-rw-r--r--macros/latex/contrib/oberdiek/chemarr.pdfbin92479 -> 94602 bytes
-rw-r--r--macros/latex/contrib/oberdiek/classlist.pdfbin94019 -> 96619 bytes
-rw-r--r--macros/latex/contrib/oberdiek/colonequals.pdfbin100988 -> 102626 bytes
-rw-r--r--macros/latex/contrib/oberdiek/dvipscol.pdfbin88021 -> 89542 bytes
-rw-r--r--macros/latex/contrib/oberdiek/embedfile.pdfbin209130 -> 216223 bytes
-rw-r--r--macros/latex/contrib/oberdiek/engord.pdfbin128998 -> 132358 bytes
-rw-r--r--macros/latex/contrib/oberdiek/enparen.pdfbin117643 -> 120297 bytes
-rw-r--r--macros/latex/contrib/oberdiek/eolgrab.pdfbin130535 -> 134496 bytes
-rw-r--r--macros/latex/contrib/oberdiek/epstopdf.pdfbin175392 -> 181478 bytes
-rw-r--r--macros/latex/contrib/oberdiek/etexcmds.pdfbin127044 -> 131015 bytes
-rw-r--r--macros/latex/contrib/oberdiek/fibnum.pdfbin142121 -> 146925 bytes
-rw-r--r--macros/latex/contrib/oberdiek/flags.pdfbin100301 -> 102501 bytes
-rw-r--r--macros/latex/contrib/oberdiek/gettitlestring.pdfbin137706 -> 142847 bytes
-rw-r--r--macros/latex/contrib/oberdiek/grfext.pdfbin144083 -> 149013 bytes
-rw-r--r--macros/latex/contrib/oberdiek/grffile.pdfbin155400 -> 159592 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hobsub-generic.sty12
-rw-r--r--macros/latex/contrib/oberdiek/hobsub-hyperref.sty15
-rw-r--r--macros/latex/contrib/oberdiek/hobsub.pdfbin150496 -> 0 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hobsub.sty5
-rw-r--r--macros/latex/contrib/oberdiek/hologo.pdfbin380470 -> 397486 bytes
-rw-r--r--macros/latex/contrib/oberdiek/holtxdoc.pdfbin120154 -> 123250 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hopatch.pdfbin122699 -> 126669 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hycolor.pdfbin218241 -> 226620 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypbmsec.pdfbin108788 -> 110435 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypcap.pdfbin106566 -> 109017 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypdestopt.pdfbin126296 -> 129527 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypdoc.pdfbin145294 -> 150628 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypgotoe.pdfbin105001 -> 108266 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hyphsubst.pdfbin122760 -> 126506 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ifdraft.pdfbin90912 -> 92297 bytes
-rw-r--r--macros/latex/contrib/oberdiek/iflang.pdfbin151203 -> 155949 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ifluatex.pdfbin117967 -> 0 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ifpdf.pdfbin68735 -> 0 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ifvtex.pdfbin119287 -> 0 bytes
-rw-r--r--macros/latex/contrib/oberdiek/infwarerr.pdfbin141514 -> 147080 bytes
-rw-r--r--macros/latex/contrib/oberdiek/inputenx.pdfbin755252 -> 795215 bytes
-rw-r--r--macros/latex/contrib/oberdiek/intcalc.pdfbin311180 -> 326643 bytes
-rw-r--r--macros/latex/contrib/oberdiek/kvdefinekeys.pdfbin113497 -> 117906 bytes
-rw-r--r--macros/latex/contrib/oberdiek/kvoptions.pdfbin299355 -> 309969 bytes
-rw-r--r--macros/latex/contrib/oberdiek/kvsetkeys.pdfbin212326 -> 219662 bytes
-rw-r--r--macros/latex/contrib/oberdiek/letltxmacro.pdfbin142429 -> 147322 bytes
-rw-r--r--macros/latex/contrib/oberdiek/listingsutf8.pdfbin117793 -> 120491 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ltxcmds.pdfbin279912 -> 292290 bytes
-rw-r--r--macros/latex/contrib/oberdiek/luacolor.pdfbin136440 -> 140627 bytes
-rw-r--r--macros/latex/contrib/oberdiek/luatex.pdfbin198503 -> 205270 bytes
-rw-r--r--macros/latex/contrib/oberdiek/magicnum.pdfbin146217 -> 151116 bytes
-rw-r--r--macros/latex/contrib/oberdiek/makerobust.pdfbin87707 -> 89302 bytes
-rw-r--r--macros/latex/contrib/oberdiek/mleftright.pdfbin125901 -> 129818 bytes
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.pdfbin446184 -> 439336 bytes
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.tex30
-rw-r--r--macros/latex/contrib/oberdiek/pagegrid.pdfbin139288 -> 144113 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pagesel.pdfbin119176 -> 122302 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcol.pdfbin141045 -> 145322 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolfoot.pdfbin109765 -> 112535 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolmk.pdfbin139712 -> 144057 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparallel.pdfbin144508 -> 149359 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparcolumns.pdfbin122729 -> 125421 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcrypt.pdfbin135571 -> 139967 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfescape.pdfbin225919 -> 234876 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdflscape.pdfbin128747 -> 132649 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfrender.pdfbin195863 -> 202520 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdftexcmds.pdfbin225175 -> 232471 bytes
-rw-r--r--macros/latex/contrib/oberdiek/picture.pdfbin112168 -> 114999 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pmboxdraw.pdfbin489245 -> 516461 bytes
-rw-r--r--macros/latex/contrib/oberdiek/protecteddef.pdfbin133470 -> 138222 bytes
-rw-r--r--macros/latex/contrib/oberdiek/refcount.pdfbin172463 -> 177955 bytes
-rw-r--r--macros/latex/contrib/oberdiek/rerunfilecheck.pdfbin136401 -> 141152 bytes
-rw-r--r--macros/latex/contrib/oberdiek/resizegather.pdfbin130372 -> 134361 bytes
-rw-r--r--macros/latex/contrib/oberdiek/rotchiffre.pdfbin156279 -> 161338 bytes
-rw-r--r--macros/latex/contrib/oberdiek/scrindex.pdfbin108115 -> 110890 bytes
-rw-r--r--macros/latex/contrib/oberdiek/selinput.pdfbin150589 -> 153732 bytes
-rw-r--r--macros/latex/contrib/oberdiek/setouterhbox.pdfbin146528 -> 151424 bytes
-rw-r--r--macros/latex/contrib/oberdiek/settobox.pdfbin110669 -> 112454 bytes
-rw-r--r--macros/latex/contrib/oberdiek/soulutf8.pdfbin214859 -> 224591 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stackrel.pdfbin98455 -> 100674 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stampinclude.pdfbin100345 -> 101903 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stringenc.pdfbin546904 -> 582291 bytes
-rw-r--r--macros/latex/contrib/oberdiek/tabularht.pdfbin144130 -> 148442 bytes
-rw-r--r--macros/latex/contrib/oberdiek/tabularkv.pdfbin86482 -> 88749 bytes
-rw-r--r--macros/latex/contrib/oberdiek/telprint.pdfbin126846 -> 130156 bytes
-rw-r--r--macros/latex/contrib/oberdiek/thepdfnumber.pdfbin161072 -> 167137 bytes
-rw-r--r--macros/latex/contrib/oberdiek/transparent.pdfbin97755 -> 100291 bytes
-rw-r--r--macros/latex/contrib/oberdiek/twoopt.pdfbin94820 -> 96863 bytes
-rw-r--r--macros/latex/contrib/oberdiek/uniquecounter.pdfbin129168 -> 134116 bytes
-rw-r--r--macros/latex/contrib/oberdiek/zref.pdfbin496009 -> 516424 bytes
-rw-r--r--macros/latex/contrib/pseudo/Makefile8
-rw-r--r--macros/latex/contrib/pseudo/VERSION2
-rw-r--r--macros/latex/contrib/pseudo/doc/fig/readmefig.svg130
-rw-r--r--macros/latex/contrib/pseudo/doc/pseudo.pdfbin555540 -> 574424 bytes
-rw-r--r--macros/latex/contrib/pseudo/doc/pseudo.tex275
-rw-r--r--macros/latex/contrib/pseudo/pseudo.sty113
-rw-r--r--macros/latex/contrib/pseudo/test/pseudotest.tex209
-rw-r--r--macros/latex/contrib/subfiles/subfiles.dtx147
-rw-r--r--macros/latex/contrib/subfiles/subfiles.pdfbin205122 -> 211014 bytes
128 files changed, 1552 insertions, 682 deletions
diff --git a/macros/latex/contrib/ifetex/README b/macros/latex/contrib/ifetex/README
deleted file mode 100644
index b11fd0baa9..0000000000
--- a/macros/latex/contrib/ifetex/README
+++ /dev/null
@@ -1,17 +0,0 @@
-LaTeX package 'ifetex'
-~~~~~~~~~~~~~~~~~~~~~~
-Copyright (c) 2011-2018 by Martin Scharrer <martin@scharrer-online.de>
-CTAN: http://www.ctan.org/pkg/ifetex
-Code repository: https://bitbucket.org/martin_scharrer/ifetex
-Issue tracker: https://bitbucket.org/martin_scharrer/ifetex/issues
-
-This small package provides the if-switch \ifetex which indicated whether
-e-TeX is available or not.
-
-The package can be loaded as LaTeX package using `\usepackage{ifetex}` or in
-plainTeX using `\input ifetex`. In both cases it aborts silently if the \ifetex macro
-is already defined.
-
-The package currently test if \eTeXversion is defined as a primitive and
-assumes e-TeX if so.
-
diff --git a/macros/latex/contrib/ifetex/ifetex.dtx b/macros/latex/contrib/ifetex/ifetex.dtx
deleted file mode 100644
index fdcd4d814e..0000000000
--- a/macros/latex/contrib/ifetex/ifetex.dtx
+++ /dev/null
@@ -1,235 +0,0 @@
-% \iffalse meta-comment
-%<=*COPYRIGHT>
-%% Copyright (C) 2011-2018 by Martin Scharrer <martin@scharrer-online.de>
-%% ---------------------------------------------------------------------------
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This work has the LPPL maintenance status `maintained'.
-%%
-%% The Current Maintainer of this work is Martin Scharrer.
-%%
-%% This work consists of the files ifetex.dtx and ifetex.ins
-%% and the derived filebase ifetex.sty.
-%%
-%<=/COPYRIGHT>
-% \fi
-%
-% \iffalse
-%<*driver>
-\ProvidesFile{ifetex.dtx}[%
-%<=*DATE>
- 2018/03/31
-%<=/DATE>
-%<=*VERSION>
- v1.2a
-%<=/VERSION>
- Conditional to test for e-TeX]
-\documentclass{ydoc}
-\GetFileInfo{ifetex.dtx}
-\usepackage{ifetex}[\filedate]
-\EnableCrossrefs
-\CodelineIndex
-\RecordChanges
-\begin{document}
- \DocInput{\jobname.dtx}
- \PrintChanges
- \PrintIndex
-\end{document}
-%</driver>
-% \fi
-%
-% \CheckSum{73}
-%
-% \CharacterTable
-% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-% Digits \0\1\2\3\4\5\6\7\8\9
-% Exclamation \! Double quote \" Hash (number) \#
-% Dollar \$ Percent \% Ampersand \&
-% Acute accent \' Left paren \( Right paren \)
-% Asterisk \* Plus \+ Comma \,
-% Minus \- Point \. Solidus \/
-% Colon \: Semicolon \; Less than \<
-% Equals \= Greater than \> Question mark \?
-% Commercial at \@ Left bracket \[ Backslash \\
-% Right bracket \] Circumflex \^ Underscore \_
-% Grave accent \` Left brace \{ Vertical bar \|
-% Right brace \} Tilde \~}
-%
-%
-% \changes{v1.0}{2011/10/31}{First version.}
-% \changes{v1.1}{2011/11/06}{Changes to manual, local declaration of \cs{ifetex}.}
-% \changes{v1.2}{2011/12/15}{Added \cs{NeedsETeX} \protect\LaTeX\ macro.}
-% \changes{v1.2a}{2018/03/31}{Improvements to manual.}
-%
-%
-% \DoNotIndex{\newcommand,\newenvironment}
-%
-% \GetFileInfo{ifetex.dtx}
-% \author{Martin Scharrer}
-% \email{martin@scharrer-online.de}
-%
-% \maketitle
-%
-% \providecommand\eTeX{$\epsilon$-\TeX}
-% \begin{abstract}\noindent
-% This small package provides the if-switch \Macro\ifetex which
-% indicated whether \eTeX\ is available or not.
-% \end{abstract}
-%
-% \smallskip
-% \begin{multicols}{2}
-% \setcounter{tocdepth}{2}
-% \tableofcontents
-% \end{multicols}
-%
-% \section*{Links}
-% This package is developed using an
-% \href{https://bitbucket.org/martin_scharrer/ifetex/downloads/}{Mercurial}
-% (HG) revision control repository on \href{https://bitbucket.org/}{Bitbucket.org}.
-% It is published on the \href{http://www.ctan.org/}{Comprehensive \TeX\ Archive Network} (CTAN)
-% and available with the main \TeX\ distributions \TeX Live and Mik\TeX.
-%
-% Bug reports and feature requests should be submitted using the issue tracker linked below.
-%
-% The following table lists the location of the package, its downloadable files, both on CTAN and
-% on the package website.
-%
-% \begin{center}\small
-% \begin{tabular}{ll}
-% \toprule
-% CTAN & \small\url{https://www.ctan.org/pkg/ifetex}\\
-% PDF Manual & \small\url{http://mirrors.ctan.org/macros/latex/contrib/ifetex/ifetex.pdf}\\
-% TDS ZIP & \small\url{http://mirrors.ctan.org/install/macros/latex/contrib/ifetex.tds.zip}\\
-% \midrule
-% Website & \small\url{https://bitbucket.org/martin_scharrer/ifetex/}\\
-% HG Repository & \small\url{https://bitbucket.org/martin_scharrer/ifetex/}\\
-% Issue Tracker & \small\url{https://bitbucket.org/martin_scharrer/ifetex/issues}\\
-% Downloads & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/}\\
-% PDF Manual & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/ifetex.pdf}\\
-% TDS ZIP & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/ifetex.tds.zip}\\
-% Source ZIP & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/ifetex.zip}\\
-% \bottomrule
-% \end{tabular}
-% \end{center}
-%
-%
-%
-% \clearpage
-% \section{Usage}
-% The package can be loaded as \LaTeX\ package using \Macro\usepackage{ifetex} or in plain\TeX\ using \Macro\input' ifetex'.
-% In both cases it aborts silently if the \Macro\ifetex macro is already defined.
-%
-% The package currently test if \Macro\eTeXversion is defined as a primitive and assumes \eTeX\ if so.
-%
-% Note that almost all modern \LaTeX\ distributions use \eTeX.
-% The two major distributions \TeX\ Live and Mik\TeX\ support it and use it by default (except for the classic |tex|).
-% The \LaTeX\ which comes with \emph{Scientific Work Place} by MacKichan seems to not support \eTeX\ yet.
-% Package authors can use this package to test for missing \eTeX\ and provide fall-back code.
-%
-% \DescribeMacro\ifetex
-% Equal to \Macro\iftrue if \eTeX\ support is present and \Macro\iffalse otherwise.
-%
-% \DescribeMacro\NeedsETeX[<version>]
-% The \LaTeX\ package provides this macro which can be used in packages or classes to produce an error if \eTeX\ is not available,
-% similar to \Macro\NeedsTeXFormat. In addition an optional version number can be given in the format x.y, where x is the main version and y the revision.
-% This number is checked against \Macro\eTeXversion and \Macro\eTeXrevision and an appropriate error is raised if the available
-% \eTeX\ is too old.
-%
-% \StopEventually{}
-% \clearpage
-% \section{Implementation}
-%
-% \subsection{\texttt{ifetex.sty}}
-% \iffalse
-%<*ifetex.sty>
-% \fi
-% \begin{macrocode}
-%<!COPYRIGHT>
-\ProvidesPackage{ifetex}[%
-%<!DATE>
-%<!VERSION>
-%<*DRIVER>
- 2099/01/01 develop
-%</DRIVER>
- ifetex]
-% \end{macrocode}
-%
-% \begin{macrocode}
-\@@input ifetex
-% \end{macrocode}
-%
-%
-% \begin{macro}{\NeedsETeX}[1]{optional version number (x.y)}
-% Produces error if e-TeX is not available or if its version is too old.
-% \begin{macrocode}
-\newcommand*\NeedsETeX[1][]{%
- \ifetex
- \ifx\@nnil#1\@nnil\else
- \ifdim\the\eTeXversion\eTeXrevision\p@<#1\p@\relax
- \@latex@error{This file needs e-TeX with version #1%
- \MessageBreak but only version \the\eTeXversion\eTeXrevision is available}{%
- The current input file will not be processed
- further,\MessageBreak
- because it was written for a newer version of e-TeX.
- \MessageBreak\@ehd}%
- \endinput
- \fi\fi
- \else
- \@latex@error{This file needs e-TeX}{%
- The current input file will not be processed
- further,\MessageBreak
- because it was written for e-TeX which is not available.
- \MessageBreak\@ehd}%
- \endinput
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \iffalse
-%</ifetex.sty>
-% \fi
-%
-% \subsection{\texttt{ifetex.tex}}
-% \iffalse
-%<*ifetex.tex>
-% \fi
-% \begin{macrocode}
-%<!COPYRIGHT>
-% \end{macrocode}
-%
-% Abort if \Macro{ifetex} is already defined.
-% \begin{macrocode}
-\expandafter\ifx\csname ifetex\endcsname\relax\else
- \expandafter\endinput
-\fi
-% \end{macrocode}
-%
-% \begin{macro}{ifetex}
-% Checks if \Macro\eTeXversion is a primitive.
-% \begin{macrocode}
-\begingroup
-\edef\tempa{\meaning\eTeXversion}%
-\edef\tempb{\string\eTeXversion}%
-\ifx\tempa\tempb
- \endgroup
- \expandafter\let\csname ifetex\expandafter\endcsname\csname iftrue\endcsname
-\else
- \endgroup
- \expandafter\let\csname ifetex\expandafter\endcsname\csname iffalse\endcsname
-\fi
-% \end{macrocode}
-% \end{macro}
-% \iffalse
-%</ifetex.tex>
-% \fi
-%
-% \Finale
-\endinput
diff --git a/macros/latex/contrib/ifetex/ifetex.ins b/macros/latex/contrib/ifetex/ifetex.ins
deleted file mode 100644
index 8b3e6d5038..0000000000
--- a/macros/latex/contrib/ifetex/ifetex.ins
+++ /dev/null
@@ -1,11 +0,0 @@
-\input ydocstrip.tex
-\keepsilent
-\askforoverwritefalse
-
-\generate{%
- \file{ifetex.sty}{\nopreamble\from{ifetex.dtx}{ifetex.sty}}%
- \file{ifetex.tex}{\nopreamble\from{ifetex.dtx}{ifetex.tex}}%
-}
-\endbatchfile
-
-%% vim: ft=tex
diff --git a/macros/latex/contrib/ifetex/ifetex.pdf b/macros/latex/contrib/ifetex/ifetex.pdf
deleted file mode 100644
index 84132f6412..0000000000
--- a/macros/latex/contrib/ifetex/ifetex.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/iftex/README b/macros/latex/contrib/iftex/README
deleted file mode 100644
index 95def7f467..0000000000
--- a/macros/latex/contrib/iftex/README
+++ /dev/null
@@ -1,29 +0,0 @@
-_________________
-The iftex package
-v0.2
-
-This very simple package, for both Plain TeX and LaTeX,
-defines the \ifPDFTeX, \ifXeTeX, and \ifLuaTeX boolean
-for testing whether PDFTeX, or XeTeX, or LuaTeX is being
-used for typesetting.
-
-Also provides the \RequirePDFTeX, \RequireXeTeX, and \RequireLuaTeX
-command which throws an error if PDFTeX, XeTeX and LuaTeX (respectively)
-is not the engine in use.
-
-If you want to report any bugs or typos and corrections in the documentation,
-or ask for any new features, or suggest any improvements, or ask any questions
-about the package, then please do not send any direct emails to us; we will not
-answer any direct emails. Instead please use the issue tracker:
- <https://github.com/persian-tex/iftex/issues>
-In doing so, please always explain your issue well enough, always include
-a minimal working examples showing the issue, and always choose the appropriate
-label for your query (i.e. if you are reporting any bugs, choose `bug' label).
-
-Current version release date: 2013/04/04
-______________
-Persian TeX Group
-persian-tex@tug.org
-
-Copyright 2010–2013
-Distributed under the LaTeX Project Public License
diff --git a/macros/latex/contrib/iftex/README.md b/macros/latex/contrib/iftex/README.md
new file mode 100644
index 0000000000..ec8f5b74cc
--- /dev/null
+++ b/macros/latex/contrib/iftex/README.md
@@ -0,0 +1,65 @@
+# iftex
+
+## TeX Engine Detection
+
+This iftex package provides a suite of commands for detecting
+different TeX variants.
+
+For each supported engine, tests are provided of the form
+
+ \ifpdftex which is true if PDFTeX is in use and \RequirePDFTeX
+ which stops the run with an error message if PDFTeX is not being used.
+
+The package (which works with plain TeX as well as LaTeX) has tests
+for:
+
+eTeX, PDFTeX, XeTeX, LuaTeX, LuaHBTeX, pTeX, upTeX, pTeX-ng, VTeX, Aleph.
+
+
+In addition, an \iftutex test is true for XeTeX and LuaTeX, and
+an \ifpdf test is provided to test the PDF or DVI output mode.
+
+## Compatibility Packages
+
+In addition to the main iftex.sty package, small wrapper packages are
+provided
+
+ifetex.sty ifluatex.sty ifvtex.sty ifxetex.sty ifpdf.sty
+
+These include iftex and in some cases emulate some additional
+commands to allow these packages to replace the original packages in TeX
+distributions. It is recommended that new documents do not use these
+packages, but instead load iftex.sty directly.
+
+This package may be used on any format (it may be loaded into initex)
+it does not assume LaTeX.
+
+
+----
+
+This is a merger and simplification of several packages
+Based on a suggestion of Norbert Preining
+
+https://github.com/bidi-tex/iftex/issues/1
+
+
+ * ifetex: Martin Scharrer
+ * ifxetex: Will Robertson
+ * iftex: Persian TeX Group / Vafa Khalighi
+ * ifluatex, ifvtex: Heiko Oberdiek
+ * ifptex: Takayuki Yato
+ * ifpdf: Heiko Oberdiek and LaTeX3 Project
+
+
+The existing if(u)ptex packages do far more extensive testing to
+distinguish different variants which are not copied here.
+
+A document specifically for Japanese texts may need the finer grained
+tests of the ifptex package which has tests for particular versions
+of the pTeX (Japanese TeX) variant in use, and for the mode that is
+active.
+
+This generic package only has coarser tests for the tex variant in
+use, so is sufficient for example to distinguish upTeX from pTeX, and
+to distinguish both of those from LuaTeX.
+
diff --git a/macros/latex/contrib/iftex/ann.txt b/macros/latex/contrib/iftex/ann.txt
new file mode 100644
index 0000000000..9e153b59ab
--- /dev/null
+++ b/macros/latex/contrib/iftex/ann.txt
@@ -0,0 +1,52 @@
+** UPLOAD: iftex
+https://ctan.org/pkg/iftex
+
+New README will be uploaded, please change catalogue to say
+maintained by LaTeX Team
+Licence LPPL 1.3
+Bug Tracker: https://github.com/latex3/iftex/issues/
+Repository: https://github.com/latex3/iftex/
+
+** UPLOAD: oberdiek
+https://ctan.org/pkg/oberdiek
+This release will not distribute ifpdf.sty ifluatex.sty ifvtex.sty
+
+
+** DELETE ifxetex
+https://ctan.org/pkg/ifxetex
+Please change the catalogue to point to the iftex distribution (which will contain ifxetex.sty)
+and change maintainer and github links as for iftex above.
+
+Will Robertson is on LaTeX Team so aware of this.
+
+** DELETE ifetex
+https://ctan.org/pkg/ifetex
+Please change the catalogue to point to the iftex distribution (which will contain ifetex.sty)
+and change maintainer and github links as for iftex above.
+
+Martin Scharrer <martin.scharrer@web.de> has agreed to his version of ifetex being deleted
+
+> Hi David,
+>
+> I always hated the fact that there where so many if..tex packages and I
+> am glad that you people rationalise them now.
+>
+> Feel free to withdraw my package ifetex from CTAN.
+>
+> Best Regards,
+>
+> Martin
+
+** CATALOGUE Change ifpdf, ifluatex, ifvtex
+https://ctan.org/pkg/ifpdf
+https://ctan.org/pkg/ifluatex
+https://ctan.org/pkg/ifvtex
+Please change the catalog entries for these three so they point to iftex as above,
+not to the oberdiek bundle.
+
+
+** NO CHANGE
+Just to confirm ifptex and ifxptex packages are _not_ affected by this re-arrangement.
+
+
+
diff --git a/macros/latex/contrib/iftex/ifetex.sty b/macros/latex/contrib/iftex/ifetex.sty
new file mode 100644
index 0000000000..51027d89c5
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifetex.sty
@@ -0,0 +1,18 @@
+% Compatibility stub package for ifetex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifetex package was written by Martin Scharrer
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifetex}[2019/10/25 v1.3 ifetex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+ \newcommand*\NeedsETeX[1][]{\RequireeTeX}
+\fi
diff --git a/macros/latex/contrib/iftex/ifluatex.sty b/macros/latex/contrib/iftex/ifluatex.sty
new file mode 100644
index 0000000000..e762e8281f
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifluatex.sty
@@ -0,0 +1,17 @@
+% Compatibility stub package for ifluatex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifluatex package was written by Heiko Oberdiek
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifluatex}[2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
diff --git a/macros/latex/contrib/iftex/ifpdf.sty b/macros/latex/contrib/iftex/ifpdf.sty
new file mode 100644
index 0000000000..ec500fba25
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifpdf.sty
@@ -0,0 +1,17 @@
+% Compatibility stub package for ifpdf
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifpdf package was written by Heiko Oberdiek
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifpdf}[2019/10/25 v3.4 ifpdf legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
diff --git a/macros/latex/contrib/iftex/iftex.pdf b/macros/latex/contrib/iftex/iftex.pdf
index 483276ea7c..426b5c4622 100644
--- a/macros/latex/contrib/iftex/iftex.pdf
+++ b/macros/latex/contrib/iftex/iftex.pdf
Binary files differ
diff --git a/macros/latex/contrib/iftex/iftex.sty b/macros/latex/contrib/iftex/iftex.sty
index 7651466448..feb5a75f8d 100644
--- a/macros/latex/contrib/iftex/iftex.sty
+++ b/macros/latex/contrib/iftex/iftex.sty
@@ -1,97 +1,231 @@
+%% iftex TeX engine tests
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+%%
+%% Using ideas from:
%%
-%% This is file `iftex.sty',
-
-%%
-%% __________________________________
-%% Copyright © 2010–2013 Persian TeX Group
-%%
-%% License information appended.
-%%
-%%
-\csname iftexloaded\endcsname
-\let\iftexloaded\endinput
+%% ifetex Martin Scharrer
+%% ifxetex Will Robertson
+%% iftex 0.2 Persian TeX Group / Vafa Khalighi
+%% ifluatex ifvtex Heiko Oberdiek
+%% ifptex Takayuki YATO
+%% ifpdf Heiko Oberdiek and LaTeX3 Project
+
+
+% Only load once (not needed in LaTeX, but does no harm).
+\csname IFTEX\string @loaded\endcsname
+\expandafter\let\csname IFTEX\string @loaded\endcsname\endinput
+
+% File loadable in initex
+% require { } # with standard catcodes.
+\catcode123=1
+\catcode125=2
+\catcode35=6
+
+
+% ProvidesPackage declaration in LaTeX
+\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
- \ProvidesPackage{iftex}
- [2013/04/04 v0.2 Provides if(tex) conditional for PDFTeX, XeTeX, and LuaTeX]
-\fi
-\def\RequirePDFTeX{%
- \ifPDFTeX\else
- \begingroup
- \errorcontextlines=-1\relax
- \newlinechar=10\relax
- \errmessage{^^J
- ********************************************^^J
- * PDFTeX is required to compile this document.^^J
- * Sorry!^^J
- ********************************************}%
- \endgroup
- \fi}
-\def\RequireXeTeX{%
- \ifXeTeX\else
- \begingroup
- \errorcontextlines=-1\relax
- \newlinechar=10\relax
- \errmessage{^^J
- ********************************************^^J
- * XeTeX is required to compile this document.^^J
- * Sorry!^^J
- ********************************************}%
- \endgroup
- \fi}
-\def\RequireLuaTeX{%
- \ifLuaTeX\else
- \begingroup
- \errorcontextlines=-1\relax
- \newlinechar=10\relax
- \errmessage{^^J
- ********************************************^^J
- * LuaTeX is required to compile this document.^^J
- * Sorry!^^J
+ \ProvidesPackage{iftex}[2019/10/24 v1.0a TeX engine tests]
+\fi
+
+% Save @ catcode, to restore at end, not needed in LaTeX.
+\expandafter\chardef\csname IFTEX\string @atcatcode\endcsname\catcode64
+\catcode 64 11
+
+% Message format used in several pre-existing if*tex packages
+% Modified here to do a hard stop and not show any error context lines.
+\def\IFTEX@Require#1#2#3{%
+ #1\else
+ \newlinechar 64\relax
+ \errorcontextlines -1\relax
+ \immediate\write20{@
+ ********************************************@
+ * #2 is required to compile this document.@
+ * Sorry!@
********************************************}%
- \endgroup
- \fi}
-\expandafter\ifx\csname ifPDFTeX\endcsname\relax\else
- \expandafter\endinput
+ \batchmode\read -1 to \@tempa
+ #3%
+}
+
+
+% eTeX \protected if available.
+\ifx\protected\@undefined
+ \let\IFTEX@protected\relax
+\else
+ \let\IFTEX@protected\protected
\fi
-\expandafter\ifx\csname ifXeTeX\endcsname\relax\else
- \expandafter\endinput
+
+% make sure \detokenize and \protected are available in lualatex,
+% but avoid defining them after the package if not already defined.
+ {
+ \catcode34 12 % "
+ \catcode40 12 % (
+ \catcode41 12 % )
+ \catcode44 12 % ,
+ \catcode46 12 % .
+ \ifx\directlua\@undefined\else
+ \directlua{tex.enableprimitives("IFTEX@", {"detokenize","protected"})}
+ \fi
+ }
+
+% \Require... commands that stop if the wrong engine detected.
+\IFTEX@protected\def\RequireeTeX{\IFTEX@Require\ifetex{eTeX}\fi}
+\IFTEX@protected\def\RequirePDFTeX{\IFTEX@Require\ifpdftex{pdfTeX}\fi}
+\IFTEX@protected\def\RequireXeTeX{\IFTEX@Require\ifxetex{XeTeX}\fi}
+\IFTEX@protected\def\RequireLuaTeX{\IFTEX@Require\ifluatex{LuaTeX}\fi}
+\IFTEX@protected\def\RequireLuaHBTeX{\IFTEX@Require\ifluahbtex{LuaHBTeX}\fi}
+\IFTEX@protected\def\RequirepTeX{\IFTEX@Require\ifptex{pTeX}\fi}
+\IFTEX@protected\def\RequireupTeX{\IFTEX@Require\ifuptex{upTeX}\fi}
+\IFTEX@protected\def\RequirepTeXng{\IFTEX@Require\ifptexng{pTeX-ng}\fi}
+\IFTEX@protected\def\RequireVTeX{\IFTEX@Require\ifvtex{VTeX}\fi}
+% alephtex as aleph name too generic
+\IFTEX@protected\def\RequireAlephTeX{\IFTEX@Require\ifalephtex{Aleph}\fi}
+% tutex == has \Umathchardef == XeTeX or Lua(HB)TeX currently
+\IFTEX@protected\def\RequireTUTeX{\IFTEX@Require\iftutex{LuaTeX or XeTeX}\fi}
+
+
+% As a matter of policy over-write any existing \if*tex macro and set
+% by the tests here.
+
+% \csname and \let construct useful for hiding \ifzzz tokens from
+% outer level \if tests.
+\def\IFTEX@let#1#2{%
+ \expandafter\let\csname if#1\expandafter\endcsname
+ \csname if#2\endcsname}
+
+% etex (should always be true in latex based formats)
+\ifx\numexpr\@undefined
+ \IFTEX@let{etex}{false}
+\else
+ \IFTEX@let{etex}{true}
\fi
-\expandafter\ifx\csname ifLuaTeX\endcsname\relax\else
- \expandafter\endinput
+\IFTEX@let{eTeX}{etex}
+
+% pdftex (including in dvi mode)
+\ifx\pdftexversion\@undefined
+ \IFTEX@let{pdftex}{false}
+\else
+ \IFTEX@let{pdftex}{true}
\fi
-\newif\ifPDFTeX
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname pdfmatch\endcsname\relax
- \PDFTeXfalse
+\IFTEX@let{PDFTeX}{pdftex}
+
+% xetex
+\ifx\XeTeXrevision\@undefined
+ \IFTEX@let{xetex}{false}
\else
- \PDFTeXtrue
+ \IFTEX@let{xetex}{true}
\fi
-\newif\ifXeTeX
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname XeTeXinterchartoks\endcsname\relax
- \XeTeXfalse
+\IFTEX@let{XeTeX}{xetex}
+
+
+% luatex (including luahbtex)
+\ifx\directlua\@undefined
+ \IFTEX@let{luatex}{false}
\else
- \XeTeXtrue
+ \IFTEX@let{luatex}{true}
\fi
-\newif\ifLuaTeX
+\IFTEX@let{LuaTeX}{luatex}
+
+% luahbtex (or luatex + luaharfbuzz)
+% Use luaharfbuzz test rather than status.luatex_engine=="luahbtex"
+% for issue #2.
+\IFTEX@let{luahbtex}{false}
+\ifx\directlua\@undefined
+\else
+ \directlua{\IFTEX@detokenize{
+ if(pcall(require, 'luaharfbuzz')) then
+ tex.print("\\let\\ifluahbtex\\iftrue ")
+ end
+ }}
+
+\fi
+\IFTEX@let{LuaHBTeX}{luahbtex}
+
+
+% ptex (including all variants)
+\ifx\kanjiskip\@undefined
+ \IFTEX@let{ptex}{false}
+\else
+ \IFTEX@let{ptex}{true}
+\fi
+\IFTEX@let{pTeX}{ptex}
+
+% uptex (including euptex)
+\ifx\enablecjktoken \@undefined
+ \IFTEX@let{uptex}{false}
+\else
+ \IFTEX@let{uptex}{true}
+\fi
+\IFTEX@let{upTeX}{uptex}
+
+% ptex-ng
+\ifx\ngbanner\@undefined
+ \IFTEX@let{ptexng}{false}
+\else
+ \IFTEX@let{ptexng}{true}
+\fi
+\IFTEX@let{pTeXng}{ptexng}
+
+% vtex
+\ifx\VTeXversion\@undefined
+ \IFTEX@let{vtex}{false}
+\else
+ \IFTEX@let{vtex}{true}
+\fi
+\IFTEX@let{VTeX}{vtex}
+
+% aleph
+\IFTEX@let{alephtex}{false}
+\ifptex\else
+\ifx\omathchardef\@undefined
+\else
+ \IFTEX@let{alephtex}{true}
+\fi
+\fi
+\IFTEX@let{AlephTeX}{alephtex}
+
+
+% tutex (LuaTeX or XeTeX)
+\ifx\Umathchardef\@undefined
+ \IFTEX@let{tutex}{false}
+\else
+ \IFTEX@let{tutex}{true}
+\fi
+\IFTEX@let{TUTeX}{tutex}
+
+
+
+% Output mode
+% declare with as if with \newif
+\def\pdftrue{\let\ifpdf\iftrue}
+\def\pdffalse{\let\ifpdf\iffalse}
+\pdffalse
+\ifx\directlua\undefined
\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname directlua\endcsname\relax
- \LuaTeXfalse
+\expandafter\ifx\csname pdfoutput\endcsname\relax
+\ifvtex
+ \ifnum\OpMode=3 %
+ \pdftrue
+ \fi
+\fi
\else
- \LuaTeXtrue
-\fi
-%%
-%% Copyright © 2010–2013 by Persian TeX Group <persian-tex@tug.org>
-%%
-%% Distributable under the LaTeX Project Public License,
-%% version 1.3c or higher (your choice). The latest version of
-%% this license is at: http://www.latex-project.org/lppl.txt
-%%
-%% This work is "maintained" (as per LPPL maintenance status)
-%% by Persian TeX Group.
-%%
-%%
-%%
-%%
-%%
-%% End of file `iftex.sty'.
+ \ifnum\pdfoutput>0 %
+ \pdftrue
+ \fi
+\fi
+\else
+\directlua{\IFTEX@detokenize{
+if (tex.outputmode or tex.pdfoutput or 0) > 0 then
+ tex.print('\\pdftrue')
+end
+}}
+\fi
+
+% restore things
+\catcode64 \IFTEX@atcatcode
diff --git a/macros/latex/contrib/iftex/iftex.tex b/macros/latex/contrib/iftex/iftex.tex
index a247e22b5b..67703b93c5 100644
--- a/macros/latex/contrib/iftex/iftex.tex
+++ b/macros/latex/contrib/iftex/iftex.tex
@@ -1,80 +1,184 @@
-\documentclass{artikel3}
-\usepackage{calc}
-\usepackage{pifont}
-\usepackage{bbding}
-\usepackage[colorlinks=true,linkcolor=mybrown,urlcolor=mygreen]{hyperref}
-\usepackage{bidicode}
-\newcounter{local}
-\renewcommand\theenumi{\protect\setcounter{local}%
- {201+\the\value{enumi}}\protect\ding{\value{local}}}
-\renewcommand\labelenumi{\theenumi}
-\renewcommand\labelitemi{\HandRight}
-\renewcommand\labelitemii{\HandRightUp}
-\renewcommand\labelitemiii{\HandCuffRight}
-\renewcommand\labelitemiv{\HandPencilLeft}
-\definecolor{mybrown}{rgb}{.6,0,0}
-\definecolor{mygreen}{rgb}{0,.43,0}
-\definecolor{Orange}{rgb}{1,.4,.2}
-\newcommand\PDFTeX{PDF\TeX}
-\newcommand\XeTeX{Xe\TeX}
-\newcommand\LuaTeX{Lua\TeX}
-\title{The \textsf{iftex} Package\\ \href{https://github.com/persian-tex/iftex}{\texttt{https://github.com/persian-tex/iftex}}}
-\author{Persian TeX Group\\ \href{mailto:persian-tex@tug.org}{\texttt{persian-tex@tug.org}}}
-\date{Version 0.2}
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage{hyperref}
+\hypersetup{colorlinks}
+\usepackage{iftex}
+
+\title{The iftex package}
+\author{The \LaTeX\ Project Team\thanks{%
+\url{https://github.com/latex3/iftex}}}
+
+\date{\csname ver@iftex.sty\endcsname}
+
+\newcommand\cs[1]{{\ttfamily\textbackslash #1}}
+\renewcommand*\descriptionlabel[1]{\makebox[\dimexpr\textwidth][l]{%
+ \normalfont\bfseries #1}}
+
\begin{document}
+
\maketitle
\tableofcontents
+
+
\section{Introduction}
-This package provides a way to check if a document is being processed with \PDFTeX, or \XeTeX, or \LuaTeX.
-\section{Loading The Package}
-The package can be loaded in the usual way both in Plain \TeX\ and \LaTeX.
-\subsection{Loading The Package in Plain \TeX}
-\begin{BDef}
-\Lcs{input}\quad \Larg{iftex.sty}
-\end{BDef}
-\subsection{Loading The Package in \LaTeX}
-\begin{BDef}
-\Lcs{usepackage}\Largb{iftex}
-\end{BDef}
-\section{Defined Conditionals}
-\subsection{For \PDFTeX}
-\begin{BDef}
-\Lcs{ifPDFTeX}\\
-\qquad\Larga{material for \PDFTeX}\\
-\Lcs{else}\\
-\qquad\Larga{material not for \PDFTeX}\\
-\Lcs{fi}
-\end{BDef}
-\subsection{For \XeTeX}
-\begin{BDef}
-\Lcs{ifXeTeX}\\
-\qquad\Larga{material for \XeTeX}\\
-\Lcs{else}\\
-\qquad\Larga{material not for \XeTeX}\\
-\Lcs{fi}
-\end{BDef}
-\subsection{For \LuaTeX}
-\begin{BDef}
-\Lcs{ifLuaTeX}\\
-\qquad\Larga{material for \LuaTeX}\\
-\Lcs{else}\\
-\qquad\Larga{material not for \LuaTeX}\\
-\Lcs{fi}
-\end{BDef}
-\section{Defined Commands}
-\subsection{For \PDFTeX}
-\begin{BDef}
-\Lcs{RequirePDFTeX}
-\end{BDef}
-This command tests for \PDFTeX\ use and throws an error if a different engine is being used.
-\subsection{For \XeTeX}
-\begin{BDef}
-\Lcs{RequireXeTeX}
-\end{BDef}
-This command tests for \XeTeX\ use and throws an error if a different engine is being used.
-\subsection{For \LuaTeX}
-\begin{BDef}
-\Lcs{RequireLuaTeX}
-\end{BDef}
-This command tests for \LuaTeX\ use and throws an error if a different engine is being used.
-\end{document} \ No newline at end of file
+This original \textsf{iftex} was written as part of the \textsf{bidi}
+collection (by the Persian TeX Group / Vafa Khalighi)
+and provided checks for whether a document was being
+processed with PDF\TeX, or Xe\TeX, or Lua\TeX. This version recodes
+the package and incorporates similar tests from the \textsf{ifetex}
+package by Martin Scharrer, the \textsf{ifxetex} package by Will
+Robertson, the \textsf{ifluatex} and \textsf{ifvtex}
+packages from Heiko Oberdiek and parts of \textsf{ifptex} by Takayuki
+Yato.
+
+For each \TeX\ variant engine supported two commands are provided:
+\begin{itemize}
+\item
+ a conditional, \verb|\iffootex| that is true if the \textsf(footex)
+engine (or a compatible extension) is being used.
+
+For compatibility with earlier packages which did not all use the same
+naming convention all these conditionals are provided in two forms, a
+lowercase name \verb|\iffootex| and a mixed case name \verb|\ifooTeX|.
+
+\item a command \verb|RequireFooTeX| which checks that \textsf{footex}
+ is being used, and stops the run with an error message if a
+ different engine is detected.
+\end{itemize}
+
+\section{Loading the package}
+The package can be loaded in the usual way in both Plain \TeX\ and \LaTeX.
+\subsection{Loading the package in plain \TeX}
+\begin{verbatim}
+\input iftex.sty
+\end{verbatim}
+
+\subsection{Loading the package in \LaTeX}
+\begin{verbatim}
+\usepackage{iftex}
+\end{verbatim}
+
+\subsection{Loading the package in ini\TeX}
+The package assumes no existing macros and may be loaded
+during format setup in a format without the plain \TeX\ or \LaTeX\
+format being loaded. From an initial ini\TeX\ setup the package may
+be loaded as for plain \TeX.
+
+\section{Engine test conditionals}
+All the conditionals defined here are used in the same way:
+\begin{verbatim}
+\ifluatex
+ luatex specific code
+\else
+ code for other engines
+\fi
+\end{verbatim}
+
+
+
+\begin{description}
+\item[\cs{ifetex}, \cs{ifeTeX}]
+True if an e\TeX\ enabled format is in use. (This is necessarily true
+in all \LaTeX\ variants.)
+\item[\cs{ifpdftex}, \cs{ifPDFTeX}]
+True if PDF\TeX\ is in use (whether writing PDF or DVI), so this is
+true for documents processed with both the \textsf{latex} and
+\textsf{pdflatex} commands.
+\item[\cs{ifxetex}, \cs{ifXeTeX}]
+True if Xe\TeX\ is in use.
+\item[\cs{ifluatex}, \cs{ifLuaTeX}]
+True if Lua\TeX\ and extensions such as LuaHB\TeX\ are in use.
+\item[\cs{ifluahbtex}, \cs{ifLuaHBTeX}]
+True if the \textsf{luaharftex} Lua module is available.
+This will be true in \textsf{luahbtex} and may be true in
+\textsf{luatex} if a binary Lua \textsf{luaharftex} module has been
+compiled and is available in Lua's search path.
+\item[\cs{ifptex}, \cs{ifpTeX}]
+True if any of the p\TeX\ variants are in use.
+\item[\cs{ifuptex}, \cs{ifupTeX}]
+True if any of the up\TeX\ variants are in use. (\verb|\ifetex| could
+be used in addition to distinguish \textsf{uptex} and \textsf{euptex}.)
+\item[\cs{ifptexng}, \cs{ifpTeXng}]
+True if p\TeX-ng (Asiatic p\TeX) is in use.
+\item[\cs{ifvtex}, \cs{ifVTeX}]
+True if V\TeX\ is in use.
+\item[\cs{ifalephtex}, \cs{ifAlephTeX}]
+True if Aleph is in use. (The \textsf{aleph}-based \LaTeX\ command is
+\textsf{lamed}.)
+\item[\cs{iftutex}, \cs{ifTUTeX}]
+This is not strictly an engine variant, but it is true if
+\verb|\Umathchardef| is available, which essentially means that it is
+true for Lua\TeX\ and Xe\TeX, allowing constructs such as
+\begin{verbatim}
+\iftutex
+ \usepackage{fontspec}
+ \setmainfont{TeX Gyre Termes}
+ \usepackage{unicode-math}
+ \setmathfont{Stix Two Math}
+\else
+ \usepackage{newtxtext,newtxmath}
+\fi
+\end{verbatim}
+
+\end{description}
+
+\section{Requiring specific engines}
+For each supported engine, the package provides a command
+\verb|\Require...| which checks that the document is being processed
+with a suitable engine, and stops with an error message if not.
+
+\begin{description}
+\item[\cs{RequireeTeX}]
+\item[\cs{RequirePDFTeX}]
+\item[\cs{RequireXeTeX}]
+\item[\cs{RequireLuaTeX}]
+\item[\cs{RequireLuaHBTeX}]
+\item[\cs{RequirepTeX}]
+\item[\cs{RequireupTeX}]
+\item[\cs{RequirepTeXng}]
+\item[\cs{RequireVTeX}]
+\item[\cs{RequireAlephTeX}]
+\item[\cs{RequireTUTeX}]
+\end{description}
+
+
+\section{Output mode conditional}
+This package also provides an \verb|\ifpdf| conditional that is true
+if the format is set up to output in PDF mode rather than DVI. This is
+equivalent to the test in the existing \textsf{ifpdf} package.
+
+Unlike the engine tests above this is defined as if by \verb|\newif|
+with user-documented commands \verb|\pdftrue| and \verb|\pdffalse| that can
+change the boolean value. These would be needed to reset the boolean
+if the output mode is reset (for example by setting
+\verb|\pdfoutput=0| in PDF\LaTeX).
+
+Unlike the original \textsf{ifpdf} package, the version here also
+detects PDF output mode if running in V\TeX.
+
+\section{Additional packages}
+This extended \textsf{iftex} is designed to replace the original
+\textsf{iftex} and also the packages
+\textsf{ifetex},
+\textsf{ifluatex},
+\textsf{ifvtex},
+\textsf{ifxetex},
+\textsf{ifpdf}.
+
+This collection includes small packages with these names that include
+the main \textsf{iftex} package, and in some cases define additional
+commands for increased compatibility. These packages should mean that
+authors do not need to change existing documents, although it is
+recommended that new documents use the \textsf{iftex} package
+directly.
+
+
+Note that while this package provides basic support for detecting
+p\TeX\ (Japanese \TeX) variants and is broadly compatible with the
+\textsf{ifptex} package, the \textsf{ifptex} package has many more detailed
+tests for p\TeX\ variants and this package does \emph{not} replace the
+\textsf{ifptex} (or \textsf{ifxptex}) packages, which are maintained
+by their original authors and recommended for Japanese documents that
+need fine control over the Japanese \TeX\ system in use.
+
+\end{document}
diff --git a/macros/latex/contrib/iftex/ifvtex.sty b/macros/latex/contrib/iftex/ifvtex.sty
new file mode 100644
index 0000000000..109cf1cc09
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifvtex.sty
@@ -0,0 +1,45 @@
+% Compatibility stub package for ifvtex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifvtex package was written by Heiko Oberdiek
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifvtex}[2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
+
+
+\IFTEX@let{vtexdvi}{false}
+\IFTEX@let{vtexpdf}{false}
+\IFTEX@let{vtexps}{false}
+\IFTEX@let{vtexhtml}{false}
+\IFTEX@let{vtexgex}{false}
+
+\ifvtex
+ \ifcase\OpMode\relax
+ \IFTEX@let{vtexdvi}{true}
+ \or % 1
+ \IFTEX@let{vtexpdf}{true}
+ \or % 2
+ \IFTEX@let{vtexps}{true}
+ \or % 3
+ \IFTEX@let{vtexps}{true}
+ \or\or\or\or\or\or\or % 10
+ \IFTEX@let{vtexhtml}{true}
+ \fi
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname gexmode\endcsname\relax
+ \else
+ \ifnum\gexmode>0 %
+ \IFTEX@let{vtexgex}{true}
+ \fi
+ \fi
+\fi
diff --git a/macros/latex/contrib/iftex/ifxetex.sty b/macros/latex/contrib/iftex/ifxetex.sty
new file mode 100644
index 0000000000..8261ec2671
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifxetex.sty
@@ -0,0 +1,17 @@
+% Compatibility stub package for ifxetex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifxetex package was written by Will Robertson
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifxetex}[2019/10/25 v0.7 ifxetex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
diff --git a/macros/latex/contrib/latino-sine-flexione/README.md b/macros/latex/contrib/latino-sine-flexione/README.md
new file mode 100644
index 0000000000..81d6a83336
--- /dev/null
+++ b/macros/latex/contrib/latino-sine-flexione/README.md
@@ -0,0 +1,35 @@
+# `latino-sine-flexione`
+
+*package by Victor LEVE granted into public domain*
+
+## Latin without inflexions
+
+Latino sine Flexione (or Interlingua) is a language constructed by Giuseppe Peano at the
+beginning of the last century. This simplified Latin is designed to be a instrument for
+international cooperation, firstly in the academic sphere.
+
+*Note:* Another Interlingua was created a few decades after Peano's work, the one related
+to the `babel-interlingua' package.
+
+## Package content
+
+This package provides the necessary translations to use the language within a LaTeX
+document. It also imports `fontenc` in order to be able to use ligatures and quotation
+marks.
+
+Finally, it offers a text in Interlingua that can be used as fake text: Fundamento de
+intelligentia. This article by H. Bijlsma was first published in *Schola et Vita* Anno I
+(1926).
+
+## Basic use
+
+```latex
+\documentclass{article}
+\usepackage{latino-sine-flexione}
+
+\begin{document}
+ \section{Verbos}
+ Verbo <<ama>> de pr\ae{}fatione es mirabile.
+ \input{fundamento}
+\end{document}
+```
diff --git a/macros/latex/contrib/latino-sine-flexione/fundamento.tex b/macros/latex/contrib/latino-sine-flexione/fundamento.tex
new file mode 100644
index 0000000000..8617d8d0a0
--- /dev/null
+++ b/macros/latex/contrib/latino-sine-flexione/fundamento.tex
@@ -0,0 +1,135 @@
+Omne qui habe probato ad exprime sentimentos plus profundo et plus delicato jam perveni
+consciente aut inconsciente ad dilemma sequente.
+
+Aut decide se pro illo tanto simplice, quod id pote es expresso logico-harmonico; aut
+considera coh\ae{}rentia logico de lingua es inferiore et si necessario immola ad
+harmonia plus alto de illo plus reale. In ultimo causa lingua es uso in toto altero modo.
+
+Hic me dona imagine pro illustratione. Reproductione maximo completo de homocorpore
+vivente es automato. Isto corresponde in forma, colore et etiam in motione ad originale.
+
+Theorico isto es reproductione maximo bono. Sed automato composito maximo artificiale,
+maximo ingenioso, maximo complicato et maximo functionante non pote repr\ae{}senta plus
+multo quam illo toto simplice.
+
+Contrario, ad spectatore sensitivo et experimentato aliquo lineas nigro super papyro
+candido pote produc plus solido et plus justo effectu de vita. Tamen ignorante pr\ae{}fer
+automato, nam isto respira et rota cum oculos \ae{}quale ad homo vivente. Secundum suo
+obscrvatione rude isto es coh\ae{}rentia de realitate et pro isto corresponde maximo bono
+per coh\ae{}rentia de reproductione. Isto es logico pro illo, contrario creta-lineas
+nigro non possido sensu et es illogico.
+
+Isto imagine es utile, si id es relicto ad tempore. Nos non es habituato ad automatos
+pulcro et desiderato. Sed productione de lingua-structura logico-harmonico que
+corresponde ad negotios simplice et generale, in que nos debe intercomprehende, habe
+importantia grande.
+
+Discursu ideale es illo mathematico. Move ex axiomas. Introduc solo terminos de valore
+determinato et invariabile. Veni inductivo de illo simplice ad illo complicato. Progredi
+synthetico, non plus rapido quam affirmatione completo de antecedente tolera. Sed solo in
+causas abstracto tale discursu es rigoroso possibile. Introductione de termino concreto
+fac que exactitudine fi simulante.
+
+Termino <<substantia>>, termino <<es>>, <<natura>>, <<comprehende>> non es, et si
+abstracto, tam exacto quam terminos <<tres>>, <<simile>>, <<dissimile>>, <<parallelo>>,
+<<congruente>>. Tamen illos es plus abstracto, minus concreto et tunc minus reale pro
+nostro intellectu quam terminos <<homo>>, <<\ae{}re>>, <<dolore>>, etc. Tunc gradu de
+abstractione exsiste. Exemplo de gradu superiore es <<tres>>; de gradu inferiore es
+<<dolore>> et solo dolore determinato de persona determinato in istante determinato;
+inter isto gradu es: <<realitate>>. Discursu es plus exacto et suo effectu es plus certo,
+secundum que suo terminos es minus concreto.
+
+Illo concreto simula plus reale quam illo abstraoto. Nos concipe que <<libro>> es
+exsistente, <<numero>> non. Etiam hic es gradatione. Objcctos materiale simula maximo
+reale. Consideratione simplice et analysi de isto conceptione duc nos ad adopta non
+objecto sed suo impressione sensuale, psyche-impressione, quam maximo reale. <<Lumine>>
+quam impressione es primo realitate, maximo certo, – <<sol>> es conceptione facto ex
+observationes.
+
+Et si nos voca numeros quam objecto, nos cognosce que id non exsiste, si non quam idea.
+<<Tres>> es nullo, non pote es <<tres>>, sed pote es tres objecto. Tunc toto mathematica
+non applicato es irreale, contra reale. Id es modo de realitate repr\ae{}sentato aut
+figurato in nostro cogitatione ab symbolos. Id es systema de relationes in multitudine
+(numeros) aut in prolixitate, sed vacuo et impossibile, sine continentia de realitates.
+Isto realitates debe es sentimento, nam nos non cognosce altero. In idea de mathematica
+nos substitue continentia de unitate (in numero) ficto aut de linea et figura. In
+mechanica continentia es <<fortia>>. Nos intellige que isto nonexistente, illo forma, es
+minimo fallace, es maximo justo in suo coh\ae{}rentia.
+
+Et in omne es gradatione. Es limite inter concreto, plus reale, sed minus exacto in
+coh\ae{}rentia, et abstracto, irreale, sed exacto et stabile in coh\ae{}rentia.
+
+Nos non vide limite pr\ae{}ciso et separatione pr\ae{}ciso.
+
+Simula que concreto junge se evolutivo ad abstracto. Tamen consideratione pr\ae{}ciso
+permitte ad nos admitte quo existe puncto ubi abstracto puro obtine continentia concreto.
+Omne relatione ipso pote es deducto uno ex alio, initiante ab axioma, absoluto certo, –
+sed continentia de relatione in nullo tempore pote es deducto ex relatione. Continentia
+de relatione es observatione aut sentimento et pro isto non pote es deducto altero modo.
+
+Concreto et abstracto es tunc simile duo fluvio, que non conflue, sed es parallelo in
+coh\ae{}rentia perpetuo.
+
+Et coh\ae{}rentia in tale modo que relationes fi plus complicato secundum suo continentia
+fi plus concreto. Mathematica de mathematica es maximo simplice, mathematica de maximo
+concreto, de emotiones, es infinito complicato.
+
+Ad isto conditione de res, tam que nos senti id in nos ipso per reflexione, lingua
+corresponde per suo reproductione et suo expressione. Lingua curre parallelo ad
+situatione de psyche in suo gradus de concreto ad abstracto et illo conveniente.
+
+Et tale modo que illo maximo abstracto es repr\ae{}sentato per vocabulos maximo
+symbolico.
+
+Quanto res, que nos debe exprime, es plus concreto, tanto plus lingua es sentimento et
+sono, non symbolico, imitativo et figurativo.
+
+Homo pote cogita que isto non apto coh\ae{}re pro nomine de objecto. Non objecto es re
+maximo concreto, sed emotione. Et isto es expresso maximo bono per lingua minimo
+symbolico, per sono-expressione directo, simplice, per lingua figurativo (p\oe{}si).
+
+Exclamatione quale <<o>>, <<heu>> – vocabulo quale <<gaudio>>, <<triste>> es minimo
+symbolico et significa re maximo concreto. Vocabulo de mathematica es symbolo puro.
+
+Discursu es plus exacto et suo effectu es plus certo secundum que suo termine es minus
+concreto. Tunc lingua-structura es minus fallibile secundum que id repr\ae{}senta notione
+plus abstracto. Aut etiam, quanto plus puro symbolico, tanto plus certo lingua es. Lingua
+absoluto symbolico, mathematica, es infallibile.
+
+Et \ae{}quale quanto plus lingua muta de symbolico ad non-symbolico (imitativo,
+figurativo) aut expressivo directo, repr\ae{}sentante notione plus abstracto, tanto plus
+complicato suo relatione fi. Symbolica et repr\ae{}sentatione in lingua corresponde ad
+differentia essentiale, sine limite visibile pr\ae{}ciso inter abstracto et concreto.
+
+Hic etiam duo fluvio es, de quc limite non pote es percepto pr\ae{}ciso, sed que in nullo
+tempore pote conflue. Mathematica es symbolico puro, p\oe{}si es figurativo quasi puro,
+philosophia es semi-symbolico, semi-figurativo.
+
+Noscente que repr\ae{}sentatione symbolico de re solo tolera positivitate et
+coh\ae{}rentia perfecto: logica, homo habe probato exprime existente per lingua
+symbolico. Tamen isto probationes es omne tempore vano, \ae{}quale quam deduc concreto ex
+abstracto.
+
+Illo duo fluvio curre parallelo, tam in re quam in suo reproductione per lingua. Ergo
+lingua es uso in duo modo, que differ essentiale:
+\begin{enumerate}
+ \item in modo symbolico, repr\ae{}sentante relatione et notione abstracto.
+ \item in modo figurativo, repr\ae{}sentante continentia de relatione, re concreto.
+\end{enumerate}
+
+Omne de isto modo de lingua-usu es independente. Nullo tempore illos pote substitue
+reciproco, ce que homo pote exprime per versu illo non pote exprime per discursu, et
+viceversa.
+
+Solo in lingua puro symbolico logica, absoluto es et. poxsibile et necessario. Secundum
+que lingua fi plus figurativo, id repr\ae{}senta re plus concreto, possibilitate et
+necessitate de relatione exacto logico cessa.
+
+Etiam re eoncreto es inter se subordinato ad \ae{}quale relatione quam illo abstracto,
+sed in eomplicatione infinito. Lingua figurativo non exprime isto relatione. Isto non es
+suo potentia nec es in suo intentione. Id vol dona solo repr\ae{}sentatione exacto de
+illo concreto, de emotione aut de situatione de psyche, que es perceptibile. Ergo suo
+postulato non es logica, sed harmonia pr\ae{}ciso cum situatione psychico.
+
+Solo mathematica es symbolico puro. Tamen in scientia maximo exacto, in philosophia
+maximo abstr\ae{}to lingua es uso occasionale figurativo. \ No newline at end of file
diff --git a/macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty b/macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty
new file mode 100644
index 0000000000..ae136175ce
--- /dev/null
+++ b/macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty
@@ -0,0 +1,33 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{latino-sine-flexione}[2019/10/29 v1.1]
+% package by Victor LEVE granted into public domain
+
+\RequirePackage[T1]{fontenc} % \ae ligature and << >> quotes
+\language=\l@latin % Latin hyphenation patterns
+
+% Names
+\def\abstractname{Breviario}
+\def\alsoname{vide etiam}
+\def\appendixname{Appendice}
+\def\bibname{Bibliographia}
+\def\chaptername{Capitulo}
+\def\contentsname{Indice}
+\def\datename{Tempore}
+\def\figurename{Summaria}
+\def\glossaryname{Glossario}
+\def\indexname{Caudece}
+\def\listfigurename{Lista de figura}
+\def\listtablename{Lista de tabula}
+\def\pagename{pagina}
+\def\partname{Parte}
+\def\prefacename{Pr\ae{}fatione}
+\def\proofname{Probatione}
+\def\refname{Loco}
+\def\seename{vide}
+\def\tablename{Tabula}
+
+% Date format
+\RequirePackage{datetime}
+\newcommand{\Rom@n}[1]{\uppercase\expandafter{\romannumeral #1\relax}}
+\newdateformat{ildate}{\THEDAY.\Rom@n\THEMONTH.\THEYEAR}
+\ildate
diff --git a/macros/latex/contrib/oberdiek/README.txt b/macros/latex/contrib/oberdiek/README.txt
index 81b0691b92..fc9ebb7dc6 100644
--- a/macros/latex/contrib/oberdiek/README.txt
+++ b/macros/latex/contrib/oberdiek/README.txt
@@ -1,4 +1,4 @@
-README 2019/07/27
+README 2019/10/27
This file describes the directory
CTAN:macros/latex/contrib/oberdiek/
diff --git a/macros/latex/contrib/oberdiek/accsupp.pdf b/macros/latex/contrib/oberdiek/accsupp.pdf
index ba0bff6bed..2fafe93ebf 100644
--- a/macros/latex/contrib/oberdiek/accsupp.pdf
+++ b/macros/latex/contrib/oberdiek/accsupp.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/aliascnt.pdf b/macros/latex/contrib/oberdiek/aliascnt.pdf
index 58baffc06a..ea53cbd9c8 100644
--- a/macros/latex/contrib/oberdiek/aliascnt.pdf
+++ b/macros/latex/contrib/oberdiek/aliascnt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/alphalph.pdf b/macros/latex/contrib/oberdiek/alphalph.pdf
index 5536dddd92..f3c64f10c7 100644
--- a/macros/latex/contrib/oberdiek/alphalph.pdf
+++ b/macros/latex/contrib/oberdiek/alphalph.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/askinclude.pdf b/macros/latex/contrib/oberdiek/askinclude.pdf
index 1b4737443e..76406bc1ca 100644
--- a/macros/latex/contrib/oberdiek/askinclude.pdf
+++ b/macros/latex/contrib/oberdiek/askinclude.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/atbegshi.pdf b/macros/latex/contrib/oberdiek/atbegshi.pdf
index 24387f0a05..6d540a13a2 100644
--- a/macros/latex/contrib/oberdiek/atbegshi.pdf
+++ b/macros/latex/contrib/oberdiek/atbegshi.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/atenddvi.pdf b/macros/latex/contrib/oberdiek/atenddvi.pdf
index 9153ed314c..a64cd2b05f 100644
--- a/macros/latex/contrib/oberdiek/atenddvi.pdf
+++ b/macros/latex/contrib/oberdiek/atenddvi.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/attachfile2.pdf b/macros/latex/contrib/oberdiek/attachfile2.pdf
index 78b77f1bb3..9f66589eca 100644
--- a/macros/latex/contrib/oberdiek/attachfile2.pdf
+++ b/macros/latex/contrib/oberdiek/attachfile2.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/atveryend.pdf b/macros/latex/contrib/oberdiek/atveryend.pdf
index a9030f1cff..935a5f8b33 100644
--- a/macros/latex/contrib/oberdiek/atveryend.pdf
+++ b/macros/latex/contrib/oberdiek/atveryend.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/auxhook.pdf b/macros/latex/contrib/oberdiek/auxhook.pdf
index ba21ee3dda..131e1215f7 100644
--- a/macros/latex/contrib/oberdiek/auxhook.pdf
+++ b/macros/latex/contrib/oberdiek/auxhook.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/bigintcalc.pdf b/macros/latex/contrib/oberdiek/bigintcalc.pdf
index a8ac42cd9a..03aa51d29c 100644
--- a/macros/latex/contrib/oberdiek/bigintcalc.pdf
+++ b/macros/latex/contrib/oberdiek/bigintcalc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/bitset.pdf b/macros/latex/contrib/oberdiek/bitset.pdf
index 012ce76213..f3e94411b2 100644
--- a/macros/latex/contrib/oberdiek/bitset.pdf
+++ b/macros/latex/contrib/oberdiek/bitset.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/bmpsize.pdf b/macros/latex/contrib/oberdiek/bmpsize.pdf
index 7f421cece5..fdb74481a6 100644
--- a/macros/latex/contrib/oberdiek/bmpsize.pdf
+++ b/macros/latex/contrib/oberdiek/bmpsize.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/bookmark.pdf b/macros/latex/contrib/oberdiek/bookmark.pdf
index 96582a6439..c5b7daab81 100644
--- a/macros/latex/contrib/oberdiek/bookmark.pdf
+++ b/macros/latex/contrib/oberdiek/bookmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/catchfile.pdf b/macros/latex/contrib/oberdiek/catchfile.pdf
index 0c3aa86546..918c6ef441 100644
--- a/macros/latex/contrib/oberdiek/catchfile.pdf
+++ b/macros/latex/contrib/oberdiek/catchfile.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/centernot.pdf b/macros/latex/contrib/oberdiek/centernot.pdf
index 41893f970b..a5ad10540c 100644
--- a/macros/latex/contrib/oberdiek/centernot.pdf
+++ b/macros/latex/contrib/oberdiek/centernot.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/chemarr.pdf b/macros/latex/contrib/oberdiek/chemarr.pdf
index c944655ad0..14e733fca1 100644
--- a/macros/latex/contrib/oberdiek/chemarr.pdf
+++ b/macros/latex/contrib/oberdiek/chemarr.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/classlist.pdf b/macros/latex/contrib/oberdiek/classlist.pdf
index 5c83122d6b..e4b806aa3b 100644
--- a/macros/latex/contrib/oberdiek/classlist.pdf
+++ b/macros/latex/contrib/oberdiek/classlist.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/colonequals.pdf b/macros/latex/contrib/oberdiek/colonequals.pdf
index aae0491822..bc772a3d3a 100644
--- a/macros/latex/contrib/oberdiek/colonequals.pdf
+++ b/macros/latex/contrib/oberdiek/colonequals.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/dvipscol.pdf b/macros/latex/contrib/oberdiek/dvipscol.pdf
index 0935c2dfdb..4e9e3bbeee 100644
--- a/macros/latex/contrib/oberdiek/dvipscol.pdf
+++ b/macros/latex/contrib/oberdiek/dvipscol.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/embedfile.pdf b/macros/latex/contrib/oberdiek/embedfile.pdf
index 1f3ecc552a..8b8419ef95 100644
--- a/macros/latex/contrib/oberdiek/embedfile.pdf
+++ b/macros/latex/contrib/oberdiek/embedfile.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/engord.pdf b/macros/latex/contrib/oberdiek/engord.pdf
index 25ed642363..1d576e13ca 100644
--- a/macros/latex/contrib/oberdiek/engord.pdf
+++ b/macros/latex/contrib/oberdiek/engord.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/enparen.pdf b/macros/latex/contrib/oberdiek/enparen.pdf
index 0431e37295..55f3a00c5b 100644
--- a/macros/latex/contrib/oberdiek/enparen.pdf
+++ b/macros/latex/contrib/oberdiek/enparen.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/eolgrab.pdf b/macros/latex/contrib/oberdiek/eolgrab.pdf
index b4c96bfadd..804354b817 100644
--- a/macros/latex/contrib/oberdiek/eolgrab.pdf
+++ b/macros/latex/contrib/oberdiek/eolgrab.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/epstopdf.pdf b/macros/latex/contrib/oberdiek/epstopdf.pdf
index c212cc0f3c..f143c75bcb 100644
--- a/macros/latex/contrib/oberdiek/epstopdf.pdf
+++ b/macros/latex/contrib/oberdiek/epstopdf.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/etexcmds.pdf b/macros/latex/contrib/oberdiek/etexcmds.pdf
index c07b06c3b6..e8f135358a 100644
--- a/macros/latex/contrib/oberdiek/etexcmds.pdf
+++ b/macros/latex/contrib/oberdiek/etexcmds.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/fibnum.pdf b/macros/latex/contrib/oberdiek/fibnum.pdf
index a18cb065c1..9fa3dd48ce 100644
--- a/macros/latex/contrib/oberdiek/fibnum.pdf
+++ b/macros/latex/contrib/oberdiek/fibnum.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/flags.pdf b/macros/latex/contrib/oberdiek/flags.pdf
index c62e48402e..9a761de095 100644
--- a/macros/latex/contrib/oberdiek/flags.pdf
+++ b/macros/latex/contrib/oberdiek/flags.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/gettitlestring.pdf b/macros/latex/contrib/oberdiek/gettitlestring.pdf
index 12386486dc..21a9095c06 100644
--- a/macros/latex/contrib/oberdiek/gettitlestring.pdf
+++ b/macros/latex/contrib/oberdiek/gettitlestring.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/grfext.pdf b/macros/latex/contrib/oberdiek/grfext.pdf
index 206ebfdd53..18ba2c1d43 100644
--- a/macros/latex/contrib/oberdiek/grfext.pdf
+++ b/macros/latex/contrib/oberdiek/grfext.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/grffile.pdf b/macros/latex/contrib/oberdiek/grffile.pdf
index e2b71da6e6..e452b48cb1 100644
--- a/macros/latex/contrib/oberdiek/grffile.pdf
+++ b/macros/latex/contrib/oberdiek/grffile.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hobsub-generic.sty b/macros/latex/contrib/oberdiek/hobsub-generic.sty
new file mode 100644
index 0000000000..1d7fe1745d
--- /dev/null
+++ b/macros/latex/contrib/oberdiek/hobsub-generic.sty
@@ -0,0 +1,12 @@
+\ifx\ProvidesPackage\undefined\else
+\ProvidesPackage{hobsub-generic}[2019/10/27]
+\fi
+\wlog{hobsub not currently supported, see hobsub.dtx to extract original code}
+\RequirePackage{infwarerr}[2007/09/09]%
+\RequirePackage{iftex}[2010/03/01]%
+\RequirePackage{etexcmds}[2010/01/28]%
+\RequirePackage{ltxcmds}[2010/03/01]%
+%\RequirePackage{luatex-loader}[2009/04/10]%
+\RequirePackage{pdftexcmds}[2007/11/11]%
+\RequirePackage{intcalc}[2007/09/27]%
+\RequirePackage{bigintcalc}[2007/09/27]%
diff --git a/macros/latex/contrib/oberdiek/hobsub-hyperref.sty b/macros/latex/contrib/oberdiek/hobsub-hyperref.sty
new file mode 100644
index 0000000000..7c9f0605a0
--- /dev/null
+++ b/macros/latex/contrib/oberdiek/hobsub-hyperref.sty
@@ -0,0 +1,15 @@
+\ifx\ProvidesPackage\undefined\else
+\ProvidesPackage{hobsub-hyperref}[2019/10/27]
+\fi
+\wlog{hobsub not currently supported, see hobsub.dtx to extract original code}
+\RequirePackage{ltxcmds}
+\RequirePackage{ifvtex}
+\RequirePackage{pdftexcmds}
+\RequirePackage{infwarerr}
+\RequirePackage{keyval}
+\RequirePackage{kvsetkeys}
+\RequirePackage{kvdefinekeys}
+\RequirePackage{pdfescape}
+\RequirePackage{hycolor}
+\RequirePackage{letltxmacro}
+\RequirePackage{auxhook}
diff --git a/macros/latex/contrib/oberdiek/hobsub.pdf b/macros/latex/contrib/oberdiek/hobsub.pdf
deleted file mode 100644
index 8ea8176611..0000000000
--- a/macros/latex/contrib/oberdiek/hobsub.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hobsub.sty b/macros/latex/contrib/oberdiek/hobsub.sty
new file mode 100644
index 0000000000..ebfde8efe0
--- /dev/null
+++ b/macros/latex/contrib/oberdiek/hobsub.sty
@@ -0,0 +1,5 @@
+\ifx\ProvidesPackage\undefined\else
+\ProvidesPackage{hobsub}[2019/10/27]
+\fi
+
+\wlog{hobsub not currently supported, see hobsub.dtx to extract original code}
diff --git a/macros/latex/contrib/oberdiek/hologo.pdf b/macros/latex/contrib/oberdiek/hologo.pdf
index 266f19fc2d..68e1643be8 100644
--- a/macros/latex/contrib/oberdiek/hologo.pdf
+++ b/macros/latex/contrib/oberdiek/hologo.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/holtxdoc.pdf b/macros/latex/contrib/oberdiek/holtxdoc.pdf
index 0424029a50..f54af83816 100644
--- a/macros/latex/contrib/oberdiek/holtxdoc.pdf
+++ b/macros/latex/contrib/oberdiek/holtxdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hopatch.pdf b/macros/latex/contrib/oberdiek/hopatch.pdf
index 22d5e7da4a..8f5363796c 100644
--- a/macros/latex/contrib/oberdiek/hopatch.pdf
+++ b/macros/latex/contrib/oberdiek/hopatch.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hycolor.pdf b/macros/latex/contrib/oberdiek/hycolor.pdf
index 46abb25d78..054413d720 100644
--- a/macros/latex/contrib/oberdiek/hycolor.pdf
+++ b/macros/latex/contrib/oberdiek/hycolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypbmsec.pdf b/macros/latex/contrib/oberdiek/hypbmsec.pdf
index 8609621495..ef47ef3a2a 100644
--- a/macros/latex/contrib/oberdiek/hypbmsec.pdf
+++ b/macros/latex/contrib/oberdiek/hypbmsec.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypcap.pdf b/macros/latex/contrib/oberdiek/hypcap.pdf
index a808d866f1..a79e9266ae 100644
--- a/macros/latex/contrib/oberdiek/hypcap.pdf
+++ b/macros/latex/contrib/oberdiek/hypcap.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypdestopt.pdf b/macros/latex/contrib/oberdiek/hypdestopt.pdf
index 1b60bc674c..4691594a16 100644
--- a/macros/latex/contrib/oberdiek/hypdestopt.pdf
+++ b/macros/latex/contrib/oberdiek/hypdestopt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypdoc.pdf b/macros/latex/contrib/oberdiek/hypdoc.pdf
index 7d06e32171..0fb938f0a4 100644
--- a/macros/latex/contrib/oberdiek/hypdoc.pdf
+++ b/macros/latex/contrib/oberdiek/hypdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypgotoe.pdf b/macros/latex/contrib/oberdiek/hypgotoe.pdf
index f517c6f9ba..5d8caea846 100644
--- a/macros/latex/contrib/oberdiek/hypgotoe.pdf
+++ b/macros/latex/contrib/oberdiek/hypgotoe.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hyphsubst.pdf b/macros/latex/contrib/oberdiek/hyphsubst.pdf
index 1f9a91fb36..6af7871793 100644
--- a/macros/latex/contrib/oberdiek/hyphsubst.pdf
+++ b/macros/latex/contrib/oberdiek/hyphsubst.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ifdraft.pdf b/macros/latex/contrib/oberdiek/ifdraft.pdf
index 3b1f991991..cf347fbbc9 100644
--- a/macros/latex/contrib/oberdiek/ifdraft.pdf
+++ b/macros/latex/contrib/oberdiek/ifdraft.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/iflang.pdf b/macros/latex/contrib/oberdiek/iflang.pdf
index b334edf0c2..ce8d1cb846 100644
--- a/macros/latex/contrib/oberdiek/iflang.pdf
+++ b/macros/latex/contrib/oberdiek/iflang.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ifluatex.pdf b/macros/latex/contrib/oberdiek/ifluatex.pdf
deleted file mode 100644
index fbf1f7d0c5..0000000000
--- a/macros/latex/contrib/oberdiek/ifluatex.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ifpdf.pdf b/macros/latex/contrib/oberdiek/ifpdf.pdf
deleted file mode 100644
index affb115e14..0000000000
--- a/macros/latex/contrib/oberdiek/ifpdf.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ifvtex.pdf b/macros/latex/contrib/oberdiek/ifvtex.pdf
deleted file mode 100644
index 140b966b12..0000000000
--- a/macros/latex/contrib/oberdiek/ifvtex.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/infwarerr.pdf b/macros/latex/contrib/oberdiek/infwarerr.pdf
index e61e4971f9..18ec7a6133 100644
--- a/macros/latex/contrib/oberdiek/infwarerr.pdf
+++ b/macros/latex/contrib/oberdiek/infwarerr.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/inputenx.pdf b/macros/latex/contrib/oberdiek/inputenx.pdf
index a2b7ba8475..50c77eb19a 100644
--- a/macros/latex/contrib/oberdiek/inputenx.pdf
+++ b/macros/latex/contrib/oberdiek/inputenx.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/intcalc.pdf b/macros/latex/contrib/oberdiek/intcalc.pdf
index 65d448bfbf..16ca359f50 100644
--- a/macros/latex/contrib/oberdiek/intcalc.pdf
+++ b/macros/latex/contrib/oberdiek/intcalc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/kvdefinekeys.pdf b/macros/latex/contrib/oberdiek/kvdefinekeys.pdf
index a54a7b0544..063cac531d 100644
--- a/macros/latex/contrib/oberdiek/kvdefinekeys.pdf
+++ b/macros/latex/contrib/oberdiek/kvdefinekeys.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/kvoptions.pdf b/macros/latex/contrib/oberdiek/kvoptions.pdf
index 8b444640d3..b827a8c735 100644
--- a/macros/latex/contrib/oberdiek/kvoptions.pdf
+++ b/macros/latex/contrib/oberdiek/kvoptions.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/kvsetkeys.pdf b/macros/latex/contrib/oberdiek/kvsetkeys.pdf
index 4689b89669..a1ed6868f5 100644
--- a/macros/latex/contrib/oberdiek/kvsetkeys.pdf
+++ b/macros/latex/contrib/oberdiek/kvsetkeys.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/letltxmacro.pdf b/macros/latex/contrib/oberdiek/letltxmacro.pdf
index 7ed1f55b34..e94e7a491d 100644
--- a/macros/latex/contrib/oberdiek/letltxmacro.pdf
+++ b/macros/latex/contrib/oberdiek/letltxmacro.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/listingsutf8.pdf b/macros/latex/contrib/oberdiek/listingsutf8.pdf
index 01caba1aca..503e1c272a 100644
--- a/macros/latex/contrib/oberdiek/listingsutf8.pdf
+++ b/macros/latex/contrib/oberdiek/listingsutf8.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ltxcmds.pdf b/macros/latex/contrib/oberdiek/ltxcmds.pdf
index bf2f6678b9..0c7c1f40d6 100644
--- a/macros/latex/contrib/oberdiek/ltxcmds.pdf
+++ b/macros/latex/contrib/oberdiek/ltxcmds.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/luacolor.pdf b/macros/latex/contrib/oberdiek/luacolor.pdf
index 006f0d2e99..0ae5e79378 100644
--- a/macros/latex/contrib/oberdiek/luacolor.pdf
+++ b/macros/latex/contrib/oberdiek/luacolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/luatex.pdf b/macros/latex/contrib/oberdiek/luatex.pdf
index 8316f3e950..1f93caf646 100644
--- a/macros/latex/contrib/oberdiek/luatex.pdf
+++ b/macros/latex/contrib/oberdiek/luatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/magicnum.pdf b/macros/latex/contrib/oberdiek/magicnum.pdf
index 692defe8ab..8a9f1b7c9f 100644
--- a/macros/latex/contrib/oberdiek/magicnum.pdf
+++ b/macros/latex/contrib/oberdiek/magicnum.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/makerobust.pdf b/macros/latex/contrib/oberdiek/makerobust.pdf
index c78a449ac2..484857b374 100644
--- a/macros/latex/contrib/oberdiek/makerobust.pdf
+++ b/macros/latex/contrib/oberdiek/makerobust.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/mleftright.pdf b/macros/latex/contrib/oberdiek/mleftright.pdf
index a6d21046e7..8e367535f7 100644
--- a/macros/latex/contrib/oberdiek/mleftright.pdf
+++ b/macros/latex/contrib/oberdiek/mleftright.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/oberdiek.pdf b/macros/latex/contrib/oberdiek/oberdiek.pdf
index 5831c69462..cd58b4b51f 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.pdf
+++ b/macros/latex/contrib/oberdiek/oberdiek.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/oberdiek.tex b/macros/latex/contrib/oberdiek/oberdiek.tex
index f8e9fc10f9..6bbe77ea0f 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.tex
+++ b/macros/latex/contrib/oberdiek/oberdiek.tex
@@ -6,10 +6,12 @@
\newcommand*{\Subject}{CTAN:\CTANdir}
\newcommand*{\Author}{Heiko Oberdiek}
\newcommand*{\Email}{ho-tex at tug.org}
-\newcommand*{\Date}{2019/07/27}
+\newcommand*{\Date}{2019/10/27}
-% Copyright (C) 2006-2019 by
-% Heiko Oberdiek <heiko.oberdiek at googlemail.com>
+% Copyright (C) 2006-2016 by
+% Heiko Oberdiek
+% Copyright (C) 2016-2019 by
+% Oberdiek Package Support Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -21,7 +23,7 @@
%
% This work has the LPPL maintenance status "maintained".
%
-% This Current Maintainer of this work is Heiko Oberdiek.
+% This Current Maintainer of this work is the Oberdiek Package Support Group.
%
% This work consists of the overview "oberdiek.pdf", its source
% "oberdiek.tex", and the installation script "oberdiek.ins"
@@ -259,12 +261,12 @@
[\entrysep]
\entry{iflang}{2007/11/11}{1.5}{Checks for the current language}%
[\entrysep]
-\entry{ifluatex}{2010/03/01}{1.3}{Provides the ifluatex switch}%
-[\entrysep]
-\entry{ifpdf}{2011/01/30}{2.3}{Provides the ifpdf switch}%
-[\entrysep]
-\entry{ifvtex}{2010/03/01}{1.5}{Detect \hologo{VTeX} and its facilities}%
-[\entrysep]
+% iftex distribution \entry{ifluatex}{2010/03/01}{1.3}{Provides the ifluatex switch}%
+% iftex distribution [\entrysep]
+% iftex distribution \entry{ifpdf}{2011/01/30}{2.3}{Provides the ifpdf switch}%
+% iftex distribution [\entrysep]
+% iftex distribution \entry{ifvtex}{2010/03/01}{1.5}{Detect \hologo{VTeX} and its facilities}%
+% iftex distribution [\entrysep]
\entry{infwarerr}{2010/04/08}{1.3}{Providing info/warning/error messages}%
[\entrysep]
\entry{inputenx}{2011/05/27}{1.10}{Enhanced input encoding handling}%
@@ -684,7 +686,7 @@ contain spaces.
Package \xpackage{hobsub} implements the idea of loading
several packages in one big collection package.
\end{abstract}
-\tocinclude{hobsub}
+%\tocinclude{hobsub}
\newpage
\subsection{\pkgsectformat{hologo}}
@@ -819,7 +821,7 @@ and provides the switch \cs{ifluatex}. Also it makes
\cs{luatexversion} available if it is not present.
It works with \plainTeX\ or \LaTeX.
\end{abstract}
-\tocinclude{ifluatex}
+%\tocinclude{ifluatex}
\newpage
\subsection{\pkgsectformat{ifpdf}}
@@ -831,7 +833,7 @@ The detection is based on \cs{pdfoutput} and
the package will not change this value.
It works with plain or \LaTeX\ formats.
\end{abstract}
-\tocinclude{ifpdf}
+%\tocinclude{ifpdf}
\newpage
\subsection{\pkgsectformat{ifvtex}}
@@ -841,7 +843,7 @@ This package looks for \VTeX, implements
and sets the switches \cs{ifvtex}, \cs{ifvtex}\texttt{\meta{mode}},
\cs{ifvtexgex}. It works with plain or \LaTeX\ formats.
\end{abstract}
-\tocinclude{ifvtex}
+%\tocinclude{ifvtex}
\newpage
\subsection{\pkgsectformat{infwarerr}}
diff --git a/macros/latex/contrib/oberdiek/pagegrid.pdf b/macros/latex/contrib/oberdiek/pagegrid.pdf
index bcb35b5bf6..2f845ddf9f 100644
--- a/macros/latex/contrib/oberdiek/pagegrid.pdf
+++ b/macros/latex/contrib/oberdiek/pagegrid.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pagesel.pdf b/macros/latex/contrib/oberdiek/pagesel.pdf
index 1dad4b4c4e..a247a6ad2c 100644
--- a/macros/latex/contrib/oberdiek/pagesel.pdf
+++ b/macros/latex/contrib/oberdiek/pagesel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcol.pdf b/macros/latex/contrib/oberdiek/pdfcol.pdf
index a2f6c7b06e..aa82e74d1a 100644
--- a/macros/latex/contrib/oberdiek/pdfcol.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcol.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf
index f864e6772d..f4cab198c1 100644
--- a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolmk.pdf b/macros/latex/contrib/oberdiek/pdfcolmk.pdf
index 8c67c3d1f7..859eed59f4 100644
--- a/macros/latex/contrib/oberdiek/pdfcolmk.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolmk.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
index bbadf02f10..d31ed95e9a 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
index a05da4f901..558a997044 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.pdf b/macros/latex/contrib/oberdiek/pdfcrypt.pdf
index a4dd1bb092..1b9c41b643 100644
--- a/macros/latex/contrib/oberdiek/pdfcrypt.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcrypt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfescape.pdf b/macros/latex/contrib/oberdiek/pdfescape.pdf
index d4bb60e010..a14d364eb3 100644
--- a/macros/latex/contrib/oberdiek/pdfescape.pdf
+++ b/macros/latex/contrib/oberdiek/pdfescape.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdflscape.pdf b/macros/latex/contrib/oberdiek/pdflscape.pdf
index bfe81e27c1..ef82411004 100644
--- a/macros/latex/contrib/oberdiek/pdflscape.pdf
+++ b/macros/latex/contrib/oberdiek/pdflscape.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfrender.pdf b/macros/latex/contrib/oberdiek/pdfrender.pdf
index 5ff26fc0f6..f77fdd7120 100644
--- a/macros/latex/contrib/oberdiek/pdfrender.pdf
+++ b/macros/latex/contrib/oberdiek/pdfrender.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdftexcmds.pdf b/macros/latex/contrib/oberdiek/pdftexcmds.pdf
index 7d1378275b..d9d964016d 100644
--- a/macros/latex/contrib/oberdiek/pdftexcmds.pdf
+++ b/macros/latex/contrib/oberdiek/pdftexcmds.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/picture.pdf b/macros/latex/contrib/oberdiek/picture.pdf
index 99161807ef..8c62cad509 100644
--- a/macros/latex/contrib/oberdiek/picture.pdf
+++ b/macros/latex/contrib/oberdiek/picture.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pmboxdraw.pdf b/macros/latex/contrib/oberdiek/pmboxdraw.pdf
index 7307f590ad..a4da4b9e0e 100644
--- a/macros/latex/contrib/oberdiek/pmboxdraw.pdf
+++ b/macros/latex/contrib/oberdiek/pmboxdraw.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/protecteddef.pdf b/macros/latex/contrib/oberdiek/protecteddef.pdf
index bddf7cdf1c..c637a25d7a 100644
--- a/macros/latex/contrib/oberdiek/protecteddef.pdf
+++ b/macros/latex/contrib/oberdiek/protecteddef.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/refcount.pdf b/macros/latex/contrib/oberdiek/refcount.pdf
index 6efc8d360a..8ce2c9878e 100644
--- a/macros/latex/contrib/oberdiek/refcount.pdf
+++ b/macros/latex/contrib/oberdiek/refcount.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/rerunfilecheck.pdf b/macros/latex/contrib/oberdiek/rerunfilecheck.pdf
index b92f959320..a59d24e407 100644
--- a/macros/latex/contrib/oberdiek/rerunfilecheck.pdf
+++ b/macros/latex/contrib/oberdiek/rerunfilecheck.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/resizegather.pdf b/macros/latex/contrib/oberdiek/resizegather.pdf
index 5095ae202b..94dc693df5 100644
--- a/macros/latex/contrib/oberdiek/resizegather.pdf
+++ b/macros/latex/contrib/oberdiek/resizegather.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/rotchiffre.pdf b/macros/latex/contrib/oberdiek/rotchiffre.pdf
index 28a7c33fe7..86f4b206a8 100644
--- a/macros/latex/contrib/oberdiek/rotchiffre.pdf
+++ b/macros/latex/contrib/oberdiek/rotchiffre.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/scrindex.pdf b/macros/latex/contrib/oberdiek/scrindex.pdf
index b12323a8e9..34cfd41ce8 100644
--- a/macros/latex/contrib/oberdiek/scrindex.pdf
+++ b/macros/latex/contrib/oberdiek/scrindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/selinput.pdf b/macros/latex/contrib/oberdiek/selinput.pdf
index 5e4f05ad72..3506a5da2c 100644
--- a/macros/latex/contrib/oberdiek/selinput.pdf
+++ b/macros/latex/contrib/oberdiek/selinput.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/setouterhbox.pdf b/macros/latex/contrib/oberdiek/setouterhbox.pdf
index f765ad1460..c8f62abb68 100644
--- a/macros/latex/contrib/oberdiek/setouterhbox.pdf
+++ b/macros/latex/contrib/oberdiek/setouterhbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/settobox.pdf b/macros/latex/contrib/oberdiek/settobox.pdf
index 6b867bd670..06a7e1a9a6 100644
--- a/macros/latex/contrib/oberdiek/settobox.pdf
+++ b/macros/latex/contrib/oberdiek/settobox.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/soulutf8.pdf b/macros/latex/contrib/oberdiek/soulutf8.pdf
index cc93e0d6e4..cae9a515f8 100644
--- a/macros/latex/contrib/oberdiek/soulutf8.pdf
+++ b/macros/latex/contrib/oberdiek/soulutf8.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stackrel.pdf b/macros/latex/contrib/oberdiek/stackrel.pdf
index 89aba3dcfe..bc273d49bf 100644
--- a/macros/latex/contrib/oberdiek/stackrel.pdf
+++ b/macros/latex/contrib/oberdiek/stackrel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stampinclude.pdf b/macros/latex/contrib/oberdiek/stampinclude.pdf
index b1538ef370..8dae0668a7 100644
--- a/macros/latex/contrib/oberdiek/stampinclude.pdf
+++ b/macros/latex/contrib/oberdiek/stampinclude.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stringenc.pdf b/macros/latex/contrib/oberdiek/stringenc.pdf
index fe3a514a3a..54994c5987 100644
--- a/macros/latex/contrib/oberdiek/stringenc.pdf
+++ b/macros/latex/contrib/oberdiek/stringenc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/tabularht.pdf b/macros/latex/contrib/oberdiek/tabularht.pdf
index 735e232943..f8dac8015d 100644
--- a/macros/latex/contrib/oberdiek/tabularht.pdf
+++ b/macros/latex/contrib/oberdiek/tabularht.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/tabularkv.pdf b/macros/latex/contrib/oberdiek/tabularkv.pdf
index ddeccda367..a5b3cf8274 100644
--- a/macros/latex/contrib/oberdiek/tabularkv.pdf
+++ b/macros/latex/contrib/oberdiek/tabularkv.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/telprint.pdf b/macros/latex/contrib/oberdiek/telprint.pdf
index ef672a83da..2118aefb13 100644
--- a/macros/latex/contrib/oberdiek/telprint.pdf
+++ b/macros/latex/contrib/oberdiek/telprint.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.pdf b/macros/latex/contrib/oberdiek/thepdfnumber.pdf
index 2c470d72d7..59b9cff048 100644
--- a/macros/latex/contrib/oberdiek/thepdfnumber.pdf
+++ b/macros/latex/contrib/oberdiek/thepdfnumber.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/transparent.pdf b/macros/latex/contrib/oberdiek/transparent.pdf
index cb0c1cc1aa..a68061ef50 100644
--- a/macros/latex/contrib/oberdiek/transparent.pdf
+++ b/macros/latex/contrib/oberdiek/transparent.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/twoopt.pdf b/macros/latex/contrib/oberdiek/twoopt.pdf
index 11c8cc9ae2..497720b914 100644
--- a/macros/latex/contrib/oberdiek/twoopt.pdf
+++ b/macros/latex/contrib/oberdiek/twoopt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/uniquecounter.pdf b/macros/latex/contrib/oberdiek/uniquecounter.pdf
index 560ffbbdeb..2a2d61fe3a 100644
--- a/macros/latex/contrib/oberdiek/uniquecounter.pdf
+++ b/macros/latex/contrib/oberdiek/uniquecounter.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/zref.pdf b/macros/latex/contrib/oberdiek/zref.pdf
index 9b7598d5a7..724b9fc08b 100644
--- a/macros/latex/contrib/oberdiek/zref.pdf
+++ b/macros/latex/contrib/oberdiek/zref.pdf
Binary files differ
diff --git a/macros/latex/contrib/pseudo/Makefile b/macros/latex/contrib/pseudo/Makefile
index 388a7bea2f..0541b20e49 100644
--- a/macros/latex/contrib/pseudo/Makefile
+++ b/macros/latex/contrib/pseudo/Makefile
@@ -2,13 +2,14 @@ TARGETS=doc/pseudo.pdf doc/fig/readmefig.svg
LATEX=latexmk -norc -pdf -auxdir=build -outdir=build
FIGS=build/hilitefig.pdf build/pausefig.pdf build/kwfig.pdf
+TESTS=build/pseudotest.pdf
all: $(TARGETS)
doc/pseudo.pdf: build/pseudo.pdf
cp $< $@
-build/pseudo.pdf: doc/pseudo.tex build/pseudo.bib $(FIGS) README.md
+build/pseudo.pdf: doc/pseudo.tex build/pseudo.bib $(FIGS) $(TESTS) README.md pseudo.sty
$(LATEX) $<
build/pseudo.bib: doc/pseudo.bib
@@ -23,6 +24,9 @@ build/pausefig.pdf: doc/fig/pausefig.tex pseudo.sty
build/kwfig.pdf: doc/fig/kwfig.tex pseudo.sty
$(LATEX) $<
+build/pseudotest.pdf: test/pseudotest.tex pseudo.sty
+ $(LATEX) $<
+
pseudo.sty: VERSION LICENSE doc/pseudo.tex
cat LICENSE | sed -e "s/^/% /" | sed -e "s/^% \$$/%/" > pseudo.sty
echo "%" >> pseudo.sty
@@ -33,7 +37,7 @@ pseudo.sty: VERSION LICENSE doc/pseudo.tex
-e "s/_@@/__pseudo/g" \
-e "s/@@/__pseudo/g" \
-e "s/VERSION/$$(cat VERSION)/g" \
- -e "s/DATE/$$(date +"%Y-%m-%d")/g" \
+ -e "s/DATE/$$(date +"%Y\/%m\/%d")/g" \
-e "s/[ ]*%.*\$$//" \
-e "/^\$$/d" \
-e "p" \
diff --git a/macros/latex/contrib/pseudo/VERSION b/macros/latex/contrib/pseudo/VERSION
index 45a1b3f445..781dcb07cd 100644
--- a/macros/latex/contrib/pseudo/VERSION
+++ b/macros/latex/contrib/pseudo/VERSION
@@ -1 +1 @@
-1.1.2
+1.1.3
diff --git a/macros/latex/contrib/pseudo/doc/fig/readmefig.svg b/macros/latex/contrib/pseudo/doc/fig/readmefig.svg
index 0fc3a645a3..6070ef987b 100644
--- a/macros/latex/contrib/pseudo/doc/fig/readmefig.svg
+++ b/macros/latex/contrib/pseudo/doc/fig/readmefig.svg
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="249.005pt" height="144.458pt" viewBox="0 0 249.005 144.458" version="1.1">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="249.212pt" height="144.458pt" viewBox="0 0 249.212 144.458" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
@@ -233,80 +233,80 @@
<use xlink:href="#glyph1-6" x="0.000000000000035527" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph4-4" x="47.16125" y="66.81125"/>
- <use xlink:href="#glyph4-1" x="51.312693" y="66.81125"/>
+ <use xlink:href="#glyph4-4" x="47.265" y="66.81125"/>
+ <use xlink:href="#glyph4-1" x="51.416443" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-7" x="60.86" y="66.81125"/>
+ <use xlink:href="#glyph1-7" x="60.96375" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-8" x="72.3275" y="66.81125"/>
+ <use xlink:href="#glyph2-8" x="72.43125" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-4" x="87.863282" y="66.81125"/>
+ <use xlink:href="#glyph2-4" x="87.967032" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-6" x="95.475756" y="66.81125"/>
+ <use xlink:href="#glyph2-6" x="95.579506" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph3-1" x="99.53375" y="66.81125"/>
- <use xlink:href="#glyph3-2" x="103.26975" y="66.81125"/>
- <use xlink:href="#glyph3-3" x="110.74175" y="66.81125"/>
+ <use xlink:href="#glyph3-1" x="99.6375" y="66.81125"/>
+ <use xlink:href="#glyph3-2" x="103.3735" y="66.81125"/>
+ <use xlink:href="#glyph3-3" x="110.8455" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph3-4" x="116.71935" y="66.81125"/>
- <use xlink:href="#glyph3-1" x="123.44415" y="66.81125"/>
+ <use xlink:href="#glyph3-4" x="116.8231" y="66.81125"/>
+ <use xlink:href="#glyph3-1" x="123.5479" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-8" x="132.88125" y="66.81125"/>
+ <use xlink:href="#glyph2-8" x="132.985" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-5" x="148.417032" y="66.81125"/>
+ <use xlink:href="#glyph2-5" x="148.520782" y="66.81125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-8" x="0.000000000000053291" y="84.86875"/>
+ <use xlink:href="#glyph1-8" x="0.000000000000035527" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="76.0325" y="84.86875"/>
- <use xlink:href="#glyph0-2" x="87.551335" y="84.86875"/>
+ <use xlink:href="#glyph0-1" x="76.24" y="84.86875"/>
+ <use xlink:href="#glyph0-2" x="87.758835" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="96.387722" y="84.86875"/>
- <use xlink:href="#glyph0-4" x="105.221121" y="84.86875"/>
- <use xlink:href="#glyph0-5" x="114.719527" y="84.86875"/>
+ <use xlink:href="#glyph0-3" x="96.595222" y="84.86875"/>
+ <use xlink:href="#glyph0-4" x="105.428621" y="84.86875"/>
+ <use xlink:href="#glyph0-5" x="114.927027" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-2" x="125.876718" y="84.86875"/>
- <use xlink:href="#glyph0-6" x="135.041873" y="84.86875"/>
- <use xlink:href="#glyph0-7" x="144.04115" y="84.86875"/>
+ <use xlink:href="#glyph0-2" x="126.084218" y="84.86875"/>
+ <use xlink:href="#glyph0-6" x="135.249373" y="84.86875"/>
+ <use xlink:href="#glyph0-7" x="144.24865" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-1" x="153.37125" y="84.86875"/>
+ <use xlink:href="#glyph1-1" x="153.57875" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-1" x="159.06125" y="84.86875"/>
+ <use xlink:href="#glyph2-1" x="159.26875" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-2" x="168.398261" y="84.86875"/>
+ <use xlink:href="#glyph2-2" x="168.605761" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-3" x="174.958677" y="84.86875"/>
+ <use xlink:href="#glyph2-3" x="175.166177" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-2" x="186.671784" y="84.86875"/>
+ <use xlink:href="#glyph2-2" x="186.879284" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-7" x="193.217256" y="84.86875"/>
- <use xlink:href="#glyph2-2" x="201.545548" y="84.86875"/>
+ <use xlink:href="#glyph2-7" x="193.424756" y="84.86875"/>
+ <use xlink:href="#glyph2-2" x="201.753048" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-5" x="208.105964" y="84.86875"/>
+ <use xlink:href="#glyph2-5" x="208.313464" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-2" x="213.0975" y="84.86875"/>
+ <use xlink:href="#glyph1-2" x="213.30625" y="84.86875"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-9" x="0.000000000000035527" y="102.92625"/>
+ <use xlink:href="#glyph1-9" x="0.000000000000071054" y="102.92625"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-1" x="18.29" y="102.92625"/>
@@ -333,79 +333,79 @@
<use xlink:href="#glyph2-3" x="93.8425" y="102.92625"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-10" x="0.000000000000035527" y="120.98375"/>
+ <use xlink:href="#glyph1-10" x="0.000000000000071054" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph4-4" x="47.16125" y="120.98375"/>
- <use xlink:href="#glyph4-1" x="51.312693" y="120.98375"/>
+ <use xlink:href="#glyph4-4" x="47.265" y="120.98375"/>
+ <use xlink:href="#glyph4-1" x="51.416443" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-7" x="60.86" y="120.98375"/>
- <use xlink:href="#glyph2-6" x="69.188291" y="120.98375"/>
+ <use xlink:href="#glyph2-7" x="60.96375" y="120.98375"/>
+ <use xlink:href="#glyph2-6" x="69.292041" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph3-1" x="73.2525" y="120.98375"/>
- <use xlink:href="#glyph3-2" x="76.9885" y="120.98375"/>
- <use xlink:href="#glyph3-3" x="84.4605" y="120.98375"/>
+ <use xlink:href="#glyph3-1" x="73.35625" y="120.98375"/>
+ <use xlink:href="#glyph3-2" x="77.09225" y="120.98375"/>
+ <use xlink:href="#glyph3-3" x="84.56425" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph3-4" x="90.4381" y="120.98375"/>
- <use xlink:href="#glyph3-1" x="97.1629" y="120.98375"/>
+ <use xlink:href="#glyph3-4" x="90.54185" y="120.98375"/>
+ <use xlink:href="#glyph3-1" x="97.26665" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph6-1" x="106.8325" y="120.98375"/>
+ <use xlink:href="#glyph6-1" x="106.93625" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph6-1" x="115.0775" y="120.98375"/>
+ <use xlink:href="#glyph6-1" x="115.18125" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-7" x="127.1825" y="120.98375"/>
+ <use xlink:href="#glyph1-7" x="127.28625" y="120.98375"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-11" x="0.000000000000014211" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="76.0325" y="139.04125"/>
- <use xlink:href="#glyph0-2" x="87.551335" y="139.04125"/>
+ <use xlink:href="#glyph0-1" x="76.24" y="139.04125"/>
+ <use xlink:href="#glyph0-2" x="87.758835" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="96.387722" y="139.04125"/>
- <use xlink:href="#glyph0-4" x="105.221121" y="139.04125"/>
- <use xlink:href="#glyph0-5" x="114.719527" y="139.04125"/>
+ <use xlink:href="#glyph0-3" x="96.595222" y="139.04125"/>
+ <use xlink:href="#glyph0-4" x="105.428621" y="139.04125"/>
+ <use xlink:href="#glyph0-5" x="114.927027" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-2" x="125.876718" y="139.04125"/>
- <use xlink:href="#glyph0-6" x="135.041873" y="139.04125"/>
- <use xlink:href="#glyph0-7" x="144.04115" y="139.04125"/>
+ <use xlink:href="#glyph0-2" x="126.084218" y="139.04125"/>
+ <use xlink:href="#glyph0-6" x="135.249373" y="139.04125"/>
+ <use xlink:href="#glyph0-7" x="144.24865" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-1" x="153.37125" y="139.04125"/>
+ <use xlink:href="#glyph1-1" x="153.57875" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-1" x="159.06125" y="139.04125"/>
+ <use xlink:href="#glyph2-1" x="159.26875" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-2" x="168.398261" y="139.04125"/>
+ <use xlink:href="#glyph2-2" x="168.605761" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-3" x="174.958677" y="139.04125"/>
+ <use xlink:href="#glyph2-3" x="175.166177" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-2" x="186.671784" y="139.04125"/>
+ <use xlink:href="#glyph2-2" x="186.879284" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-7" x="193.217256" y="139.04125"/>
- <use xlink:href="#glyph2-2" x="201.545548" y="139.04125"/>
+ <use xlink:href="#glyph2-7" x="193.424756" y="139.04125"/>
+ <use xlink:href="#glyph2-2" x="201.753048" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph2-5" x="208.105964" y="139.04125"/>
+ <use xlink:href="#glyph2-5" x="208.313464" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-12" x="216.41875" y="139.04125"/>
+ <use xlink:href="#glyph1-12" x="216.62625" y="139.04125"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph1-3" x="231.117668" y="139.04125"/>
- <use xlink:href="#glyph1-2" x="238.434251" y="139.04125"/>
+ <use xlink:href="#glyph1-3" x="231.325168" y="139.04125"/>
+ <use xlink:href="#glyph1-2" x="238.641751" y="139.04125"/>
</g>
</g>
</svg>
diff --git a/macros/latex/contrib/pseudo/doc/pseudo.pdf b/macros/latex/contrib/pseudo/doc/pseudo.pdf
index 3a92422f35..515978d79c 100644
--- a/macros/latex/contrib/pseudo/doc/pseudo.pdf
+++ b/macros/latex/contrib/pseudo/doc/pseudo.pdf
Binary files differ
diff --git a/macros/latex/contrib/pseudo/doc/pseudo.tex b/macros/latex/contrib/pseudo/doc/pseudo.tex
index 9148d16289..de0e5a8a69 100644
--- a/macros/latex/contrib/pseudo/doc/pseudo.tex
+++ b/macros/latex/contrib/pseudo/doc/pseudo.tex
@@ -431,6 +431,34 @@ There are also code-typesetting packages like
\pkg[https://ctan.org/tex-archive/macros/latex/contrib/listings]{listings} and
\pkg[https://ctan.org/pkg/minted]{minted}, of course.
+\subsection*{Using older \TeX\ distributions}
+
+The imlementation of \pkg{pseudo} uses some functionality that isn't available
+in older \TeX\ distributions, in particular, older versions of
+\pkg[https://ctan.org/pkg/xparse]{xparse} and
+\pkg[https://ctan.org/pkg/expl3]{expl3}. Some care has been taken to make the
+code backward compatible to the point where it works on \TeX\ Live~2016, which
+is what is used (at the time of writing) on \href{https://arxiv.org}{arXiv}.
+If you run into issues somewhere else (e.g., when submitting to some publisher
+with a custom setup), feel free to
+\href{https://github.com/mlhetland/pseudo.sty/issues}{file an issue}, or even
+\href{https://github.com/mlhetland/pseudo.sty/pulls}{provide a pull request}
+with a fix. One thing to look out for is that older versions of
+\pkg[https://ctan.org/pkg/xparse]{xparse} parse arguments differently, so
+things like
+\begin{texexp}[listing only]
+foo\\<1>
+bar\\[hl]
+\end{texexp}
+would work, but separating the arguments with spaces, as in
+\begin{texexp}[listing only]
+foo\\ <1>
+bar\\ [hl]
+\end{texexp}
+will \emph{not} work, though this works with more recent versions (as seen
+from some of my examples, later). For more advice on working around an older
+distribution, see also \cref{sec:older}.
+
\section{Overview}
The main component of the \pkg{pseudo} package is the \refe{pseudo}
@@ -494,8 +522,10 @@ If you want, you can certainly create shortcuts, e.g.,
\verb|\def\While{\kw{while}}|, or using various declaration commands, such as
\refc{DeclarePseudoKeyword} or \refc{DeclarePseudoConstant}. Procedures and
functions capture parenthesized arguments and set them in math mode; this
-carries over in such shortcuts, so if you define \verb|\Euclid| to mean
-\verb|\pr{Euclid}|, then \code*{\cs{Euclid}(a, b)} yields \pr{Euclid}(a,b).
+carries over in shortcuts, so if you define \verb|\Euclid| to mean
+\verb|\pr{Euclid}|, then \code*{\cs{Euclid}(a, b)} yields
+\pr{Euclid}(a,b).\footnote{Note that \code*{\cs{Euclid} (a, b)}, with a space
+before the parenthetical, yields \pr{Euclid} (a, b).}
These commands are not used in the internals of the package, so they may be
freely redefined for different styling, such as \verb|\let\id\textsf|. They
@@ -1099,10 +1129,9 @@ alphabetical order), you'll find definitions of a couple of counters here
This may not be enough, however. For example, if you're using
\pkg[https://ctan.org/pkg/standalone]{standalone} to produce individual
- pseudocode images, this compactness will \emph{not} be triggered
- automatically. In such cases, you can override the behavior using the
- \refk{compact} key, manually specifying whether you want the pseudocode to
- be compact or not.
+ pseudocode images, this compactness may not be triggered automatically. In
+ such cases, you can override the behavior using the \refk{compact} key,
+ manually specifying whether you want the pseudocode to be compact or not.
\end{docKey}
\begin{docCommand}{ct}{\marg{text}}
@@ -1323,14 +1352,14 @@ See also \refk{bol-append}, \refk{setup-append} and \refk{dim-color}.
shortcut, and configurable via \refk{eqs-pad}, \refk{eqs-scale} and
\refk{eqs-sep}.
\end{docCommand}
-\begin{docKey}{eqs-pad}{\,=\,\meta{length}}{\initialkeyvalue{\code{0.28mu}}}
+\begin{docKey}{eqs-pad}{\,=\,\meta{muskip}}{\initialkeyvalue{\code{0.28mu}}}
The amount of space inserted on each side of \refc{eqs}.
\end{docKey}
\begin{docKey}{eqs-scale}{\,=\,\meta{number}}{\initialkeyvalue{\code{0.6785}}}
The amount of horizontal scaling applied to the \code{=} signs in
\refc{eqs}.
\end{docKey}
-\begin{docKey}{eqs-sep}{\,=\,\meta{length}}{\initialkeyvalue{\code{0.63mu}}}
+\begin{docKey}{eqs-sep}{\,=\,\meta{muskip}}{\initialkeyvalue{\code{0.63mu}}}
The amount of space inserted between the two \code{=} signs in \cs{eqs}.
\end{docKey}
@@ -1958,10 +1987,10 @@ goto \tn{\ref{li:ref}}
\begin{docCommand}{st}{\marg{string}}
Typesets \meta{string} with added quotes using \refc{stfont}. (The entire
thing is wrapped in \cs{textnormal}.) For example, \code*{print
- \cs{st}\braces{42}} yields
+ \cs{st}\braces{42}} yields:
\begin{pseudo*}
print \st{42}
- \end{pseudo*}.
+ \end{pseudo*}
See also \refc{DeclarePseudoString}.
\fontutil{strings}
\pseudoshortcutted{st}
@@ -2263,7 +2292,7 @@ If all your tabbing is done \emph{before} the text on a given code line, you
can achieve this in \pkg{pseudo} as well, by using the \code{+} and \code{-}
modifiers. (For example, the tab stops in
\pkg[https://ctan.org/pkg/clrscode3e]{clrscode3e} are set at fixed intervals,
-just like in \pkg{pseudo}.) But what i you'd like to align something that
+just like in \pkg{pseudo}.) But what if you'd like to align something that
comes later, such as comments after code lines? You can't simply use
\cs{hspace}, of course, unless the code lines themselves have exactly the same
length.
@@ -2567,7 +2596,69 @@ course. This could be done by some hook triggered by the \code{-} flags in
\refc{\bslash}. If it turns out there's a demand for something like that, I
might add it in a future version.
+\subsection{\dots\,use \pkg{pseudo} with older \TeX\ distributions?}
+\label{sec:older}
+
+As mentioned in the introduction, I've tried to make \pkg{pseudo} work with at
+least \emph{somewhat} outdated \TeX\ distributions. In these cases, the
+package itself won't be available as part of the distribution, of course, but
+you can simply download the file
+\texttt{\href{http://mirrors.ctan.org/macros/latex/contrib/pseudo/pseudo.sty}{pseudo.sty}}
+and place it in the directory where you're compiling your document (or
+anywhere else where your \LaTeX\ executable can find it).
+
+However, there may be cases where this just doesn't work, such as when
+submitting to a publisher with a really old setup.\footnote{If possible,
+though, feel free to
+\href{https://github.com/mlhetland/pseudo.sty/issues}{file an issue} or
+\href{https://github.com/mlhetland/pseudo.sty/pulls}{provide a pull request}
+to address the issue.}
+In that case, the simplest solution is probably to use the
+\pkg[https://ctan.org/pkg/standalone]{standalone} package to produce
+individual PDFs of your algorithms, and then to include those in your
+document. Then you can submit the PDFs rather than the \LaTeX, so that the
+pseudocode need not be compiled on the old system. Each algorithm could go in
+a file like this:
+
+\begin{texexp}[listing only]
+\documentclass{standalone}
+\usepackage{pseudo}
+\begin{document}
+\begin{pseudo}
+ ...
+\end{pseudo}
+\end{document}
+\end{texexp}
+
+\noindent
+Let's say this is compiled to \texttt{algo1.pdf}. You then include this file:
+
+\begin{texexp}[listing only]
+\documentclass{article}
+\usepackage{graphicx} % For \includegraphics
+...
+\begin{document}
+... sanctus est Lorem ipsum dolor sit amet:
+
+\medskip\noindent
+\includegraphics{algo1}
+
+\smallskip
+Lorem ipsum dolor sit amet, consetetur sadipscing ...
+\end{document}
+\end{texexp}
+
+\noindent
+Of course, you can adjust the spacing (e.g., using \verb|\vspace| or the like)
+to your liking. Using this method, you can can achieve results essentially
+identical to if you compiled the pseudocode directly as part of the document.
+Of course, you won't have access to other functionality (such as
+\verb|\DeclarePseudoIdentifier| or the like) for use in the main tex, but most
+of that should be possible to emulate by hand (possibly peeking at the
+implementation in \cref{sec:impl}).
+
\section{Implementation}
+\label{sec:impl}
\lstdefinestyle{tcblatex}{language={[LaTeX]TeX},
aboveskip={0\p@ \@plus 6\p@},
@@ -2678,13 +2769,12 @@ which the current line is indented. The initial indent level may be set using
\subsection{Utilities}
\paragraph{Variants.} First, let's just generate a couple of expansion
-variants we'll need of some standard commands:
+variants we'll need of some standard commands. (I'm using the
+\verb|\q_no_value| machinery rather than \verb|\c_novalue_tl| for
+compatibility with older \TeX\ distributions.)
\begin{source}
-\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
+\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
\cs_generate_variant:Nn \tl_set:Nn { Ne }
-\cs_generate_variant:Nn \regex_extract_once:nnNTF { nVNTF }
-% \cs_generate_variant:Nn \regex_match:nnF { nVF }
-\cs_generate_variant:Nn \regex_match:nnF { neF }
\end{source}
\paragraph{Defining columns.} The \refk{preamble} is is configurable, but the
\pkg[https://ctan.org/pkg/array]{array} package makes sure it doesn't expand
@@ -2715,21 +2805,22 @@ undefined):
\cs_new:Nn \@@_meta_new_cmd:NNnn {
\tl_set:Nn \l_tmpa_tl {pseudo \cs_to_str:N #2}
\exp_args:Nc
- #1 \l_tmpa_tl {#3} {#4}
+ #1 \l_tmpa_tl #3 {#4}
\cs_if_free:NT #2 {\cs_gset_eq:Nc #2 \l_tmpa_tl}
}
\cs_new:Nn \@@_new_cmd:Nnn {
\@@_meta_new_cmd:NNnn
- \NewDocumentCommand #1 {#2} {
+ \NewDocumentCommand #1 {{#2}} {
#3
}
}
-
\cs_new:Nn \@@_new_ecmd:Nnn {
\@@_meta_new_cmd:NNnn
- \NewExpandableDocumentCommand #1 {#2} {
+ % \NewExpandableDocumentCommand #1 {{#2}} {
+ % Replaced for compatibility:
+ \def #1 {#2} {
#3
}
}
@@ -2779,7 +2870,7 @@ provided, but \refk{indent-text} is only used if there is no \refk{indent-length
\begin{source}
\cs_new:Nn \@@_set_indent_length: {
- \tl_if_novalue:VTF \l_@@_indent_length_tl {
+ \quark_if_no_value:VTF \l_@@_indent_length_tl {
\hbox_set:Nn \l_tmpa_box { \l_@@_indent_text_tl }
\dim_set:Nn \pseudoindentlength { \box_wd:N \l_tmpa_box }
} {
@@ -2921,31 +3012,48 @@ generally non-extended bold, if that's available, but extended bold otherwise:
% Fallback, if that failed:
\cs_if_exist:NT \@defaultsubs {
\cs_gset_eq:NN \@@_b_or_bx: \bfseries
- \group_insert_after:N \@@_b_or_bx:
}
\group_end:
+ % Make sure the new version is used:
+ \@@_b_or_bx:
+
}
\end{source}
Note that the command redefines itself after the first use, so as not to
execute the check every time.
The \refc{pr} command is also a font shortcut, but in addition takes optional
-parenthesis-delimited arguments, which are set in math mode:
+parenthesis-delimited arguments, which are set in math mode. To avoid
+erroneousy slurping up following parentheticals, there should be no space
+separating the command and its optional argument. With current versions of
+\pkg[https://ctan.org/pkg/xparse]{xparse}, this can be achieved with the
+\verb|!| argument type, but for compatibility with older \TeX\ distributions,
+I'll deal with it ``manually.''
\begin{source}
\cs_new:Nn \@@_fmt_pr:n {
\textnormal{\prfont{ #1 }}
}
-\cs_new:Nn \@@_fmt_pr:nn {
- \@@_fmt_pr:n { #1 }
- \ensuremath{ ( #2 ) }
+
+\NewDocumentCommand \@@_parse_paren_args { +d() } {
+ \IfNoValueF { #1 } {
+ \ensuremath{ ( #1 ) }
+ }
}
-\@@_new_cmd:Nnn \pr { m !+d() } {
- \IfNoValueTF { #2 } {
- \@@_fmt_pr:n { #1 }
+
+\NewDocumentCommand \@@_parse_bracket_or_paren_args { +o } {
+ \IfNoValueTF { #1 } {
+ \@@_parse_paren_args
} {
- \@@_fmt_pr:nn { #1 } { #2 }
+ \ensuremath{ [ #1 ] }
+ }
+}
+
+\@@_new_cmd:Nnn \pr { m } {
+ \@@_fmt_pr:n { #1 }
+ \peek_catcode:NTF { ~ } { } {
+ \@@_parse_paren_args
}
}
\end{source}
@@ -2955,26 +3063,10 @@ square brackets.
\cs_new:Nn \@@_fmt_fn:n {
\textnormal{\fnfont{ #1 }}
}
-\cs_new:Nn \@@_fmt_fn:nn {
- \@@_fmt_fn:n { #1 }
- \ensuremath{ ( #2 ) }
-}
-\cs_new:Nn \@@_fmt_ar:nn {
+\@@_new_cmd:Nnn \fn { m } {
\@@_fmt_fn:n { #1 }
- \ensuremath{ [ #2 ] }
-}
-\@@_new_cmd:Nnn \fn { m !+o !+d() } {
- \IfNoValueTF { #2 } {
- \IfNoValueTF { #3 } {
- \@@_fmt_fn:n { #1 }
- } {
- \@@_fmt_fn:nn { #1 } { #3 }
- }
- } {
- \@@_fmt_ar:nn { #1 } { #2 }
- \IfNoValueF { #3 } {
- ( #3 )
- }
+ \peek_catcode:NTF { ~ } { } {
+ \@@_parse_bracket_or_paren_args
}
}
\end{source}
@@ -2983,10 +3075,12 @@ two columns (effectively ignoring the labeling column). Because it needs to be
expandable in order to insert the multicolumn, the final, parenthesis-enclosed
argument can not be optional (unlike for \refc{pr}).
\begin{source}
-\@@_new_ecmd:Nnn \hd { m +r() } {
+% \@@_new_ecmd:Nnn \hd { m +r() } {
+% Now uses \def syntax:
+\@@_new_ecmd:Nnn \hd { #1 ( #2 ) } {
\multicolumn{2}
{\@@_hd_preamble}
- {\@@_fmt_pr:nn{#1}{#2}}
+ {\@@_fmt_pr:n{#1}\ensuremath{(#2)}}
}
\end{source}
Finally, \refc{st} and \refc{ct} add quotes and comment delimiters,
@@ -3003,7 +3097,9 @@ respectively, to the typeset string, keeping it all in \cs{textnormal}:
\end{source}
Beyond text styling, we also have styling for entire rows, i.e., highlighting:
\begin{source}
-\NewExpandableDocumentCommand \pseudohl { } {
+% \NewExpandableDocumentCommand \pseudohl { } {
+% For backward compatibility:
+\def \pseudohl {
\rowcolor{\pseudohlcolor}
}
\end{source}
@@ -3045,7 +3141,9 @@ well).
\tex_mskip:D \l_tmpa_muskip
\box_use:N \l_tmpa_box
\tex_mskip:D \l_tmpb_muskip
- \box_use_drop:N \l_tmpa_box
+ % \box_use_drop:N \l_tmpa_box
+ % Replaced for compatibility
+ \box \l_tmpa_box
\tex_mskip:D \l_tmpa_muskip
}
\group_end:
@@ -3154,7 +3252,7 @@ typesetting the pseudocode.
ref .default:n = \l_@@_label_tl,
indent-length .tl_set:N = \l_@@_indent_length_tl,
- indent-length .initial:V = \c_novalue_tl,
+ indent-length .initial:V = \q_no_value,
indent-text .tl_set:N = \l_@@_indent_text_tl,
indent-text .initial:n = { \pseudofont\kw{else}\ },
@@ -3373,22 +3471,65 @@ latter of the two really shouldn't.\footnote{See
\msg_new:nnn { pseudo } { unknown-key } {
Unknown~key~'#1'~ignored.
}
+
+\tl_new:N \l_@@_overlay_tl
+
\keys_define:nn { pseudo } {
unknown .code:n = {
- \tl_set_eq:NN \l_tmpa_tl \l_keys_key_tl
- \regex_extract_once:nVNTF {\A (.*) < (.*) > \Z}
- \l_tmpa_tl \l_tmpa_seq {
- \seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl
- \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
+
+ \group_begin:
+
+ \tl_map_inline:Nn \l_keys_key_tl {
+
+ \tl_if_eq:nnTF { ##1 } { < } {
+
+ \int_incr:N \l_tmpa_int
+ \int_compare:nF { \l_tmpb_int == 0 } {
+ % We already found `>'!
+ % Increment again to prevent match:
+ \int_incr:N \l_tmpa_int
+ }
+
+ \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl
+ \tl_clear:N \l_tmpa_tl
+
+ } {
+
+ \tl_if_eq:nnTF { ##1 } { > } {
+
+ \int_incr:N \l_tmpb_int
+
+ \tl_set_eq:NN \l_@@_overlay_tl \l_tmpa_tl
+ \tl_clear:N \l_tmpa_tl
+
+ } {
+
+ \tl_put_right:Nn \l_tmpa_tl { ##1 }
+
+ } }
+
+ }
+
+ % A single `<' and a final, single `>'?
+ \bool_if:nTF {
+ \int_compare_p:n { \l_tmpa_int == \l_tmpb_int == 1 }
+ &&
+ \tl_if_empty_p:N \l_tmpa_tl
+ }{
+ % Match
\tl_if_blank:nF{#1} {
- \tl_put_right:Nn \l_tmpa_tl {= #1}
+ \tl_put_right:Nn \l_tmpb_tl {= #1}
}
\@@_keys_set_overlay:VnV
- \l_tmpb_tl { pseudo } \l_tmpa_tl
- }{
+ \l_@@_overlay_tl { pseudo } \l_tmpb_tl
+ } {
+ % No match
\msg_error:nnx
{ pseudo } { unknown-key } { \l_keys_path_tl }
}
+
+ \group_end:
+
}
}
\end{source}
@@ -3432,7 +3573,8 @@ setting it to zero.
If the user happens to dedent too much, we might as well be a bit forgiving,
and clamp the indent level to non-negative values:
\begin{source}
- \int_compare:nNnT \g_@@_indent_level_int > \c_zero_int {
+ % Not using \c_zero_int for compatibility
+ \int_compare:nNnT \g_@@_indent_level_int > 0 {
\int_gdecr:N \g_@@_indent_level_int
}
}
@@ -3469,7 +3611,7 @@ If starred, clear out the prefix:
\tl_gset_eq:NN \g_@@_cur_prefix_tl \pseudoprefix
}
}
-\NewDocumentCommand \@@_eol_tail { !s d<> +O{ } } {
+\NewDocumentCommand \@@_eol_tail { s d<> +O{ } } {
\@@_eol_handle_args:nnn{#1}{#2}{#3}
\end{source}
A new line is begun only if we're not at the end of the (or, at least of
@@ -3563,7 +3705,7 @@ While this is the main attraction, it's essentially just an augmented
various macros already described.
\begin{source}
-\NewDocumentEnvironment { pseudo } { !+o !s d<> +O{ } } {
+\NewDocumentEnvironment { pseudo } { +o s d<> +O{ } } {
\group_begin:
@@ -3581,7 +3723,8 @@ various macros already described.
}
\@@_set_indent_length:
- % If not manually set as compact/noncompact, set automatically:
+ % If not manually set as compact/noncompact,
+ % set automatically:
\bool_if:NF \l_@@_compact_def_bool {
\bool_set:Nn \l_@@_compact_bool {
\mode_if_horizontal_p: && \mode_if_inner_p:
diff --git a/macros/latex/contrib/pseudo/pseudo.sty b/macros/latex/contrib/pseudo/pseudo.sty
index 20859c819d..938fb4e887 100644
--- a/macros/latex/contrib/pseudo/pseudo.sty
+++ b/macros/latex/contrib/pseudo/pseudo.sty
@@ -20,8 +20,8 @@
% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
% SOFTWARE.
%
-\def \pseudoversion {1.1.2}
-\def \pseudodate {2019-07-14}
+\def \pseudoversion {1.1.3}
+\def \pseudodate {2019/10/30}
\RequirePackage{expl3}
\ProvidesExplPackage
{pseudo}
@@ -42,10 +42,8 @@
\dim_new:N \pseudoindentlength
\int_new:N \g__pseudo_indent_level_int
\int_new:N \l__pseudo_initial_indent_level_int
-\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
+\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
\cs_generate_variant:Nn \tl_set:Nn { Ne }
-\cs_generate_variant:Nn \regex_extract_once:nnNTF { nVNTF }
-\cs_generate_variant:Nn \regex_match:nnF { neF }
\cs_new:Nn \__pseudo_undef_col:n {
\tl_set_eq:cN { NC@find@ \token_to_str:N #1 } \scan_stop:
}
@@ -56,18 +54,18 @@
\cs_new:Nn \__pseudo_meta_new_cmd:NNnn {
\tl_set:Nn \l_tmpa_tl {pseudo \cs_to_str:N #2}
\exp_args:Nc
- #1 \l_tmpa_tl {#3} {#4}
+ #1 \l_tmpa_tl #3 {#4}
\cs_if_free:NT #2 {\cs_gset_eq:Nc #2 \l_tmpa_tl}
}
\cs_new:Nn \__pseudo_new_cmd:Nnn {
\__pseudo_meta_new_cmd:NNnn
- \NewDocumentCommand #1 {#2} {
+ \NewDocumentCommand #1 {{#2}} {
#3
}
}
\cs_new:Nn \__pseudo_new_ecmd:Nnn {
\__pseudo_meta_new_cmd:NNnn
- \NewExpandableDocumentCommand #1 {#2} {
+ \def #1 {#2} {
#3
}
}
@@ -89,7 +87,7 @@
}
}
\cs_new:Nn \__pseudo_set_indent_length: {
- \tl_if_novalue:VTF \l__pseudo_indent_length_tl {
+ \quark_if_no_value:VTF \l__pseudo_indent_length_tl {
\hbox_set:Nn \l_tmpa_box { \l__pseudo_indent_text_tl }
\dim_set:Nn \pseudoindentlength { \box_wd:N \l_tmpa_box }
} {
@@ -152,53 +150,44 @@
\__pseudo_b_or_bx:
\cs_if_exist:NT \@defaultsubs {
\cs_gset_eq:NN \__pseudo_b_or_bx: \bfseries
- \group_insert_after:N \__pseudo_b_or_bx:
}
\group_end:
+ \__pseudo_b_or_bx:
}
\cs_new:Nn \__pseudo_fmt_pr:n {
\textnormal{\prfont{ #1 }}
}
-\cs_new:Nn \__pseudo_fmt_pr:nn {
- \__pseudo_fmt_pr:n { #1 }
- \ensuremath{ ( #2 ) }
+\NewDocumentCommand \__pseudo_parse_paren_args { +d() } {
+ \IfNoValueF { #1 } {
+ \ensuremath{ ( #1 ) }
+ }
}
-\__pseudo_new_cmd:Nnn \pr { m !+d() } {
- \IfNoValueTF { #2 } {
- \__pseudo_fmt_pr:n { #1 }
+\NewDocumentCommand \__pseudo_parse_bracket_or_paren_args { +o } {
+ \IfNoValueTF { #1 } {
+ \__pseudo_parse_paren_args
} {
- \__pseudo_fmt_pr:nn { #1 } { #2 }
+ \ensuremath{ [ #1 ] }
+ }
+}
+\__pseudo_new_cmd:Nnn \pr { m } {
+ \__pseudo_fmt_pr:n { #1 }
+ \peek_catcode:NTF { ~ } { } {
+ \__pseudo_parse_paren_args
}
}
\cs_new:Nn \__pseudo_fmt_fn:n {
\textnormal{\fnfont{ #1 }}
}
-\cs_new:Nn \__pseudo_fmt_fn:nn {
- \__pseudo_fmt_fn:n { #1 }
- \ensuremath{ ( #2 ) }
-}
-\cs_new:Nn \__pseudo_fmt_ar:nn {
+\__pseudo_new_cmd:Nnn \fn { m } {
\__pseudo_fmt_fn:n { #1 }
- \ensuremath{ [ #2 ] }
-}
-\__pseudo_new_cmd:Nnn \fn { m !+o !+d() } {
- \IfNoValueTF { #2 } {
- \IfNoValueTF { #3 } {
- \__pseudo_fmt_fn:n { #1 }
- } {
- \__pseudo_fmt_fn:nn { #1 } { #3 }
- }
- } {
- \__pseudo_fmt_ar:nn { #1 } { #2 }
- \IfNoValueF { #3 } {
- ( #3 )
- }
+ \peek_catcode:NTF { ~ } { } {
+ \__pseudo_parse_bracket_or_paren_args
}
}
-\__pseudo_new_ecmd:Nnn \hd { m +r() } {
+\__pseudo_new_ecmd:Nnn \hd { #1 ( #2 ) } {
\multicolumn{2}
{\__pseudo_hd_preamble}
- {\__pseudo_fmt_pr:nn{#1}{#2}}
+ {\__pseudo_fmt_pr:n{#1}\ensuremath{(#2)}}
}
\__pseudo_new_cmd:Nnn \st { +m } {
\textnormal {
@@ -208,7 +197,7 @@
\textnormal {
\l__pseudo_ct_left_tl {\ctfont{#1}} \l__pseudo_ct_right_tl }
}
-\NewExpandableDocumentCommand \pseudohl { } {
+\def \pseudohl {
\rowcolor{\pseudohlcolor}
}
\__pseudo_new_dec:nn { Comment } { ct }
@@ -229,7 +218,7 @@
\tex_mskip:D \l_tmpa_muskip
\box_use:N \l_tmpa_box
\tex_mskip:D \l_tmpb_muskip
- \box_use_drop:N \l_tmpa_box
+ \box \l_tmpa_box
\tex_mskip:D \l_tmpa_muskip
}
\group_end:
@@ -281,7 +270,7 @@
ref .tl_set:N = \thepseudoline,
ref .default:n = \l__pseudo_label_tl,
indent-length .tl_set:N = \l__pseudo_indent_length_tl,
- indent-length .initial:V = \c_novalue_tl,
+ indent-length .initial:V = \q_no_value,
indent-text .tl_set:N = \l__pseudo_indent_text_tl,
indent-text .initial:n = { \pseudofont\kw{else}\ },
indent-level .int_set:N = \l__pseudo_initial_indent_level_int,
@@ -408,22 +397,42 @@
\msg_new:nnn { pseudo } { unknown-key } {
Unknown~key~'#1'~ignored.
}
+\tl_new:N \l__pseudo_overlay_tl
\keys_define:nn { pseudo } {
unknown .code:n = {
- \tl_set_eq:NN \l_tmpa_tl \l_keys_key_tl
- \regex_extract_once:nVNTF {\A (.*) < (.*) > \Z}
- \l_tmpa_tl \l_tmpa_seq {
- \seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl
- \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
+ \group_begin:
+ \tl_map_inline:Nn \l_keys_key_tl {
+ \tl_if_eq:nnTF { ##1 } { < } {
+ \int_incr:N \l_tmpa_int
+ \int_compare:nF { \l_tmpb_int == 0 } {
+ \int_incr:N \l_tmpa_int
+ }
+ \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl
+ \tl_clear:N \l_tmpa_tl
+ } {
+ \tl_if_eq:nnTF { ##1 } { > } {
+ \int_incr:N \l_tmpb_int
+ \tl_set_eq:NN \l__pseudo_overlay_tl \l_tmpa_tl
+ \tl_clear:N \l_tmpa_tl
+ } {
+ \tl_put_right:Nn \l_tmpa_tl { ##1 }
+ } }
+ }
+ \bool_if:nTF {
+ \int_compare_p:n { \l_tmpa_int == \l_tmpb_int == 1 }
+ &&
+ \tl_if_empty_p:N \l_tmpa_tl
+ }{
\tl_if_blank:nF{#1} {
- \tl_put_right:Nn \l_tmpa_tl {= #1}
+ \tl_put_right:Nn \l_tmpb_tl {= #1}
}
\__pseudo_keys_set_overlay:VnV
- \l_tmpb_tl { pseudo } \l_tmpa_tl
- }{
+ \l__pseudo_overlay_tl { pseudo } \l_tmpb_tl
+ } {
\msg_error:nnx
{ pseudo } { unknown-key } { \l_keys_path_tl }
}
+ \group_end:
}
}
\cs_new:Nn \__pseudo_set:n { \keys_set:nn { pseudo } { #1 } }
@@ -431,7 +440,7 @@
\int_gincr:N \g__pseudo_indent_level_int
}
\cs_new:Nn \__pseudo_dec_indent: {
- \int_compare:nNnT \g__pseudo_indent_level_int > \c_zero_int {
+ \int_compare:nNnT \g__pseudo_indent_level_int > 0 {
\int_gdecr:N \g__pseudo_indent_level_int
}
}
@@ -448,7 +457,7 @@
\tl_gset_eq:NN \g__pseudo_cur_prefix_tl \pseudoprefix
}
}
-\NewDocumentCommand \__pseudo_eol_tail { !s d<> +O{ } } {
+\NewDocumentCommand \__pseudo_eol_tail { s d<> +O{ } } {
\__pseudo_eol_handle_args:nnn{#1}{#2}{#3}
\peek_meaning_ignore_spaces:NF \end {
\pseudoeol
@@ -490,7 +499,7 @@
}
}
}
-\NewDocumentEnvironment { pseudo } { !+o !s d<> +O{ } } {
+\NewDocumentEnvironment { pseudo } { +o s d<> +O{ } } {
\group_begin:
\__pseudo_gsave_as:NN \\ \c__pseudo_saved_cr_cs
\__pseudo_gsave_as:NN \= \c__pseudo_saved_eq_cs
diff --git a/macros/latex/contrib/pseudo/test/pseudotest.tex b/macros/latex/contrib/pseudo/test/pseudotest.tex
new file mode 100644
index 0000000000..c95a03ab3f
--- /dev/null
+++ b/macros/latex/contrib/pseudo/test/pseudotest.tex
@@ -0,0 +1,209 @@
+\documentclass[a4paper]{article}
+
+\def\id{my previous definition}
+
+\usepackage{pseudo}
+
+\title{Tests for the \textsf{pseudo} package}
+\author{Magnus Lie Hetland}
+
+\begin{document}
+\maketitle
+
+\noindent
+This document is an attempt to use the features of the \textsf{pseudo} package
+without any other dependencies (as opposed to the \textsf{pseudo}
+documentation), e.g., to determine whether it's usable with an older \TeX\
+distribution.
+
+\section*{Fonts and styling}
+
+The previous definition of \verb|\id| is: \id\\
+\let\id\pseudoid
+
+\bigskip
+\noindent
+\begin{tabular}{@{}ll@{}}
+\verb|\cmd| & \verb|\pseudocmd|\\
+\kw{while} & \pseudokw{while}\\
+\cn{false} & \pseudocn{false}\\
+\id{rank} & \pseudoid{rank}\\
+\st{Hello!} & \pseudost{Hello!}\\
+\pr{Euclid}(a b) & \pseudopr{Euclid}(a b)\\
+\fn{length}(A) & \pseudofn{length}(A)\\
+\fn{length}[A] & \pseudofn{length}[A]\\
+\ct{Important!} & \pseudoct{Important!}\\
+\end{tabular}
+
+{\pseudoset{
+ kwfont=KW:~,
+ cnfont=CN:~,
+ idfont=ID:~,
+ stfont=ST:~,
+ st-left=[,
+ st-right=],
+ prfont=PR:~,
+ fnfont=FN:~,
+ ctfont=CT:~,
+ ct-left=[,
+ ct-right=],
+}
+\bigskip
+\noindent
+\begin{tabular}{@{}ll@{}}
+\verb|\cmd| & \verb|\pseudocmd|\\
+\kw{while} & \pseudokw{while}\\
+\cn{false} & \pseudocn{false}\\
+\id{rank} & \pseudoid{rank}\\
+\st{Hello!} & \pseudost{Hello!}\\
+\pr{Euclid}(a b) & \pseudopr{Euclid}(a b)\\
+\fn{length}(A) & \pseudofn{length}(A)\\
+\fn{length}[A] & \pseudofn{length}[A]\\
+\ct{Important!} & \pseudoct{Important!}\\
+\end{tabular}}
+
+% The one on the line is ignored:
+\begin{pseudo}[hpad, dim-color=red, kw][dim-color=blue, dim]
+ foo \\[hl]
+ bar
+\end{pseudo}
+
+\noindent
+Should be \verb|\fn{test}[A]| followed by \verb|(B)| in normalfont:
+\fn{test}[A](B)
+
+\bigskip
+\noindent
+Should be \verb|\fn{test}(A)| followed by \verb|[B]| in normalfont:
+\fn{test}(A)[B]
+
+\section*{Declarations and definitions}
+
+\DeclarePseudoComment \Imp {Important!}
+\DeclarePseudoConstant \False {false}
+\DeclarePseudoFunction \Ln {length}
+\DeclarePseudoIdentifier \Rank {rank}
+\DeclarePseudoKeyword \While {while}
+\DeclarePseudoNormal \Error {halt with an error message}
+\DeclarePseudoProcedure \Euclid {Euclid}
+\DeclarePseudoString \Hello {Hello!}
+
+\begin{pseudo*}
+$x = y$ \qquad \Imp \\
+\False \\
+\Ln(A) or \Ln[A] \\
+\Rank \\
+\While \\
+\Error \\
+\Euclid(a, b) \\
+\Hello
+\end{pseudo*}
+
+\pseudodefinestyle{mystyle}{
+ font = \Large
+}
+
+\begin{pseudo*}[mystyle]
+Hello, world!
+\end{pseudo*}
+
+\section*{Notation}
+
+$A[1\..n] \== B[2\..n+1]$ \\
+$A[1\dts n] \eqs B[2\dts n+1]$ \\
+
+\noindent
+$\id{foo-bar:baz}$
+
+\noindent
+{\pseudoset{eqs-pad=10mu, eqs-scale=2, eqs-sep=5mu}$x\==y$}
+
+\begin{pseudo*}[kw]
+keyword \tn{normal} keyword \nf normal
+\end{pseudo*}
+
+\section*{Numbering and indentation}
+
+\begin{pseudo}[start=2, label=(\Roman*), label-align=l, ref=\Roman*]
+ one \\
+ two \label{linetwo} \\*
+? & three \\
+\end{pseudo}
+
+\begin{pseudo}*
+\hd{Header}(\id{args}) \\
+first line
+\end{pseudo}
+
+\noindent
+Reference to line~\ref{linetwo}.
+
+\begin{pseudo}[hpad=1cm, hsep=.1cm, indent-length=2cm, indent-level=1]
+A \\+
+B \\++
+C \\-
+D \\---
+E
+\end{pseudo}
+
+\begin{pseudo*}[indent-text={otherwise\ }]
+if this \\+
+ then that \\-
+otherwise something else
+\end{pseudo*}
+
+\section*{Layout}
+
+Here's a compact piece of pseudocode:
+\begin{pseudo*}[kw, compact]
+print \st{42}
+\end{pseudo*}
+
+\noindent
+Automatically compact:
+\fbox{\begin{pseudo*}
+In a box.
+\end{pseudo*}}
+
+\begin{pseudo}[left-margin=\parindent]
+indented
+\end{pseudo}
+
+\begin{pseudo}[line-height=2]
+lines \\
+far \\
+apart
+\end{pseudo}
+
+\begin{pseudo}[parskip=1cm, topsep=1cm, partopsep=1cm]
+custom parskip, topsep and partopsep
+\end{pseudo}
+
+\section*{Overlays etc.}
+
+Ignored outside \textsf{beamer}.
+
+\begin{pseudo}[pause, kwfont<3>=\nf, unknown<3>=42]
+ foo \\<2>
+ % bar \\ <3> % Dosn't work in older xparse versions
+ baz
+\end{pseudo}
+
+% Things that could also be tested:
+% begin-tabular
+% bol
+% bol-append
+% bol-prepend
+% eol
+% eol-append
+% eol-prepend
+% preamble
+% prefix
+% pseudoeq
+% pseudoslash
+% setup
+% setup-append
+% setup-prepend
+% starred
+
+\end{document}
diff --git a/macros/latex/contrib/subfiles/subfiles.dtx b/macros/latex/contrib/subfiles/subfiles.dtx
index 39058604a0..201cfd6010 100644
--- a/macros/latex/contrib/subfiles/subfiles.dtx
+++ b/macros/latex/contrib/subfiles/subfiles.dtx
@@ -23,13 +23,13 @@
%
%<*driver>
% \fi
-\ProvidesFile{subfiles.dtx}[2019/10/25 v1.4 Multi-file projects]
+\ProvidesFile{subfiles.dtx}[2019/10/30 v1.5 Multi-file projects]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{subfiles.dtx}
\title{A Document Class and a Package\\for Handling Multi-File Projects}
-\date{\filedate{}}
- \author{Federico Garcia, Gernot Salzer}
+\date{v1.5 2019/10/30}
+\author{Federico Garcia, Gernot Salzer}
\begin{document}
\maketitle
@@ -61,7 +61,7 @@
%
% \section{Basic usage}
%
-% The main file, i.e., the file with the preamble to be shared with the subfiles, has to load the package |subfiles| \emph{at the very end of the preamble}:
+% The main file, i.e., the file with the preamble to be shared with the subfiles, has to load the package |subfiles| \emph{at the end of the preamble}:
% \begin{center}
% \begin{tabular}{l}
% |\usepackage{subfiles}|\\
@@ -171,14 +171,36 @@
% \end{tabular}
% \end{center}
% Then each of the three files can be typeset individually in its respective directory, where \LaTeX\ is able to locate all included text files and images.
+%
+% \subsection{Including files instead of inputting them}
+%
+% In plain \LaTeX, you can use either |\input| or |\include| to load a file.
+% In most cases the first is appropriate, but sometimes there are reasons to prefer the latter.
+% Internally, the |\subfile| command uses |\input|.
+% For those cases where you need |\include|, the package provides the command
+% \begin{center}
+% |\subfileinclude{|\meta{subfile\_name}|}|
+% \end{center}
+%
+% \subsection{Bibliographies}
+%
+% Manual bibliographies with the |thebibliography| environment work as usual.
+% Problems may arise if external programs like |bibtex| or |biber| are used to generate the bibliography, in particular when the bibliographies are distributed over subfiles.
+% Here are some hints on how it may work.
+% \begin{itemize}
+% \item Make sure the command |\bibliography| is executed after loading the |subfiles| package.
+% Put the command between |\usepackage{subfiles}| and |\begin{document}| or somewhere into the text part.
+% \item When you use the package |biblatex|, and programs like |biber| complain about not being able to find the bibliography files, use |\bibliography| instead of |\addbibresource| for local files (observing the hint above).
+% \end{itemize}
+% The |subfiles| package has been tested with the packages |biblatex|, |bibunits|, and |chapterbib| as well as the external programs |bibtex| and |biber|.
%
-% \subsection{Additional definitions for subfiles}
+% \subsection{Unusual locations for placing definitions and text}
%
% Usually all definitions and packages required by the subfiles should go into the preamble of the main file.
-% There are some places, though, where one might consider adding definitions for the subfiles.
+% There are some further locations, though, where one might consider adding definitions and text.
%
% \paragraph{Code after the end of the main document} is added to the preamble of the subfiles, but is ignored when typesetting the main file.
-% This happens because a subfile typeset by itself does not really take the preamble of the main file, but \emph{everything outside} of \verb|\begin{document}| and \verb|\end{document}|.
+% This happens because a subfile typeset by itself does not really take the preamble of the main file, but \emph{everything outside} of |\begin{document}| and |\end{document}|.
% This has two consequences: \emph{a)}~the user can add some commands to be processed as part of the preamble only when the subfiles are typeset by themselves; but also \emph{b)}~the user has to be careful even \emph{after} |\end{document}| in the main file, for any syntax error there will ruin the \LaTeX ing of the subfile(s).
%
% \paragraph{Code in the preamble of a subfile} is processed as part of the text when typesetting the main file, but as part of the preamble when typesetting the subfile.
@@ -186,11 +208,16 @@
% One should also keep in mind that each subfile is input within a group, so definitions made within may not work outside.
% A good practice when using |subfiles| (and also when not using it) is to make any definitions in the preamble of the main file, avoiding confusion and allowing the reader to find them easily.
%
+% \paragraph{Code after the end of a subfile} is treated like the code preceding it when the subfile is loaded from the main file, but is ignored when typesetting the subfile.
+% The code after |\end{document}| behaves as if following the |\subfile| command in the main file, except that it is still part of the group enclosing the subfile.
+% As a consequence, empty lines at the end of the subfile lead to a new paragraph in the main document, even if the |\subfile| command is immediately followed by text.
+%
% \subsection{Avoiding extra spaces}
%
% Sometimes you may want to load the contents of a subfile without white space separating it from the contents of the main file.
-% In this respect |\subfile| behaves like |\input|.
+% In this respect |\subfile| behaves similar to |\input|.
% Any space or newline before and after the |\subfile| command will appear in the typeset document, as will any white space between the last character of the subfile and |\end{document}|.
+% Moreover, any stuff after |\end{document}| will end up in the main document, including spurious empty lines, which may lead to a new paragraph.
% Therefore, to load the contents of a subfile without intervening spaces, you have either to add comment signs:
% \begin{center}
% \begin{tabular}[t]{l}
@@ -210,6 +237,7 @@
% |\begin{document}|\\
% |contents of subfile%|\\
% |\end{document}|\\
+% |% No empty lines after \end{document}!|\\
% \hline
% \end{tabular}
% \end{center}
@@ -228,16 +256,30 @@
% \section{Version history}
%
% \begin{description}
-% \item[v1.1 (FG):]
-% Start of version history.
-% \item[v1.2 (GS):]
-% The |subfiles| package becomes compatible with classes and packages that modify the |\document| command, like the class |revtex4|.
-% \item[v1.3 (GS):]
-% Use of |import| package to handle directory hierarchies.
-% |\ignorespaces| added to avoid spurious spaces.
-% Incompatibility with commands removed that expect |\document| to be equal to |\@onlypreamble| after the preamble (thanks to Eric Domenjoud for analysing the problem).
-% \item[v1.3 (GS):]
-% Incompatibility with |memoir| class and |comment| package removed.
+% \item[v1.1:]
+% Initial version by Federico Garcia. Further versions by Gernot Salzer.
+% \item[v1.2:] \mbox{}
+% \begin{itemize}
+% \item Incompatibility with classes and packages removed that modify the |\document| command, like the class |revtex4|.
+% \end{itemize}
+% \item[v1.3:] \mbox{}
+% \begin{itemize}
+% \item Use of |import| package to handle directory hierarchies.
+% \item |\ignorespaces| added to avoid spurious spaces.
+% \item Incompatibility with commands removed that expect |\document| to be equal to |\@onlypreamble| after the preamble (thanks to Eric Domenjoud for analysing the problem).
+% \end{itemize}
+% \item[v1.4:] \mbox{}
+% \begin{itemize}
+% \item Incompatibility with |memoir| class and |comment| package removed.
+% \item Bug `|\unskip| cannot be used in vertical mode` fixed.
+% \end{itemize}
+% \item[v1.5:] \mbox{}
+% \begin{itemize}
+% \item Command |\subfileinclude| added.
+% \item Basic support for |bibtex| related bibliographies in subfiles added.
+% Seems to suffice also for sub-bibliographies with the package |chapterbib|.
+% \item Support for sub-bibliographies with package |bibunits| added.
+% \end{itemize}
% \end{description}
%
%\section{The Implementation}
@@ -245,10 +287,10 @@
% \begin{macrocode}
%<*class>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{subfiles}[2019/10/25 v1.4 Multi-file projects (class)]
+\ProvidesClass{subfiles}[2019/10/30 v1.5 Multi-file projects (class)]
\DeclareOption*{\typeout{Preamble taken from file `\CurrentOption'}%
\let\preamble@file\CurrentOption}
-\ProcessOptions
+\ProcessOptions
% \end{macrocode}
%
% We start by saving the regular \LaTeX\ definition of |\documentclass|:
@@ -345,7 +387,7 @@
% \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{subfiles}[2019/10/25 v1.4 Multi-file projects (package)]
+\ProvidesPackage{subfiles}[2019/10/30 v1.5 Multi-file projects (package)]
\DeclareOption*{\PackageWarning{\CurrentOption ignored}}
\ProcessOptions
% \end{macrocode}
@@ -400,12 +442,29 @@
% After executing e.g.\ |\subfiles@split{../dir1/dir2/file.tex}|, the commands |\subfiles@dir| and |\subfiles@base| expand to |../dir1/dir2/| and |file.tex|, respectively.
%
% \DescribeMacro{\subfile}
-% The command |\subfile| first redefines |\documentclass| and the |document| environment to do nothing.
-% To avoid spurious spaces we |\ignorespaces|.
-% Moreover, we have to set |\document| to the value it usually has after the end of the preamble, since some commands check this value and may raise an error.
+% The command |\subfile| specifies the command |\subimport| for |\input|ing the subfile, and then calls |\subfiles@subfile|.
+% \begin{macrocode}
+\newcommand\subfile{%
+ \let\subfiles@loadfile\subimport
+ \subfiles@subfile
+}
+% \end{macrocode}
+%
+% \DescribeMacro{\subfileinclude}
+% The command |\subfileinclude| specifies the command |\subincludefrom| for |\include|ing the subfile, and then calls |\subfiles@subfile|.
+% \begin{macrocode}
+\newcommand\subfileinclude{%
+ \let\subfiles@loadfile\subincludefrom
+ \subfiles@subfile
+}
+% \end{macrocode}
+%
+% The main functionality of the two |\subfile| commands is implemented in |\subfiles@subfile|.
+% It redefines |\documentclass| and the |document| environment to do nothing except avoiding spurious spaces.
+% Moreover, |\document| has to be set to the value it usually has after the end of the preamble, since some commands check this value and may raise an error otherwise.
%
% \begin{macrocode}
-\newcommand\subfile[1]{%
+\newcommand\subfiles@subfile[1]{%
\begingroup
\renewcommand\documentclass[2][subfiles]{\ignorespaces}%
\renewenvironment{document}{%
@@ -415,14 +474,46 @@
\@ignoretrue
}%
% \end{macrocode}
-%
-% Now we split the file name into path and base name and |\subimport| the file.
+% Now we split the file name into path and base name and load the file.
%
% \begin{macrocode}
\subfiles@split{#1}%
- \subimport{\subfiles@dir}{\subfiles@base}%
+ \subfiles@loadfile{\subfiles@dir}{\subfiles@base}%
\endgroup
}
% \end{macrocode}
%
% Note that the changes to |\documentclass| and the |document| environment happen \emph{within a group}, so they are undone after inclusion of the subfile.
+%
+% To let external programs find files, we have to add the |\import@path| to file names.
+% This is accomplished with the command |\subfiles@addimportpath|.
+% \begin{macrocode}
+\def\subfiles@addimportpath#1{%
+ \def\subfiles@filelist{}%
+ \def\subfiles@sep{}%
+ \@for\subfiles@filename:=#1\do{%
+ \edef\subfiles@filelist{\subfiles@filelist\subfiles@sep\import@path\subfiles@filename}%
+ \def\subfiles@sep{,}%
+ }
+}
+% \end{macrocode}
+%
+% We redefine the |\bibliography| command such that the import path is added to the file names before the original command is called.
+% \begin{macrocode}
+\let\subfiles@bibliography\bibliography
+\renewcommand\bibliography[1]{%
+ \subfiles@addimportpath{#1}%
+ \expandafter\subfiles@bibliography\expandafter{\subfiles@filelist}%
+}
+% \end{macrocode}
+%
+% The |bibunits| package uses its own command to specify bib files, we have to patch it separately.
+% \begin{macrocode}
+\@ifpackageloaded{bibunits}{%
+ \let\subfiles@putbib\@putbib
+ \def\@putbib[#1]{%
+ \subfiles@addimportpath{#1}%
+ \expandafter\subfiles@putbib\expandafter[\subfiles@filelist]%
+ }%
+}{}
+% \end{macrocode}
diff --git a/macros/latex/contrib/subfiles/subfiles.pdf b/macros/latex/contrib/subfiles/subfiles.pdf
index a7cd81f7f7..33f39c049e 100644
--- a/macros/latex/contrib/subfiles/subfiles.pdf
+++ b/macros/latex/contrib/subfiles/subfiles.pdf
Binary files differ