From e22515f37100cb2802961f6a7cb76c8a22a118db Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 11 Dec 2019 03:01:04 +0000 Subject: CTAN sync 201912110301 --- macros/generic/witharrows/witharrows-french.pdf | Bin 257959 -> 257996 bytes macros/generic/witharrows/witharrows-french.tex | 48 +- macros/generic/witharrows/witharrows.dtx | 145 +- macros/generic/witharrows/witharrows.pdf | Bin 587398 -> 589390 bytes macros/latex/contrib/alphalph/README.md | 9 + macros/latex/contrib/alphalph/alphalph.dtx | 1535 ++++++++++ macros/latex/contrib/alphalph/alphalph.pdf | Bin 0 -> 354103 bytes macros/latex/contrib/askinclude/README.md | 10 + macros/latex/contrib/askinclude/askinclude.dtx | 1895 +++++++++++++ macros/latex/contrib/askinclude/askinclude.pdf | Bin 0 -> 594397 bytes macros/latex/contrib/bibleref/CHANGES | 3 + macros/latex/contrib/bibleref/bibleref.dtx | 192 +- macros/latex/contrib/bibleref/bibleref.pdf | Bin 285284 -> 286825 bytes macros/latex/contrib/bibleref/makefile | 1 - .../contrib/bibleref/samples/sample-categories.pdf | Bin 12427 -> 12303 bytes .../contrib/bibleref/samples/sample-indextools.pdf | Bin 9544 -> 9463 bytes .../latex/contrib/bibleref/samples/sample-xidx.pdf | Bin 19945 -> 19439 bytes macros/latex/contrib/bibleref/samples/sample.pdf | Bin 40093 -> 39426 bytes macros/latex/contrib/bitset/README.md | 11 + macros/latex/contrib/bitset/bitset.dtx | 2957 ++++++++++++++++++++ macros/latex/contrib/bitset/bitset.pdf | Bin 0 -> 624889 bytes macros/latex/contrib/catchfile/README.md | 9 + macros/latex/contrib/catchfile/catchfile.dtx | 777 +++++ macros/latex/contrib/catchfile/catchfile.pdf | Bin 0 -> 298510 bytes macros/latex/contrib/listingsutf8/README.md | 11 + macros/latex/contrib/listingsutf8/listingsutf8.dtx | 673 +++++ macros/latex/contrib/listingsutf8/listingsutf8.pdf | Bin 0 -> 298795 bytes macros/latex/contrib/oberdiek/README.txt | 2 +- macros/latex/contrib/oberdiek/aliascnt.pdf | Bin 293099 -> 293095 bytes macros/latex/contrib/oberdiek/alphalph.dtx | 1535 ---------- macros/latex/contrib/oberdiek/askinclude.dtx | 1947 ------------- macros/latex/contrib/oberdiek/askinclude.pdf | Bin 593900 -> 0 bytes macros/latex/contrib/oberdiek/auxhook.pdf | Bin 285266 -> 285845 bytes macros/latex/contrib/oberdiek/bigintcalc.pdf | Bin 467906 -> 468260 bytes macros/latex/contrib/oberdiek/bitset.dtx | 2957 -------------------- macros/latex/contrib/oberdiek/bmpsize.pdf | Bin 497867 -> 498211 bytes macros/latex/contrib/oberdiek/catchfile.dtx | 777 ----- macros/latex/contrib/oberdiek/centernot.pdf | Bin 274864 -> 275199 bytes macros/latex/contrib/oberdiek/chemarr.pdf | Bin 288654 -> 289226 bytes macros/latex/contrib/oberdiek/classlist.pdf | Bin 271621 -> 271947 bytes macros/latex/contrib/oberdiek/colonequals.pdf | Bin 284627 -> 284949 bytes macros/latex/contrib/oberdiek/dvipscol.pdf | Bin 269326 -> 269922 bytes macros/latex/contrib/oberdiek/engord.pdf | Bin 318562 -> 319151 bytes macros/latex/contrib/oberdiek/enparen.pdf | Bin 304863 -> 305218 bytes macros/latex/contrib/oberdiek/eolgrab.pdf | Bin 316822 -> 317170 bytes macros/latex/contrib/oberdiek/etexcmds.pdf | Bin 300241 -> 300824 bytes macros/latex/contrib/oberdiek/fibnum.pdf | Bin 354313 -> 354648 bytes macros/latex/contrib/oberdiek/flags.pdf | Bin 283637 -> 283961 bytes macros/latex/contrib/oberdiek/gettitlestring.pdf | Bin 318743 -> 318747 bytes macros/latex/contrib/oberdiek/holtxdoc.dtx | 27 +- macros/latex/contrib/oberdiek/holtxdoc.pdf | Bin 305359 -> 306330 bytes macros/latex/contrib/oberdiek/hopatch.pdf | Bin 293225 -> 293225 bytes macros/latex/contrib/oberdiek/hycolor.pdf | Bin 364633 -> 364626 bytes macros/latex/contrib/oberdiek/hypbmsec.pdf | Bin 289747 -> 290353 bytes macros/latex/contrib/oberdiek/hypcap.pdf | Bin 284122 -> 284122 bytes macros/latex/contrib/oberdiek/hypdestopt.pdf | Bin 317677 -> 318258 bytes macros/latex/contrib/oberdiek/hypdoc.pdf | Bin 319844 -> 320178 bytes macros/latex/contrib/oberdiek/hypgotoe.pdf | Bin 285090 -> 285077 bytes macros/latex/contrib/oberdiek/hyphsubst.pdf | Bin 299858 -> 300446 bytes macros/latex/contrib/oberdiek/ifdraft.pdf | Bin 265294 -> 265890 bytes macros/latex/contrib/oberdiek/iflang.pdf | Bin 314990 -> 314990 bytes macros/latex/contrib/oberdiek/intcalc.pdf | Bin 431640 -> 431637 bytes macros/latex/contrib/oberdiek/kvdefinekeys.pdf | Bin 295786 -> 296060 bytes macros/latex/contrib/oberdiek/kvsetkeys.pdf | Bin 375389 -> 375389 bytes macros/latex/contrib/oberdiek/listingsutf8.dtx | 675 ----- macros/latex/contrib/oberdiek/listingsutf8.pdf | Bin 298594 -> 0 bytes macros/latex/contrib/oberdiek/ltxcmds.pdf | Bin 394188 -> 394196 bytes macros/latex/contrib/oberdiek/oberdiek-bundle.bib | 42 - macros/latex/contrib/oberdiek/oberdiek.ins | 10 +- macros/latex/contrib/oberdiek/oberdiek.pdf | Bin 345578 -> 319133 bytes macros/latex/contrib/oberdiek/oberdiek.tex | 95 +- macros/latex/contrib/oberdiek/pagegrid.pdf | Bin 311600 -> 311938 bytes macros/latex/contrib/oberdiek/pagesel.pdf | Bin 312192 -> 312194 bytes macros/latex/contrib/oberdiek/pdfcol.pdf | Bin 302693 -> 303046 bytes macros/latex/contrib/oberdiek/pdfcolfoot.pdf | Bin 294403 -> 294724 bytes macros/latex/contrib/oberdiek/pdfcolparallel.pdf | Bin 319986 -> 320329 bytes macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf | Bin 308006 -> 308338 bytes macros/latex/contrib/oberdiek/pdfcrypt.pdf | Bin 311564 -> 311898 bytes macros/latex/contrib/oberdiek/pdfescape.dtx | 1533 ---------- macros/latex/contrib/oberdiek/pdfrender.pdf | Bin 382955 -> 383290 bytes macros/latex/contrib/oberdiek/picture.dtx | 768 ----- macros/latex/contrib/oberdiek/protecteddef.pdf | Bin 307773 -> 308115 bytes macros/latex/contrib/oberdiek/refcount.pdf | Bin 326895 -> 326895 bytes macros/latex/contrib/oberdiek/resizegather.dtx | 2 +- macros/latex/contrib/oberdiek/resizegather.pdf | Bin 517568 -> 517717 bytes macros/latex/contrib/oberdiek/rotchiffre.pdf | Bin 317164 -> 317497 bytes macros/latex/contrib/oberdiek/scrindex.pdf | Bin 283891 -> 283886 bytes macros/latex/contrib/oberdiek/selinput.dtx | 853 ------ macros/latex/contrib/oberdiek/setouterhbox.pdf | Bin 330129 -> 330126 bytes macros/latex/contrib/oberdiek/settobox.pdf | Bin 293548 -> 293875 bytes macros/latex/contrib/oberdiek/soulutf8.pdf | Bin 352081 -> 352082 bytes macros/latex/contrib/oberdiek/stackrel.pdf | Bin 281746 -> 282341 bytes macros/latex/contrib/oberdiek/stampinclude.pdf | Bin 277765 -> 278115 bytes macros/latex/contrib/oberdiek/tabularht.pdf | Bin 331314 -> 331646 bytes macros/latex/contrib/oberdiek/tabularkv.pdf | Bin 254709 -> 255279 bytes macros/latex/contrib/oberdiek/telprint.pdf | Bin 303828 -> 303826 bytes macros/latex/contrib/oberdiek/thepdfnumber.pdf | Bin 347238 -> 347573 bytes macros/latex/contrib/oberdiek/twoopt.pdf | Bin 274422 -> 275011 bytes macros/latex/contrib/oberdiek/uniquecounter.pdf | Bin 289988 -> 290336 bytes macros/latex/contrib/pdfescape/README.md | 10 + macros/latex/contrib/pdfescape/pdfescape.dtx | 1530 ++++++++++ macros/latex/contrib/pdfescape/pdfescape.pdf | Bin 0 -> 346644 bytes macros/latex/contrib/picture/README.md | 11 + macros/latex/contrib/picture/picture.dtx | 772 +++++ macros/latex/contrib/picture/picture.pdf | Bin 0 -> 295737 bytes macros/latex/contrib/selinput/README.md | 9 + macros/latex/contrib/selinput/selinput.dtx | 851 ++++++ macros/latex/contrib/selinput/selinput.pdf | Bin 0 -> 536592 bytes 108 files changed, 11382 insertions(+), 11300 deletions(-) create mode 100644 macros/latex/contrib/alphalph/README.md create mode 100644 macros/latex/contrib/alphalph/alphalph.dtx create mode 100644 macros/latex/contrib/alphalph/alphalph.pdf create mode 100644 macros/latex/contrib/askinclude/README.md create mode 100644 macros/latex/contrib/askinclude/askinclude.dtx create mode 100644 macros/latex/contrib/askinclude/askinclude.pdf create mode 100644 macros/latex/contrib/bitset/README.md create mode 100644 macros/latex/contrib/bitset/bitset.dtx create mode 100644 macros/latex/contrib/bitset/bitset.pdf create mode 100644 macros/latex/contrib/catchfile/README.md create mode 100644 macros/latex/contrib/catchfile/catchfile.dtx create mode 100644 macros/latex/contrib/catchfile/catchfile.pdf create mode 100644 macros/latex/contrib/listingsutf8/README.md create mode 100644 macros/latex/contrib/listingsutf8/listingsutf8.dtx create mode 100644 macros/latex/contrib/listingsutf8/listingsutf8.pdf delete mode 100644 macros/latex/contrib/oberdiek/alphalph.dtx delete mode 100644 macros/latex/contrib/oberdiek/askinclude.dtx delete mode 100644 macros/latex/contrib/oberdiek/askinclude.pdf delete mode 100644 macros/latex/contrib/oberdiek/bitset.dtx delete mode 100644 macros/latex/contrib/oberdiek/catchfile.dtx delete mode 100644 macros/latex/contrib/oberdiek/listingsutf8.dtx delete mode 100644 macros/latex/contrib/oberdiek/listingsutf8.pdf delete mode 100644 macros/latex/contrib/oberdiek/pdfescape.dtx delete mode 100644 macros/latex/contrib/oberdiek/picture.dtx delete mode 100644 macros/latex/contrib/oberdiek/selinput.dtx create mode 100644 macros/latex/contrib/pdfescape/README.md create mode 100644 macros/latex/contrib/pdfescape/pdfescape.dtx create mode 100644 macros/latex/contrib/pdfescape/pdfescape.pdf create mode 100644 macros/latex/contrib/picture/README.md create mode 100644 macros/latex/contrib/picture/picture.dtx create mode 100644 macros/latex/contrib/picture/picture.pdf create mode 100644 macros/latex/contrib/selinput/README.md create mode 100644 macros/latex/contrib/selinput/selinput.dtx create mode 100644 macros/latex/contrib/selinput/selinput.pdf (limited to 'macros') diff --git a/macros/generic/witharrows/witharrows-french.pdf b/macros/generic/witharrows/witharrows-french.pdf index 5460b3fb46..0a045846a7 100644 Binary files a/macros/generic/witharrows/witharrows-french.pdf and b/macros/generic/witharrows/witharrows-french.pdf differ diff --git a/macros/generic/witharrows/witharrows-french.tex b/macros/generic/witharrows/witharrows-french.tex index 1c2f8481c8..f57d0a28d2 100644 --- a/macros/generic/witharrows/witharrows-french.tex +++ b/macros/generic/witharrows/witharrows-french.tex @@ -18,7 +18,7 @@ \usetikzlibrary{calc} \usepackage[only,llbracket,rrbracket]{stmaryrd} -% We use \MakeShortVerb of shortvrb and not \DefineShortVrb of fancyvrb +% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb % because we don't want the contents of short verbatim colored in gray \usepackage{shortvrb} \MakeShortVerb{\|} @@ -32,21 +32,23 @@ \titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex} \titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex} -\usepackage{fncylab} % à supprimer en 2020 + \labelformat{equation}{(#1)} -\def\interitem{\vskip 7mm plus 2 mm minus 3mm} +\def\interitem{\vspace{7mm plus 2 mm minus 3mm}} \def\emphase{\bgroup\color{RoyalPurple}\let\next=} \skip \footins = 2 \bigskipamount \usepackage[hyperfootnotes = false]{hyperref} -\hypersetup{ - pdfinfo = { - Title = { L’extension witharrows }, - Subject = { Une extension pour plain-TeX et LaTeX } , - Author = { F. Pantigny } +\hypersetup + { + pdfinfo = + { + Title = L’extension witharrows , + Subject = Une extension pour plain-TeX et LaTeX , + Author = F. Pantigny } } @@ -122,7 +124,7 @@ La commande |\Arrow| a plusieurs options. Ces options peuvent être placées ent l'argument obligatoire. L'option |jump| indique le nombre\footnote{Il n'est pas possible de donner une valeur négative à |jump|. -Voir plus loin (p.~\pageref{Backwards}) la manière de tracer une flèche qui remonte.} de rangées que la flèche doit sauter (la valeur par défaut est, bien +Voir plus loin (p.~\pageref{Backwards}) la manière de tracer une flèche qui remonte.} de rangées que la flèche doit sauter (la valeur initiale est, bien entendu,~$1$). @@ -158,7 +160,7 @@ A & = \bigl((a+b)+1\bigr)^2 \Arrow{}\Arrow{}[jump=2] \\ \interitem L'option |xoffset| décale la flèche vers la droite (habituellement, on ne souhaite pas que les flèches soient -collées au texte). La valeur par défaut de |xoffset| est de $3$~mm. +collées au texte). La valeur initiale de |xoffset| est de $3$~mm. \begin{Verbatim} $\begin{WithArrows} A & = \bigl((a+b)+1\bigr)^2 @@ -468,7 +470,7 @@ la page~\pageref{NestedEnv}. Jusqu'à présent, nous n'avons utilisé l'environnement |{WithArrows}| qu'avec deux colonnes. Néanmoins, il est possible de l'utiliser avec un nombre arbitraire de colonnes grâce à l'option |format|. La valeur donnée à cette option est similaire au préambule d'un environnement |{array}|: il s'agit d'une séquence de lettres |r|, |c| et -|l|. La valeur par défaut de cette option |format| est, en fait, |rl|. +|l|. La valeur initiale de cette option |format| est, en fait, |rl|. \bigskip @@ -834,7 +836,7 @@ x+2y & = 0 \\ \interitem De même que l'environnement |{aligned}|, |{WithArrows}| a une option de placement qui peut prendre les valeurs |t|, -|c| ou |b|. Néanmoins, la valeur par défaut n'est pas |c| mais |t|. Si on le souhaite, il est possible d'avoir la +|c| ou |b|. Néanmoins, la valeur initiale n'est pas |c| mais |t|. Si on le souhaite, il est possible d'avoir la valeur |c| comme valeur par défaut en utilisant l'instruction |\WithArrowsOptions{c}| au début du document. % \begin{Verbatim} @@ -1373,7 +1375,7 @@ A & = A_1 \Arrow{première étape} \\ \bigskip Avec l'option |fleqn|, l'environnement est composé calé à gauche (d'une manière similaire à l'option |fleqn| des classes standard de LaTeX). Dans ce cas, la marge gauche peut être réglée avec -l'option |mathindent| (qui a un nom inspiré du paramètre |\mathindent| de LaTeX). La valeur par défaut +l'option |mathindent| (qui a un nom inspiré du paramètre |\mathindent| de LaTeX). La valeur initiale pour cette option est de 25~pt. \begin{Verbatim} @@ -1623,11 +1625,11 @@ suivant.\footnote{L'environnement |{cases}| de l'\pkg{amsmath} permet de réalis \end{DispWithArrows} \interitem -Dans l'exemple suivant, on sous-numérote les équations d'un système avec l'option |subnumerate| (disponible +Dans l'exemple suivant, on sous-numérote les équations d'un système avec l'option |subequations| (disponible quand l'|amsmath| est chargé). \begin{Verbatim} -\begin{DispWithArrows}~emphase#< \label{système} (\ref*{système}) \Leftrightarrow >@% +\begin{DispWithArrows}~emphase#< \label{système} \ref*{système} \Leftrightarrow >@% [format = l, subequations] x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\ xy+xz+yz=-2 \\ @@ -1635,7 +1637,7 @@ xyz = -15 \label{dernière-équation} \end{DispWithArrows} \end{Verbatim} % -\begin{DispWithArrows}< \label{système} (\ref*{système}) \Leftrightarrow >% +\begin{DispWithArrows}< \label{système} \ref*{système} \Leftrightarrow >% [format = l, subequations] x+y+z = -3 \Arrow[tikz=-,jump=2]{3 équations} \\ xy+xz+yz=-2 \\ @@ -1650,8 +1652,8 @@ dernière équation est l'équation \ref{dernière-équation} (référence obten \bigskip On peut souhaiter remplacer l'accolade gauche par un autre délimiteur extensible (gauche). On peut le faire avec -l'option |replace-left-brace-by|. Par exemple «|replace-left-brace-by = [\enskip|» va composer avec un -crochet et ajouter aussi un espace de 1~em après le crochet. +l'option |replace-left-brace-by|. Par exemple, «|replace-left-brace-by = [\enskip|» va composer avec un crochet et +ajouter aussi un espace de 1~em après le crochet. \bigskip \section{Fonctionnalités avancées} @@ -1789,9 +1791,9 @@ Nous expliquons d'abord le comportement quand les paramètres |start-adjust| et zéro: \begin{itemize} \item l'option |ystart| représente la distance verticale entre la ligne de base du -texte et le début de la flèche (valeur par défaut : $0.4$~ex); +texte et le début de la flèche (valeur initiale : $0.4$~ex); \item l'option |ygap| représente la distance verticale entre deux flèches consécutives -(valeur par défaut : $0.4$~ex). +(valeur initiale : $0.4$~ex). \end{itemize} @@ -1841,7 +1843,7 @@ A & = (a+1)^2 \Arrow{on développe} \\ \bigskip Voici le comportement par défaut depuis la version 1.13 (les paramètres -|start-adjust| et |end-ajust| sont utilisés avec la valeur par défaut $0.4$~ex). La flèche +|start-adjust| et |end-ajust| sont utilisés avec la valeur initiale $0.4$~ex). La flèche est plus longue et le résultat est plus esthétique. \medskip @@ -1866,7 +1868,7 @@ en fixant simplement |start-adjust| et |end-adjust| à $0$~pt: \bigskip Depuis la version 2.1 de \pkg{witharrows}, une flèche de |jump| égal à~$1$ a une longueur\footnote{On appelle \emph{longueur} de la flèche la différence entre l'ordonnée du point de départ et l'ordonnée du point d'arrivée.} -maximale égale au paramètre |max-length-of-arrow|. La valeur par défaut de ce paramètre est égale à~$2$~cm. +maximale égale au paramètre |max-length-of-arrow|. La valeur initiale de ce paramètre est égale à~$2$~cm. Dans l'exemple suivant, la valeur de |max-length-of-arrow| a été fixée à $1.5$~cm. \begin{Verbatim} @@ -2093,7 +2095,7 @@ pour tracer les flèches.\footnote{Si un environnement |{DispWithArrows}| ou environnements imbriqués à l'intérieur).} \smallskip -La valeur par défaut de |tikz-code| est |\draw (#1) to node {#3} (#2) ;| +La valeur initiale de |tikz-code| est |\draw (#1) to node {#3} (#2) ;| où les trois marqueurs |#1|, |#2| et |#3| représentent le point de départ, le point d'arrivée et l'étiquette de la flèche. diff --git a/macros/generic/witharrows/witharrows.dtx b/macros/generic/witharrows/witharrows.dtx index 96fd85f7f6..8aef1584bb 100644 --- a/macros/generic/witharrows/witharrows.dtx +++ b/macros/generic/witharrows/witharrows.dtx @@ -15,8 +15,8 @@ % % \fi % \iffalse -\def\myfileversion{2.1} -\def\myfiledate{2019/10/21} +\def\myfileversion{2.2} +\def\myfiledate{2019/12/10} % % %<*batchfile> @@ -57,7 +57,7 @@ version 2005/12/01 or later. \usepackage{varwidth} \labelformat{equation}{(#1)} \NewDocumentEnvironment {scope} {} {} {} -\def\interitem{\vskip 7mm plus 2 mm minus 3mm} +\def\interitem{\vspace{7mm plus 2 mm minus 3mm}} \def\emphase{\bgroup\color{RoyalPurple}\let\next=} \fvset{commandchars=\~\#\@,formatcom={\color{gray}}} \DeclareMathOperator{\re}{Re} @@ -80,9 +80,9 @@ version 2005/12/01 or later. % { % pdfinfo = % { -% Title = { The extension 'witharrows' } , -% Subject = { An extension for plain-TeX and LaTeX} , -% Author = { F. Pantigny } +% Title = The extension 'witharrows' , +% Subject = An extension for plain-TeX and LaTeX , +% Author = F. Pantigny % } % } % @@ -180,7 +180,7 @@ version 2005/12/01 or later. % % \interitem % The option |xoffset| shifts the arrow to the right (we usually don't want the -% arrows to be stucked on the text). The default value of |xoffset| is $3$~mm. +% arrows to be stucked on the text). The initial value of |xoffset| is $3$~mm. % \begin{Verbatim} % $\begin{WithArrows} % A & = \bigl((a+b)+1\bigr)^2 @@ -508,7 +508,7 @@ version 2005/12/01 or later. % it's possible to use the environment with an arbitrary number of columns with % the option |format|. The value given to this option is like the preamble of an % environment |{array}|, that is to say a sequence of letters |r|, |c| and |l|. -% The default value of the option |format| is, in fact, |rl|. +% The initial value of the option |format| is, in fact, |rl|. % % \bigskip % For exemple, if we want only one column left-aligned, we use the option |format=l|. @@ -879,7 +879,7 @@ version 2005/12/01 or later. % % \interitem % Like the environment |{aligned}|, |{WithArrows}| has an option of placement -% which can assume the values |t|, |c| or |b|. However, the default value is not +% which can assume the values |t|, |c| or |b|. However, the initial value is not % |c| but |t|. If desired, it's possible to have the |c| value as the default % with the command |\WithArrowsOptions{c}| at the beginning of the document. % % @@ -1032,7 +1032,7 @@ version 2005/12/01 or later. % % \smallskip % A command |\Arrow| in |code-after| takes three arguments : -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item a specification of the start row of the arrow ; % \item a specification of the end row of the arrow ; % \item the label of the arrow. @@ -1095,7 +1095,7 @@ version 2005/12/01 or later. % \end{WithArrows}$ % % \bigskip -% The options allowed for a command |\Arrow| in |code-after| are : |ll|, |lr|, +% The options allowed for a command |\Arrow| in |code-after| are: |ll|, |lr|, % |rl|, |rr|, |v|, |xoffset|, |tikz| and |tikz-code|. Except |v|, which is % specific to |\Arrow| in |code-after|, all these options have their usual % meaning. @@ -1215,7 +1215,7 @@ version 2005/12/01 or later. % \medskip % The package \pkg{witharrows} provides some tools facilitating the use of these % nodes: -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item the command |\WithArrowsLastEnv| gives the number of the last % environment of level~$0$ (\emph{i.e.} which is not included in another % environment of the package \pkg{witharrows}); @@ -1372,7 +1372,7 @@ version 2005/12/01 or later. % & = a^2 + 2a + 1 \tag{$\star$} \label{my-equation} % \end{DispWithArrows} % A link to the equation \ref{my-equation}.\footnote{In this document, the -% references has been customized with |\labelformat{equation}{(#1)}|} +% references have been customized with |\labelformat{equation}{(#1)}| in the preamble.} % % % \medskip @@ -1434,7 +1434,7 @@ version 2005/12/01 or later. % With the option |fleqn|, the environment is composed flush left (in a way % similar to the option |fleqn| of the standard classes of LaTeX). In this case, % the left margin can be controlled with the option |mathindent| (with a name -% inspired by the parameter |\mathindent| of standard LaTeX). The default value +% inspired by the parameter |\mathindent| of standard LaTeX). The initial value % of this parameter is 25~pt. % % \begin{Verbatim} @@ -1449,7 +1449,7 @@ version 2005/12/01 or later. % \end{DispWithArrows} % % \medskip -% \emph{Remark} : By design, the option |fleqn| of \pkg{witharrows} is +% \emph{Remark}: By design, the option |fleqn| of \pkg{witharrows} is % independent of the option |fleqn| of LaTeX. Indeed, since the environments of % \pkg{witharrows} are meant to be used with arrows on the right side, the user % may want to use \pkg{witharrows} with the option |fleqn| (in order to have @@ -1467,12 +1467,12 @@ version 2005/12/01 or later. % If the package \pkg{amsmath} is loaded, it's possible to use the command % |\intertext| in the environments |{DispWithArrows}|. It's also possible to use % the environment |{subequations}|. However, there is, for the environments -% |{DispWithArrows}| an option |subequations| to encapsulate the environment in +% |{DispWithArrows}|, an option |subequations| to encapsulate the environment in % an environment |{subequations}|. % % \medskip % In the following example, the key |{subequations}| is fixed by the command -% |\WithArrowsOptions|. Each environment |{DispWithArrows}| will subnumerated +% |\WithArrowsOptions|. Each environment |{DispWithArrows}| will be subnumerated % (in the scope of the |\WithArrowsOptions|) % \begin{Verbatim} % ~emphase#\WithArrowsOptions{subequations}@ @@ -1616,7 +1616,7 @@ version 2005/12/01 or later. % (in fact, it's possible to use \pkg{witharrows} without \pkg{amsmath}). % % There are differences between |{DispWithArrows}| and |{align}|. -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item The environment |{DispWithArrows}| cannot be inserted in an environment % |{gather}| of \pkg{amsmath}. % \item An environment |{DispWithArrows}| is always unbreakable (even with @@ -1688,10 +1688,10 @@ version 2005/12/01 or later. % % \interitem % In the following example, we subnumerate the equations with the option -% |subnumerate| (available when the package \pkg{amsmath} is loaded). +% |subequations| (available when the package \pkg{amsmath} is loaded). % % \begin{Verbatim} -% \begin{DispWithArrows}~emphase#< \label{system} (\ref*{system}) \Leftrightarrow >@[ +% \begin{DispWithArrows}~emphase#< \label{system} \ref*{system} \Leftrightarrow >@[ % format = l, subequations ] % x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\ % xy+xz+yz=-2 \\ @@ -1699,7 +1699,7 @@ version 2005/12/01 or later. % \end{DispWithArrows} % \end{Verbatim} % % -% \begin{DispWithArrows}< \label{system} (\ref*{system}) \Leftrightarrow >[ +% \begin{DispWithArrows}< \label{system} \ref*{system} \Leftrightarrow >[ % format = l, subequations] % x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\ % xy+xz+yz=-2 \\ @@ -1708,7 +1708,7 @@ version 2005/12/01 or later. % % % \bigskip -% The whole system is the equation \eqref{system} (this reference has been coded +% The whole system is the equation \ref{system} (this reference has been coded % by |\ref{system}|) whereas the last equation is the equation % \ref{last-equation} (this reference has been coded by % |\ref{last-equation}|). The command |\ref*| used in the code above is @@ -1748,7 +1748,7 @@ version 2005/12/01 or later. % % \medskip % The version of \pkg{witharrows} for plain-TeX doesn't provide all the -% functionnlities of the LaTeX version. In particular, the funcionnalities which +% functionnalities of the LaTeX version. In particular, the functionnalities which % deal with the number of the equations are not available (since they rely upon % the system of tags of LaTeX). % @@ -1857,11 +1857,11 @@ version 2005/12/01 or later. % \medskip % We first explain the behaviour when the parameters |start-adjust| and % |end-adjust| are equal to zero: -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item the option |ystart| sets the vertical distance between the base line of -% the text and the start of the arrow (default value: 0.4 ex); +% the text and the start of the arrow (initial value: 0.4 ex); % \item the option |ygap| sets the vertical distance between two consecutive -% arrows (default value: 0.4~ex). +% arrows (initial value: 0.4~ex). % \end{itemize} % % @@ -1911,7 +1911,7 @@ version 2005/12/01 or later. % % \bigskip % Here is the standard behaviour since version 1.13 (the parameters -% |start-adjust| and |end-ajust| are used with the default value $0.4$~ex). The +% |start-adjust| and |end-ajust| are used with the initial value $0.4$~ex). The % arrow is longer and the result is more aesthetic. % % \medskip @@ -1929,8 +1929,8 @@ version 2005/12/01 or later. % Since the version 2.1 of \pkg{witharrows}, an arrow of |jump| equal to~$1$ has % a maximal length\footnote{We call \emph{length} of an arrow the difference % between the $y$-value of its start point and the $y$~value of its end point.} -% equal to the parameter |max-length-of-arrow|. The default value of this -% parameter est $2$~cm. +% equal to the parameter |max-length-of-arrow|. The initial value of this +% parameter is $2$~cm. % % In the following example, the value of |max-length-of-arrow| has been fixed to % $1.5$~cm. @@ -1949,7 +1949,7 @@ version 2005/12/01 or later. % $L_2 \gets L_2-L_1$ \\ % $L_3 \gets L_3-L_1$ \\ % $L_4 \gets L_4-L_1$ \\ -% $L_5 \gets L_5-L_1$ % don't put \\ ici +% $L_5 \gets L_5-L_1$ % don't put \\ here % } \\ % & = % \begin{vmatrix} @@ -2423,14 +2423,12 @@ version 2005/12/01 or later. % |expl3| code fails.\footnote{cf. % |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|} % -% \begin{macrocode} -%<@@=wa> -% \end{macrocode} +% <@@=witharrows> % % \begin{macrocode} %<*LaTeX> \RequirePackage{tikz} -\RequirePackage{expl3}[2019/02/15] +\RequirePackage{expl3}[2019/07/01] % %<*plain-TeX> \input tikz.tex @@ -2457,7 +2455,7 @@ version 2005/12/01 or later. % |{WithArrows}|, |{DispWithArrows}|, |{DispWithArrows*}| and the commands % |\Arrow|, |\WithArrowsOptions| and |\WithArrowsNewStyle|. % \begin{macrocode} -\RequirePackage { xparse } [ 2018-10-17 ] +\RequirePackage { xparse } [ 2019-01-01 ] % % \end{macrocode} % @@ -2955,10 +2953,10 @@ version 2005/12/01 or later. % \bigskip % In the |\halign| of an environment |{WithArrows}| or |{DispWithArrows}|, we % will have to use four counters: -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item |\g_@@_arrow_int| to count the arrows created in the environment ; % \item |\g_@@_line_int| to count the lines of the |\halign| ; -% \item |\g_@@_col_int| to count the column of the |\halign|. +% \item |\g_@@_col_int| to count the columns of the |\halign|. % \end{itemize} % % @@ -2975,13 +2973,23 @@ version 2005/12/01 or later. \seq_new:N \g_@@_col_int_seq \int_new:N \g_@@_col_int % \end{macrocode} +% +% We will also use a ``static'' version of the counter of columns, called +% |\g_@@_static_col_int|. The value will be set directly in each cell of the +% array by an instruction in the template of the |\halign|. The aim of this +% programmation is to try to detect some utilisation of |\omit| (which should be +% forbidden) in the cells of the |\halign|. +% \begin{macrocode} +\seq_new:N \g_@@_static_col_int_seq +\int_new:N \g_@@_static_col_int +% \end{macrocode} % % % \bigskip % For the environment |{DispWithArrows}|, the comma list |\l_@@_tags_clist| will % be the list of the numbers of lines to be tagged (with the counter |equation| % of LaTeX). In fact, |\l_@@_tags_clist| may contain non negative integers but -% also three special values, |first|, |last| and |all|. +% also three special values: |first|, |last| and |all|. % \begin{macrocode} %<*LaTeX> \clist_new:N \l_@@_tags_clist @@ -3005,7 +3013,7 @@ version 2005/12/01 or later. % \bigskip % If the user has given a value for the option |command-name| (at the global or % at the \emph{environment} level), a command with this name is defined locally -% in the environment with meaning |\@@_Arrow|. The default value of the option +% in the environment with meaning |\@@_Arrow|. The initial value of the option % |command-name| is ``|Arrow|'' and thus, by default, the name of the command % will be |\Arrow|. % \begin{macrocode} @@ -3071,7 +3079,7 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% The option boolean corresponds to the option |subequations|. +% The option |\l_@@_subequations_bool| corresponds to the option |subequations|. % \begin{macrocode} %<*LaTeX> \bool_new:N \l_@@_subequations_bool @@ -3082,7 +3090,7 @@ version 2005/12/01 or later. % \subsection{The definition of the options} % % There are four levels where options can be set: -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item with |\usepackage[...]{witharrows}|: this level will be called % \emph{package} level; % \item with |\WithArrowsOptions{...}|: this level will be called \emph{global} @@ -3856,9 +3864,9 @@ version 2005/12/01 or later. % \end{macrocode} % % -% The initialization of the counters |\g_@@_arrow_int|, |\g_@@_line_int| and -% |\g_@@_col_int|. However, we have to save their previous values with the -% stacks created for this end. +% The initialization of the counters |\g_@@_arrow_int|, |\g_@@_line_int|, +% |\g_@@_col_int| and |\g_@@_static_col_int|. However, we have to save their +% previous values with the stacks created for this end. % \begin{macrocode} \seq_gput_right:NV \g_@@_arrow_int_seq \g_@@_arrow_int \int_gzero:N \g_@@_arrow_int @@ -3866,6 +3874,8 @@ version 2005/12/01 or later. \int_gzero:N \g_@@_line_int \seq_gput_right:NV \g_@@_col_int_seq \g_@@_col_int \int_gzero:N \g_@@_col_int + \seq_gput_right:NV \g_@@_static_col_int_seq \g_@@_static_col_int + \int_gzero:N \g_@@_static_col_int % \end{macrocode} % % In the preamble of the |\halign|, there will be \emph{two} counters of the @@ -3875,15 +3885,12 @@ version 2005/12/01 or later. % is a third column in the environment), we will have the following instructions : % \begin{Verbatim} % \int_gincr:N \g_~@~@_col_int -% \int_gset:Nn \g_~@~@_static_col_int 3 +% \int_set:Nn \g_~@~@_static_col_int 3 % \end{Verbatim} % The counter |\g_@@_col_int| is incremented dynamically and the second is % static. If the user has used a command |\omit|, the dynamic incrementation is -% not done in the cell and, at this end of the row, the difference between the +% not done in the cell and, at the end of the row, the difference between the % counters may infer the presence of |\omit| at least once. -% \begin{macrocode} - \int_gzero_new:N \g_@@_static_col_int -% \end{macrocode} % % \bigskip % We also have to update the position on the nesting tree. @@ -3924,14 +3931,14 @@ version 2005/12/01 or later. % % \medskip % The counter |\l_@@_jump_int| corresponds to the option |jump|. Now, we set the -% default value for this option. +% initial value for this option. % \begin{macrocode} \int_set:Nn \l_@@_jump_int \c_one_int % \end{macrocode} % % \medskip % The string |\l_@@_format_str| corresponds to the option |format|. Now, we set -% the default value for this option. +% the initial value for this option. % \begin{macrocode} \str_set:Nn \l_@@_format_str { rl } % \end{macrocode} @@ -4004,7 +4011,7 @@ version 2005/12/01 or later. % % \medskip % Be careful! The following counter |\g_@@_col_int| will be used for two usages: -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item during, the construction of the preamble of the |\halign|, it will be % used as counter for the number of the column under construction in the % preamble (since the preamble is constructed backwards, |\g_@@_col_int| will go @@ -4082,7 +4089,7 @@ version 2005/12/01 or later. % % Several important points must be noted concerning that construction of the % preamble. -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item The construction of the preamble is done by reading backwards the % format |\l_@@_format_str| and adding the corresponding tokens in the input % stream of TeX. That means that the part of the preamble concerning the last @@ -4379,8 +4386,17 @@ version 2005/12/01 or later. \cs_set:Npn \WithArrowsRightX { \g_@@_right_x_dim } % \end{macrocode} % +% \bigskip +% We use |\normalbaselines| of plain-TeX because we have used +% |\spread@equation| (of \pkg{amsmath} or defined directly if \pkg{amsmath} is +% not loaded) and you don't want |\spread@equation| to have effects in the +% labels of the arrows. +% \begin{macrocode} + \normalbaselines +% \end{macrocode} +% % \bigskip -% It there is really arrows in the environment, we draw the arrows. +% If there is really arrows in the environment, we draw the arrows. % \begin{macrocode} \int_compare:nNnT \g_@@_arrow_int > 0 { @@ -4444,7 +4460,7 @@ version 2005/12/01 or later. % % \bigskip % Finally, we restore the previous values of the counters |\g_@@_arrow_int|, -% |\g_@@_line_int| and |\g_@@_col_int|. It is recalled that we manage three +% |\g_@@_col_int| and |\g_@@_static_col_int|. It is recalled that we manage four % stacks in order to be able to do such a restoration. % \begin{macrocode} \seq_gpop_right:NN \g_@@_arrow_int_seq \l_tmpa_tl @@ -4453,6 +4469,8 @@ version 2005/12/01 or later. \int_gset:Nn \g_@@_line_int \l_tmpa_tl \seq_gpop_right:NN \g_@@_col_int_seq \l_tmpa_tl \int_gset:Nn \g_@@_col_int \l_tmpa_tl + \seq_gpop_right:NN \g_@@_static_col_int_seq \l_tmpa_tl + \int_gset:Nn \g_@@_static_col_int \l_tmpa_tl } % \end{macrocode} % That's the end of the command |\@@_post_halign:|. @@ -4699,7 +4717,7 @@ version 2005/12/01 or later. { \exp_args:NV \str_if_eq:nnT \l_@@_type_env_str { #2 } { - \@@_warning:n { newline~at~the~end~of~env } + \@@_error:n { newline~at~the~end~of~env } \group_begin: \globaldefs = 1 \@@_msg_redirect_name:nn { newline~at~the~end~of~env } { none } @@ -5300,7 +5318,7 @@ version 2005/12/01 or later. % % \bigskip % The arrows are divided in groups. There is two reasons for this division. -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item If the option |group| or the option |groups| is used, all the arrows of % a group are drawn on a same vertical at an abscissa of |\l_@@_x_dim|. % \item For aesthetic reasons, the starting point of all the starting arrows of @@ -5742,7 +5760,7 @@ version 2005/12/01 or later. % \bigskip % We compute and store in |\g_tmpa_tl| and |\g_tmpb_tl| the exact coordinates of % the extremities of the arrow. -% \begin{itemize} +% \begin{itemize}[beginpenalty=10000] % \item Concerning the % $x$-values, the abscissa computed in |\l_@@_x_dim| will be used if the option % of position is |i|, |group| or |groups|. @@ -6365,7 +6383,8 @@ version 2005/12/01 or later. { The~environments~of~witharrows~(\{WithArrows\}~and~ \{DispWithArrows\})~should~not~end~by~\token_to_str:N \\.\\ - This~warning~might~become~an~error~in~a~future~version. + However,~you~can~go~on~for~this~time.~No~similar~error~will~be~ + raised~in~this~document. } % % \end{macrocode} @@ -7127,12 +7146,18 @@ version 2005/12/01 or later. % A version of \pkg{witharrows} is available for plain-TeX. % % -% \subsection*{Changes between 2.0 and 2.1 } +% \subsection*{Changes between 2.0 and 2.1} % % Option |max-length-of-arrow|. % % Validation with regular expression for the first argument of |\MultiArrow|. % +% \subsection*{Changes between 2.1 and 2.2} +% +% Addition of |\normalbaselines| at the beginning of |\@@_post_halign:|. +% +% The warning for an environment ending by |\\| has been transformed in |error|. +% % \PrintIndex % % \tableofcontents diff --git a/macros/generic/witharrows/witharrows.pdf b/macros/generic/witharrows/witharrows.pdf index 425dab200f..eb25c91d02 100644 Binary files a/macros/generic/witharrows/witharrows.pdf and b/macros/generic/witharrows/witharrows.pdf differ diff --git a/macros/latex/contrib/alphalph/README.md b/macros/latex/contrib/alphalph/README.md new file mode 100644 index 0000000000..994f0a7fc5 --- /dev/null +++ b/macros/latex/contrib/alphalph/README.md @@ -0,0 +1,9 @@ +# alphalph + +alphalph package for LaTeX + + +The package provides methods to represent numbers with a limited +set of symbols. Both LaTeX and plain TeX are supported. + + diff --git a/macros/latex/contrib/alphalph/alphalph.dtx b/macros/latex/contrib/alphalph/alphalph.dtx new file mode 100644 index 0000000000..abff74de87 --- /dev/null +++ b/macros/latex/contrib/alphalph/alphalph.dtx @@ -0,0 +1,1535 @@ +% \iffalse meta-comment +% +% File: alphalph.dtx +% Version: 2019/12/09 v2.6 +% Info: Convert numbers to letters +% +% Copyright (C) +% 1999, 2006-2008, 2010, 2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/alphalph/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/alphalph/issues +% +% The Base Interpreter refers to any `TeX-Format', +% because some files are installed in TDS:tex/generic//. +% +% This work consists of the main source file alphalph.dtx +% and the derived files +% alphalph.sty, alphalph.pdf, alphalph.ins, alphalph.drv, +% alphalph-test1.tex, alphalph-test2.tex, alphalph-test3.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/alphalph/alphalph.dtx +% CTAN:macros/latex/contrib/alphalph/alphalph.pdf +% +% Unpacking: +% (a) If alphalph.ins is present: +% tex alphalph.ins +% (b) Without alphalph.ins: +% tex alphalph.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{alphalph.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If alphalph.drv is present: +% latex alphalph.drv +% (b) Without alphalph.drv: +% latex alphalph.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex alphalph.dtx +% makeindex -s gind.ist alphalph.idx +% pdflatex alphalph.dtx +% makeindex -s gind.ist alphalph.idx +% pdflatex alphalph.dtx +% +% Installation: +% TDS:tex/generic/alphalph/alphalph.sty +% TDS:doc/latex/alphalph/alphalph.pdf +% TDS:source/latex/alphalph/alphalph.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: alphalph 2019/12/09 v2.6 Convert numbers to letters (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: alphalph +Version: 2019/12/09 v2.6 + +Copyright (C) + 1999, 2006-2008, 2010, 2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/alphalph/issues + + +The Base Interpreter refers to any `TeX-Format', +because some files are installed in TDS:tex/generic//. + +This work consists of the main source file alphalph.dtx +and the derived files + alphalph.sty, alphalph.pdf, alphalph.ins, alphalph.drv, + alphalph-test1.tex, alphalph-test2.tex, alphalph-test3.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{alphalph.ins}{\from{alphalph.dtx}{install}}% + \file{alphalph.drv}{\from{alphalph.dtx}{driver}}% + \usedir{tex/generic/alphalph}% + \file{alphalph.sty}{\from{alphalph.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* alphalph.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `alphalph.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{alphalph.drv}% + [2019/12/09 v2.6 Convert numbers to letters (HO)]% +\documentclass{ltxdoc} +\usepackage{alphalph}[2019/12/09] +\makeatletter +\newalphalph{\fnsymbolwrap}[wrap]{\@fnsymbol}{} +\newcommand*{\fnsymbolsingle}[1]{% + \ensuremath{% + \ifcase#1% + \or *% + \or \dagger + \or \ddagger + \or \mathsection + \or \mathparagraph + \else + \@ctrerr + \fi + }% +} +\makeatother +\newalphalph{\fnsymbolmult}[mult]{\fnsymbolsingle}{} +\usepackage{amsmath} +\DeclareMathOperator{\opDiv}{div} +\DeclareMathOperator{\opMod}{mod} +\newcommand*{\Def}{% + \ensuremath{% + \mathrel{\mathop{:}}=% + }% +} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{alphalph.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{alphalph.drv} +% +% \title{The \xpackage{alphalph} package} +% \date{2019/12/09 v2.6} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/alphalph/issues}}} +% +% \maketitle +% +% \begin{abstract} +% The package provides methods to represent numbers with a limited +% set of symbols. Both \hologo{LaTeX} and \hologo{plainTeX} are supported. +% \end{abstract} +% +% \tableofcontents +% +% \section{Documentation} +% +% \subsection{Introduction} +% \hologo{LaTeX} counters can be represented in different ways +% by using presentation commands: +% \begin{quote} +% \cs{arabic}, \cs{roman}, \cs{Roman},\\ +% \cs{alph}, \cs{Alph}, \cs{fnsymbol} +% \end{quote} +% The ranges of supported counter values are more or less +% restricted. Only \cs{arabic} can be used with any counter +% value \hologo{TeX} supports. +% \begin{quote} +% \catcode`\|=12 % +% \begin{tabular}{@{}l|l|l|l@{}} +% Presentation & Supported & Ignored & Error message\\ +% command & domain & values & ``Counter too large''\\ +% \hline +% \cs{arabic} +% & \ttfamily -MAX..MAX & &\\ +% \cs{roman}, \cs{Roman} +% & \ttfamily 1..MAX & \ttfamily -MAX..0 &\\ +% \cs{alph}, \cs{Alph} +% & \ttfamily 1..26 & 0 & \ttfamily -MAX..-1, 27..MAX\\ +% \cs{fnsymbol} +% & \ttfamily 1..9 & 0 & \ttfamily -MAX..-1, 10..MAX\\ +% \hline +% \end{tabular}\\[1ex] +% \texttt{MAX} = \texttt{2147483647} +% \end{quote} +% Ordinal numbers are often used in documents: numbering +% of chapters, sections, figures, footnotes and so on. +% The layouter chooses \cs{Alph} for chapter numbers +% and \cs{fnsymbol} for footnotes. But what can be done +% if there are more than 26 chapters or more than 10 footnotes? +% This package \xpackage{alphalph} allows to define new +% presentation commands. They rely on a existing command +% and define presentations for values greater the limits. +% Three different methods are provided by the package. +% In the following use cases they are presentated. +% +% \subsection{Use cases} +% +% \subsubsection{Number system based on symbols} +% +% Asume you are writing a book and your lecturer demands +% that chapter numbers must be letters. But you have already +% 30 chapters and you have only 26 letters? +% +% In the decimal system the situation would be clear. +% If you run out of digits, you are using more digits +% to represent a number. This method can be also be used +% for letters. After chapter 26 with |Z| we us |AA|, |AB|, |AC|, and |AD| +% for the remaining chapters. +% +% Happily this package already defines this presentation command: +%\begin{quote} +%\begin{verbatim} +%\usepackage{alphalph} +%\renewcommand*{\thechapter}{% +% \AlphAlph{\value{chapter}}% +%} +%\end{verbatim} +%\end{quote} +% \cs{AlphAlph} generates: +% \AlphAlph{1}, \AlphAlph{2}, \AlphAlph{3}, \dots, +% \AlphAlph{26}, \AlphAlph{27}, \AlphAlph{28}, \dots +% +% The other presentation command is \cs{alphalph} for lowercase letters. +% +% \subsubsection{Wrap symbols around} +% +% Nine footnote symbols are quite a few. +% Too soon the symbols are consumed +% and \hologo{LaTeX} complains with the error ``Counter too large''. +% However, it could be acceptable to start again with the symbols +% from the beginning, especially if there are less than nine symbols +% on a page. +% This could be achieved by a counter reset. +% But finding the right place can be difficult or needs manual +% actions. Also a +% unique counter value can be desirable (e.g. for generating +% unique anchor/link names). +% Package \xpackage{alphalph} allows you to define +% a macro that implements a ``wrap around'', but letting +% the value of the counter untouched: +%\begin{quote} +%\begin{verbatim} +%\usepackage{alphalph} +%\makeatletter +%\newalphalph{\fnsymbolwrap}[wrap]{\@fnsymbol}{} +%\makeatother +%\renewcommand*{\thefootnote}{% +% \fnsymbolwrap{\value{footnote}}% +%} +%\end{verbatim} +%\end{quote} +% \cs{fnsymbolwrap} generates: +% \fnsymbolwrap{1}~(1), \fnsymbolwrap{2}~(2), \fnsymbolwrap{3}~(3), \dots, +% \fnsymbolwrap{9}~(9), \fnsymbolwrap{10}~(10), \fnsymbolwrap{11}~11, \dots +% +% \subsubsection{Multiple symbols} +% +% \Hologo{LaTeX}'s standard set of footnote symbols contains doubled +% symbols at the higher positions. Could this principle +% be generalized? +% Yes, but first we need a clean footnote symbol list without +% doubled entries, example: +%\begin{quote} +%\begin{verbatim} +%\usepackage{alphalph} +%\makeatletter +%\newcommand*{\fnsymbolsingle}[1]{% +% \ensuremath{% +% \ifcase#1% +% \or *% +% \or \dagger +% \or \ddagger +% \or \mathsection +% \or \mathparagraph +% \else +% \@ctrerr +% \fi +% }% +%} +%\makeatother +%\newalphalph{\fnsymbolmult}[mult]{\fnsymbolsingle}{} +%\renewcommand*{\thefootnote}{% +% \fnsymbolmult{\value{footnote}}% +%} +%\end{verbatim} +%\end{quote} +% The own definition of \cs{fnsymbolsingle} has the +% advantage that this list can easily modified. +% Otherwise you can use \cs{@fnsymbol} directly, +% because it uses the same first five symbols. +%\begin{quote} +%\begin{verbatim} +%\usepackage{alphalph} +%\makeatletter +%\newalphalph{\fnsymbolmult}[mult]{\@fnsymbol}{5} +%\makeatother +%\renewcommand*{\thefootnote}{% +% \fnsymbolmult{\value{footnote}}% +%} +%\end{verbatim} +%\end{quote} +% \cs{fnsymbolmult} generates: +% \fnsymbolmult{1}~(1), \fnsymbolmult{2}~(2), \fnsymbolmult{3}~(3), +% \fnsymbolmult{4}~(4), \fnsymbolmult{5}~(5), \fnsymbolmult{6}~(6), +% \dots, \fnsymbolmult{16}~16, \fnsymbolmult{17}~17, \dots +% +% \bigskip +% The same method can also be used for the chapter problem +% in the first discussed use case: +%\begin{quote} +%\begin{verbatim} +%\usepackage{alphalph} +%\makeatletter +%\newalphalph{\AlphMult}[mult]{\@Alph}{26} +%\makeatother +%\renewcommand*{\chapter}{% +% \AlphMult{\value{chapter}}% +%} +%\end{verbatim} +%\end{quote} +% \cs{AlphMult} then generates AA, BB, CC, and DD for chapters 27--30. +% +% \subsection{Glossary} +% +% \begin{description} +% \item[Counter presentation command] is a macro that +% expects a \hologo{LaTeX} counter name as argument. +% Numbers cannot be used. Examples: +% \cs{arabic}, \cs{alph}, \cs{fnsymbol}. +% \item[Number presentation command] is a macro that +% expects a number as argument. A number is anything +% that \hologo{TeX} accepts as number including \cs{value}. +% Examples: \cs{alphalph}, \cs{AlphAlph}, \cs{alphalph@alph} +% +% However, \cs{alph} or \cs{fnsymbol} are not number +% presentation commands because they expect a counter +% name as argument. Happily \hologo{LaTeX} counter presentation +% commands internally uses number presentation commands +% with the same name, but prefixed by `@'. Thus +% \cs{@alph}, \cs{@fnsymbol} are number presentation commands. +% \item[Symbols provider] is a command that can be used +% to get a list of symbols. For example, \cs{@Alph} +% provides the 26 uppercase letters from `A' to `Z'. +% Basically a symbol provider is a number presentation +% command, usually with a limited range. +% \item[Number of symbols] is the number of the +% last symbol slot of a symbol provider. Thus \cs{@Alph} +% generates 26 symbols, \cs{@fnsymbol} provides 9 symbols. +% \end{description} +% +% \subsection{Package usage} +% +% The package \Package{alphalph} can be used with both \hologo{plainTeX} +% and \hologo{LaTeX}: +% \begin{description} +% \item[\hologo{plainTeX}:] |\input alphalph.sty| +% \item[\hologo{LaTeX2e}:] |\usepackage{alphalph}|\\ +% There aren't any options. +% \end{description} +% +% \subsection{User commands} +% +% \begin{declcs}{AlphAlph} \M{number}\\ +% \cs{alphalph} \M{number} +% \end{declcs} +% Both macros are number presentation commands that +% expects a number as argument. \hologo{LaTeX} counters +% are used with \cs{value}. +% +% The macros represents a number by letters. +% First single letters |A..Z| are used, then +% two letters |AA..ZZ|, three letters |AAA...ZZZ|, \dots +% follow. +% +% Macro \cs{AlphAlph} uses uppercase letters, +% \cs{alphalph} generates the lowercase variant. +% \begin{quote} +% \catcode`\|=12 +% \def\entry#1{ +% \texttt{#1} +% & \texttt{\AlphAlph{#1}} +% & \texttt{\alphalph{#1}} +% } +% \begin{tabular}{@{}l|l|l@{}} +% \meta{number} & \verb|\AlphAlph{|\meta{number}\verb|}| +% & \verb|\alphalph{|\meta{number}\verb|}|\\ +% \hline +% \entry{1}\\ +% \entry{2}\\ +% \entry{26}\\ +% \entry{27}\\ +% \entry{30}\\ +% \entry{2000}\\ +% \entry{3752127}\\ +% \entry{10786572}\\ +% \entry{2147483647}\\ +% \end{tabular} +% \end{quote} +% +% \begin{declcs}{newalphalph} +% \M{cmd} +% |[|\meta{method}|]| +% \M{symbols provider} +% \M{number of symbols} +% \end{declcs} +% Macro \cs{newalphalph} defines \meta{cmd} as new +% number presentation command. Like \cs{newcommand} an error +% is thrown, if macro \meta{cmd} already exists. +% +% The \meta{method} is one of |alph|, |wrap|, or |mult|. +% The default is |alph|. +% +% As symbol provider a number presentation command +% can be used, e.g. \cs{@fnsymbol}, \cs{@Alph}, or +% \cs{alphalph@alph}. +% +% The last argument is the number of symbols. +% If the argument is empty, then \cs{newalphalph} tries +% to find this number itself. \hologo{LaTeX}'s number presentation +% commands throw an error message, if the number is too large. +% This error message is put in a macro \cs{@ctrerr}. +% Thus \cs{newalphalph} calls the symbol provider and tests +% a number by typesetting it in a temporary box. The error +% macro \cs{@ctrerr} is catched, it proofs that the number +% is not supported. Also if the width of the result is zero +% the number is considered as unavailable. +% +% The empty argument is useful for potentially variable lists. +% However if the end cannot be detected, then the number of +% symbols must be given. This is also a lot faster. Therefore don't +% let the argument empty without reason. +% +% \subsection{Programmer commands} +% +% \begin{declcs}{alphalph@Alph} \M{number}\\ +% \cs{alphalph@alph} \M{number} +% \end{declcs} +% They are basically the same as \cs{@Alph} and \cs{@alph}. +% Some languages of package \xpackage{babel} redefine +% \hologo{LaTeX}'s macros to include some font setup that +% breaks expandibility. Therefore \cs{AlphAlph} and \cs{alphalph} +% are based on \cs{alphalph@Alph} and \cs{alphalph@alph} to get +% the letters. The behaviour of these symbol providers for numbers +% outside the range |1..26| is undefined. +% +% \subsection{Design principles} +% +% \subsubsection{Number presentation commands} +% +% All number presentation commands that this package defines +% (including \cs{alphalph} and \cs{AlphAlph}) have the following +% properties: +% \begin{itemize} +% \item They are fully expandable. This means that they can safely +% \begin{itemize} +% \item be written to a file, +% \item used in moving arguments (\hologo{LaTeX}: they are \emph{robust}), +% \item used in a \cmd{\csname}-\cmd{\endcsname} pair. +% \end{itemize} +% \item If the argument is zero or negative, the commands expand +% to nothing like \cmd{\romannumeral}. +% \item The argument is a \hologo{TeX} number. Anything that would be +% accepted by \cmd{\number} is a valid argument: +% \begin{itemize} +% \item explicite constants, +% \item macros that expand to a number, +% \item count registers, \hologo{LaTeX} counter can used +% via \cmd{\value}, e.\,g.:\\ +% |\alphalph{\value{page}}| +% \item \dots +% \end{itemize} +% \item \hologo{eTeX}'s numeric expressions are supported, if \hologo{eTeX} is +% available. Then \cs{numexpr} is applied to the argument. +% Package \cs{calc}'s expressions are not supported. +% That would violate the expandibility. +% \end{itemize} +% +% \subsubsection{General usability} +% +% \begin{description} +% \item[\hologo{TeX} format:] +% The package does not depend on \hologo{LaTeX}, it can also be used +% by \hologo{plainTeX}, for example. +% \item[\hologo{eTeX}:] \eTeX is supported, the macros are shorter and +% faster. But \eTeX's extensions are not requirements. +% Without \hologo{eTeX}, just the implementation changes. The properties +% remain unchanged. +% \end{description} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% \subsection{Begin\texorpdfstring{ of package}{}} +% \begin{macrocode} +%<*package> +% \end{macrocode} +% Reload check, especially if the package is not used with \LaTeX. +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@alphalph.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{alphalph}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +% \end{macrocode} +% Package identification: +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@alphalph.sty\endcsname +\ProvidesPackage{alphalph}% + [2019/12/09 v2.6 Convert numbers to letters (HO)]% +% \end{macrocode} +% +% \subsection{Catcodes} +% +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname AlPh@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\AlPh@AtEnd{% + \AlPh@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{33}{12}% ! +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{43}{12}% + +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{59}{12}% ; +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{96}{12}% ` +\TMP@EnsureCode{124}{12}% | +\edef\AlPh@AtEnd{\AlPh@AtEnd\noexpand\endinput} +% \end{macrocode} +% +% \subsection{Package loading} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \input infwarerr.sty\relax + \input intcalc.sty\relax +\else + \RequirePackage{infwarerr}[2007/09/09]% + \RequirePackage{intcalc}[2007/09/09]% +\fi +% \end{macrocode} +% +% \subsection{\hologo{eTeX} detection} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname numexpr\endcsname\relax + \catcode124=9 % '!': ignore + \catcode43=14 % '+': comment +\else + \catcode124=14 % '!': comment + \catcode43=9 % '+': ignore +\fi +% \end{macrocode} +% +% \subsection{Help macros} +% +% \begin{macro}{\AlPh@Error} +% \begin{macrocode} +\def\AlPh@Error#1{% + \begingroup + \escapechar=92 % backslash + \@PackageError{alphalph}{#1}\@ehc + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AlPh@IfDefinable} +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname @ifdefinable\endcsname\relax + \def\AlPh@IfDefinable#1#2{% + \ifcase\ifx#1\@undefined\else\ifx#1\relax\else1\fi\fi0 % + #2% + \else + \AlPh@Error{% + Command \string#1 already defined% + }% + \fi + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\else +% \end{macrocode} +% \begin{macro}{\AlPh@IfDefinable} +% \begin{macrocode} + \let\AlPh@IfDefinable\@ifdefinable +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\fi +% \end{macrocode} +% +% \begin{macro}{\@ReturnAfterElseFi} +% \begin{macro}{\@ReturnAfterFi} +% The following commands moves the `then' and `else' part respectively +% behind the |\if|-construct. This prevents a too deep |\if|-nesting +% and so a \hologo{TeX} capacity error because of a limited input stack size. +% I use this trick in several packages, so I don't prefix these internal +% commands in order not to have the same macros with different names. +% (It saves memory.) +% \begin{macrocode} +\long\def\@ReturnAfterElseFi#1\else#2\fi{\fi#1} +\long\def\@ReturnAfterFi#1\fi{\fi#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@gobblefour} +% \Hologo{LaTeX} defines commands for eating arguments. +% Define \cs{@gobblefour} if it is not defined (\hologo{plainTeX}). +% \begin{macrocode} +\expandafter\ifx\csname @gobblefour\endcsname\relax + \long\def\@gobblefour#1#2#3#4{}% +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{AlPh@IfOptArg} +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname kernel@ifnextchar\endcsname\relax + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname @ifnextchar\endcsname\relax + \def\AlPh@IfOptArg#1#2{% + \def\AlPh@TempA{#1}% + \def\AlPh@TempB{#2}% + \futurelet\AlPh@Token\AlPh@IfOptArgNext + }% + \let\AlPh@BracketLeft=[%] + \def\AlPh@IfOptArgNext{% + \ifx\AlPh@Token\AlPh@BracketLeft + \expandafter\AlPh@TempA + \else + \expandafter\AlPh@TempB + \fi + }% + \else + \def\AlPh@IfOptArg{\@ifnextchar[}%] + \fi +\else + \def\AlPh@IfOptArg{\kernel@ifnextchar[}%] +\fi +% \end{macrocode} +% \end{macro} +% +% \subsection{Symbol provider} +% +% \subsubsection{Alphabet} +% +% The output of \cs{alphalph} and \cs{AlphAlph} should be +% usable as part of command names (see \cs{@namedef}, \cs{csname}, \dots). +% Unhappily some languages of package \xpackage{babel} +% redefine \hologo{LaTeX}'s \cs{@alph} and \cs{@Alph} in a manner that +% they cannot be used in expandable context any more. +% Therefore package \xpackage{alphalph} provides its own +% commands. +% +% \begin{macro}{\alphalph@Alph} +% \begin{macro}{\alphalph@alph} +% The two commands \cmd{\AlPh@Alph} and \cmd{\AlPh@alph} convert a +% number into a letter (uppercase and lowercase respectivly). +% The character |@| is used as an error symbol, +% if the number isn't in the range of 1 until 26. +% Here we need no space after the number |#1|, because the error +% symbol |@| for the zero case stops scanning the number. +% This error symbol should not appear anywhere (except for bugs). +% \begin{macrocode} +\def\alphalph@Alph#1{% + \ifcase#1% + @% + \or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M% + \or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z% + \else + \AlPh@ctrerr + @% + \fi +} +\def\alphalph@alph#1{% + \ifcase#1% + @% + \or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m% + \or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z% + \else + \AlPh@ctrerr + @% + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\AlPh@ctrerr} +% Macro \cs{AlPh@ctrerr} is used as hook for the algorithm +% to get the available number of symbols. +% \begin{macrocode} +\def\AlPh@ctrerr{} +% \end{macrocode} +% \end{macro} +% +% \subsection{Finding number of symbols} +% +% \begin{macro}{\AlPh@GetNumberOfSymbols} +% \noindent +% |#1|: symbols provider +% \begin{macrocode} +\def\AlPh@GetNumberOfSymbols#1{% + \AlPh@TestNumber1!{#1}% + \ifAlPh@Unavailable + \def\AlPh@Number{0}% + \AlPh@Error{No symbols found}% + \else + \def\AlPh@Number{1}% + \AlPh@ExpSearch2!{#1}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifAlPh@Unavailable} +% \begin{macrocode} +\let\ifAlPh@Unavailable\iffalse +\def\AlPh@Unavailabletrue{% + \global\let\ifAlPh@Unavailable\iftrue +} +\def\AlPh@Unavailablefalse{% + \global\let\ifAlPh@Unavailable\iffalse +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@TestNumber} +% |#1|: number to be tested\\ +% |#2|: symbols provider +% \begin{macrocode} +\def\AlPh@TestNumber#1!#2{% + \AlPh@Unavailablefalse + \begingroup + \setbox0=\hbox{% + \begingroup % color + \let\@ctrerr\AlPh@Unavailabletrue + \let\AlPh@ctrerr\AlPh@Unavailabletrue + #2{#1}% + \endgroup + }% + \ifdim\wd0=0pt % + \AlPh@Unavailabletrue + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@ExpSearch} +% |#1|: number to be tested\\ +% |#2|: symbols provider +% \begin{macrocode} +\def\AlPh@ExpSearch#1!#2{% + \let\AlPh@Next\relax + \AlPh@TestNumber#1!{#2}% + \ifAlPh@Unavailable + \expandafter\AlPh@BinSearch\AlPh@Number!#1!{#2}% + \else + \def\AlPh@Number{#1}% + \ifnum#1>1073741823 % + \AlPh@TestNumber2147483647!{#2}% + \ifAlPh@Unavailable + \AlPh@BinSearch#1!2147483647!{#2}% + \else + \def\AlPh@Number{0}% + \AlPh@Error{% + Maximal symbol number not found% + }% + \fi + \else + \def\AlPh@Next{% + \expandafter\AlPh@ExpSearch\number\intcalcShl{#1}!{#2}% + }% + \fi + \fi + \AlPh@Next +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@BinSearch} +% |#1|: available number\\ +% |#2|: unavailable number, |#2| $>$ |#1|\\ +% |#3|: symbols provider +% \begin{macrocode} +\def\AlPh@BinSearch#1!#2!#3{% + \expandafter\AlPh@ProcessBinSearch + \number\intcalcShr{\intcalcAdd{#1}{#2}}!% + #1!#2!{#3}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@ProcessBinSearch} +% |#1|: number to be tested, |#2| $\leq$ |#1| $\leq$ |#3|\\ +% |#2|: available number\\ +% |#3|: unavailable number\\ +% |#4|: symbols provider +% \begin{macrocode} +\def\AlPh@ProcessBinSearch#1!#2!#3!#4{% + \let\AlPh@Next\relax + \ifnum#1>#2 % + \ifnum#1<#3 % + \AlPh@TestNumber#1!{#4}% + \ifAlPh@Unavailable + \def\AlPh@Next{% + \AlPh@BinSearch#2!#1!{#4}% + }% + \else + \def\AlPh@Next{% + \AlPh@BinSearch#1!#3!{#4}% + }% + \fi + \else + \def\AlPh@Number{#2}% + \fi + \else + \def\AlPh@Number{#2}% + \fi + \AlPh@Next +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Methods} +% +% The names of method macros start with \cs{AlPh@Method}. +% These macros do the main job in converting a number to +% its representation. +% A method command is called with three arguments. +% The first argument is the number of symbols. The +% second argument is the basic macro for converting +% a number with limited number range. The last parameter +% is the number that needs converting. +% +% \subsubsection{Common methods} +% +% \begin{macro}{\AlPh@CheckPositive} +% \noindent +% |#1|: number to be checked +% |#2|: continuation macro\\ +% |#3|: number of symbols (hidden here)\\ +% |#4|: symbol provider (hidden here) +% \begin{macrocode} +\def\AlPh@CheckPositive#1!#2{% + \ifnum#1<1 % + \expandafter\@gobblefour + \fi + #2{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Method `alph'} +% +% \begin{macro}{\AlPh@Method@alph} +% \noindent +% |#1|: number of symbols\\ +% |#2|: symbols provider\\ +% |#3|: number to be converted +% \begin{macrocode} +\def\AlPh@Method@alph#1#2#3{% + \expandafter\AlPh@CheckPositive +| \number#3!% ++ \the\numexpr#3!% + \AlPh@ProcessAlph + {#1}{#2}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@ProcessAlph} +% |#1|: current number\\ +% |#2|: number of symbols\\ +% |#3|: symbols provider +% \begin{macrocode} +\def\AlPh@ProcessAlph#1#2#3{% + \ifnum#1>#2 % + \@ReturnAfterElseFi{% + \expandafter\AlPh@StepAlph\number + \intcalcInc{% + \intcalcMod{\intcalcDec{#1}}{#2}% + }% + \expandafter!\number + \intcalcDiv{\intcalcDec{#1}}{#2}% + !{#2}{#3}% + }% + \else + \@ReturnAfterFi{% + #3{#1}% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@StepAlph} +% |#1|: current last digit\\ +% |#2|: new current number\\ +% |#3|: number of symbols\\ +% |#4|: symbols provider +% \begin{macrocode} +\def\AlPh@StepAlph#1!#2!#3#4{% + \AlPh@ProcessAlph{#2}{#3}{#4}% + #4{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Method `wrap'} +% +% \begin{macro}{\AlPh@Method@wrap} +% \noindent +% |#1|: number of symbols\\ +% |#2|: symbols provider\\ +% |#3|: number to be converted +% \begin{macrocode} +\def\AlPh@Method@wrap#1#2#3{% + \expandafter\AlPh@CheckPositive +| \number#3!% ++ \the\numexpr#3!% + \AlPh@ProcessWrap + {#1}{#2}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AlPh@ProcessWrap} +% |#1|: number to be converted\\ +% |#2|: number of symbols\\ +% |#3|: symbols provider +% \begin{macrocode} +\def\AlPh@ProcessWrap#1#2#3{% + \ifnum#1>#2 % + \@ReturnAfterElseFi{% + \expandafter\AlPh@StepWrap\number + \intcalcInc{\intcalcMod{\intcalcDec{#1}}{#2}}% + !{#3}% + }% + \else + \@ReturnAfterFi{% + #3{#1}% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@StepWrap} +% |#1|: final number\\ +% |#2|: symbols provider +% \begin{macrocode} +\def\AlPh@StepWrap#1!#2{% + #2{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Method `mult'} +% +% After the number of symbols is exhausted, +% repetitions of the symbol are used. +% \begin{gather*} +% x \Def \text{number to be converted}\\ +% n \Def \text{number of symbols}\\ +% r \Def \text{repetition length}\\ +% s \Def \text{symbol slot}\\ +% r = ((x - 1) \div n) + 1\\ +% s = ((x - 1) \mod n) + 1 +% \end{gather*} +% \begin{macro}{\AlPh@Method@mult} +% \noindent +% |#1|: number of symbols\\ +% |#2|: symbols provider\\ +% |#3|: number to be converted +% \begin{macrocode} +\def\AlPh@Method@mult#1#2#3{% + \expandafter\AlPh@CheckPositive +| \number#3!% ++ \the\numexpr#3!% + \AlPh@ProcessMult + {#1}{#2}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AlPh@ProcessMult} +% |#1|: number to be converted\\ +% |#2|: number of symbols\\ +% |#3|: symbols provider +% \begin{macrocode} +\def\AlPh@ProcessMult#1#2#3{% + \ifnum#1>#2 % + \@ReturnAfterElseFi{% + \expandafter\AlPh@StepMult\romannumeral + \intcalcInc{\intcalcDiv{\intcalcDec{#1}}{#2}}% + 000% + \expandafter!\number + \intcalcInc{\intcalcMod{\intcalcDec{#1}}{#2}}% + !{#3}% + }% + \else + \@ReturnAfterFi{% + #3{#1}% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@StepMult} +% |#1#2|: repetitions coded as list of character `m'\\ +% |#3|: symbol slot\\ +% |#4|: symbols provider +% \begin{macrocode} +\def\AlPh@StepMult#1#2!#3!#4{% + \ifx\\#2\\% + \else + \@ReturnAfterFi{% + \AlPh@StepMult#2!#3!{#4}% + }% + \fi + #4{#3}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{User interface} +% +% \begin{macro}{\newalphalph} +% Macro \cs{newalphalph} had three arguments in versions below 2.0. +% For the new method argument we use an optional argument an first +% position.\\ +% |#1|: cmd\\ +% |[#2]|: method name: |alph| (default), |wrap|, |mult|\\ % hash-ok +% |#3|: symbols provider\\ +% |#4|: number of symbols +% \begin{macrocode} +\AlPh@IfDefinable\newalphalph{% + \def\newalphalph#1{% + \AlPh@IfOptArg{% + \AlPh@newalphalph{#1}% + }{% + \AlPh@newalphalph{#1}[alph]% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@newalphalph} +% |#1|: cmd +% |#2|: method name\\ +% |#3|: symbols provider\\ +% |#4|: number of symbols +% \begin{macrocode} +\def\AlPh@newalphalph#1[#2]#3#4{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname AlPh@Method@#2\endcsname\relax + \AlPh@Error{% + Unknown method % +| `#2'% ++ `\detokenize{#2}'% + }% + \else + \ifx\\#4\\% + \AlPh@GetNumberOfSymbols{#3}% + \ifcase\AlPh@Number + \else + \begingroup + \escapechar=92 % backslash + \@PackageInfo{alphalph}{% + Number of symbols for \string#1 is \AlPh@Number + }% + \endgroup + \expandafter\AlPh@NewAlphAlph + \csname AlPh@Method@#2\expandafter\endcsname + \AlPh@Number!{#1}{#3}% + \fi + \else + \expandafter\AlPh@NewAlphAlph + \csname AlPh@Method@#2\expandafter\endcsname +| \number#4!% ++ \the\numexpr#4!% + {#1}{#3}% + \fi + \fi +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AlPh@NewAlphAlph} +% |#1|: method macro\\ +% |#2|: number of symbols\\ +% |#3|: cmd\\ +% |#4|: symbols provider +% \begin{macrocode} +\def\AlPh@NewAlphAlph#1#2!#3#4{% + \AlPh@IfDefinable#3{% + \ifnum#2>0 % + \def#3{#1{#2}{#4}}% + \else + \AlPh@Error{% + Definition of \string#3 failed,\MessageBreak + because number of symbols (#2) is not positive% + }% + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AlphAlph} +% \begin{macrocode} +\newalphalph\AlphAlph\alphalph@Alph{26} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\alphalph} +% \begin{macrocode} +\newalphalph\alphalph\alphalph@alph{26} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\AlPh@AtEnd% +% +% \end{macrocode} +% +% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{alphalph}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/alphalph/alphalph.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/alphalph/alphalph.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `alphalph' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/alphalph.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{alphalph.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip alphalph.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex alphalph.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% alphalph.sty & tex/generic/alphalph/alphalph.sty\\ +% alphalph.pdf & doc/latex/alphalph/alphalph.pdf\\ +% alphalph.dtx & source/latex/alphalph/alphalph.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{alphalph.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex alphalph.dtx +%makeindex -s gind.ist alphalph.idx +%pdflatex alphalph.dtx +%makeindex -s gind.ist alphalph.idx +%pdflatex alphalph.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{History} +% \begin{Version}{1999/03/19 v0.1} +% \item +% The first version was built as a response to a +% \URL{\link{question}}^^A +% {https://groups.google.com/group/comp.text.tex/msg/17a74cd721641038}^^A +% of \NameEmail{Will Douglas}{william.douglas@wolfson.ox.ac.uk} +% and the +% \URL{\link{request}}^^A +% {https://groups.google.com/group/comp.text.tex/msg/8f9768825640315f}^^A +% of \NameEmail{Donald Arsenau}{asnd@reg.triumf.ca}, +% published in the newsgroup +% \href{news:comp.text.tex}{comp.text.tex}: +% \URL{``\link{Re: alph counters \textgreater\ 26}''}^^A +% {https://groups.google.com/group/comp.text.tex/msg/cec563eef8bf65d0} +% \item +% Copyright: LPPL (\CTAN{macros/latex/base/lppl.txt}) +% \end{Version} +% \begin{Version}{1999/04/12 v1.0} +% \item +% Documentation added in dtx format. +% \item +% \hologo{eTeX} support added. +% \end{Version} +% \begin{Version}{1999/04/13 v1.1} +% \item +% Minor documentation change. +% \item +% First CTAN release. +% \end{Version} +% \begin{Version}{1999/06/26 v1.2} +% \item +% First generic code about \cmd{\ProvidesPackage} improved. +% \item +% Documentation: Installation part revised. +% \end{Version} +% \begin{Version}{2006/02/20 v1.3} +% \item +% Reload check (for \hologo{plainTeX}) +% \item +% New DTX framework. +% \item +% LPPL 1.3 +% \end{Version} +% \begin{Version}{2006/05/30 v1.4} +% \item +% \cs{newalphalph} added. +% \end{Version} +% \begin{Version}{2007/04/11 v1.5} +% \item +% Line ends sanitized. +% \end{Version} +% \begin{Version}{2007/09/09 v2.0} +% \item +% New implementation that uses package \cs{intcalc}. +% This removes the dependency on \hologo{eTeX}. +% \item +% \cs{newalphalph} is extended to support new methods `wrap' and 'multi'. +% \item +% Documentation rewritten. +% \end{Version} +% \begin{Version}{2008/08/11 v2.1} +% \item +% Code is not changed. +% \item +% URLs updated from \texttt{www.dejanews.com} +% to \texttt{groups.google.com}. +% \end{Version} +% \begin{Version}{2010/03/01 v2.2} +% \item +% Compatibility with \hologo{iniTeX}. +% \end{Version} +% \begin{Version}{2010/04/18 v2.3} +% \item +% Documentation fixes (Martin M\"unch). +% \end{Version} +% \begin{Version}{2011/05/13 v2.4} +% \item +% Documentation fixes (Jim Diamond) and using package +% \xpackage{hologo} for the documentation. +% \item +% Catalogue file added. +% \end{Version} +% \begin{Version}{2016/05/16 v2.5} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2019/12/09 v2.6} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/alphalph/alphalph.pdf b/macros/latex/contrib/alphalph/alphalph.pdf new file mode 100644 index 0000000000..50c43eb264 Binary files /dev/null and b/macros/latex/contrib/alphalph/alphalph.pdf differ diff --git a/macros/latex/contrib/askinclude/README.md b/macros/latex/contrib/askinclude/README.md new file mode 100644 index 0000000000..51997bfd6e --- /dev/null +++ b/macros/latex/contrib/askinclude/README.md @@ -0,0 +1,10 @@ +# askinclude + +askinclude package for LaTeX + + + +This package replaces \includeonly by an interactive user +interface. + + diff --git a/macros/latex/contrib/askinclude/askinclude.dtx b/macros/latex/contrib/askinclude/askinclude.dtx new file mode 100644 index 0000000000..04f8d04f17 --- /dev/null +++ b/macros/latex/contrib/askinclude/askinclude.dtx @@ -0,0 +1,1895 @@ +% \iffalse meta-comment +% +% File: askinclude.dtx +% Version: 2019/12/09 v2.5 +% Info: Interactive asking of included files +% +% Copyright (C) +% 1991-1994 Pablo A. Straub +% 2007, 2008, 2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/askinclude/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/askinclude/issues +% +% This work consists of the main source file askinclude.dtx +% and the derived files +% askinclude.sty, askinclude.pdf, askinclude.ins, askinclude.drv, +% +% Distribution: +% CTAN:macros/latex/contrib/askinclude/askinclude.dtx +% CTAN:macros/latex/contrib/askinclude/askinclude.pdf +% +% Unpacking: +% (a) If askinclude.ins is present: +% tex askinclude.ins +% (b) Without askinclude.ins: +% tex askinclude.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{askinclude.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If askinclude.drv is present: +% latex askinclude.drv +% (b) Without askinclude.drv: +% latex askinclude.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex askinclude.dtx +% bibtex askinclude.aux +% makeindex -s gind.ist askinclude.idx +% pdflatex askinclude.dtx +% makeindex -s gind.ist askinclude.idx +% pdflatex askinclude.dtx +% +% Installation: +% TDS:tex/latex/askinclude/askinclude.sty +% TDS:doc/latex/askinclude/askinclude.pdf +% TDS:source/latex/askinclude/askinclude.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: askinclude 2019/12/09 v2.5 Interactive asking of included files} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: askinclude +Version: 2019/12/09 v2.5 + +Copyright (C) + 1991-1994 Pablo A. Straub + 2007, 2008, 2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/askinclude/issues + + +This work consists of the main source file askinclude.dtx +and the derived files + askinclude.sty, askinclude.pdf, askinclude.ins, askinclude.drv, + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{askinclude.ins}{\from{askinclude.dtx}{install}}% + \file{askinclude.drv}{\from{askinclude.dtx}{driver}}% + \nopreamble + \nopostamble + \file{askinclude.bib}{\from{askinclude.dtx}{bib}}% + \usepreamble\defaultpreamble + \usepostamble\defaultpostamble + \usedir{tex/latex/askinclude}% + \file{askinclude.sty}{\from{askinclude.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* askinclude.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `askinclude.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*bib> +@online{texlive, + author={Fairbairns, Robin}, + title={[tex-live] licence on includeonly.sty}, + date={2007-10-13}, + url={https://www.tug.org/pipermail/tex-live/2007-October/014928.html}, + urldate={2011-12-02}, +} +@online{newsthread, + author={Vo{\ss}, Herbert}, + title={askinclude.sty}, + note={Thread in newsgroup {\xnewsgroup{comp.text.tex}}; + Message-ID: {\texttt{fev72m\$b35\$02\$2@news.t-online.com}}}, + date={2007-10-15}, + url={https://groups.google.com/group/comp.text.tex/browse_thread/thread/728a3e73c04c6789/349e31865c40d00c}, + urldate={2011-12-02}, +} +@manual{makematch, + author={Kastrup, David}, + title={makematch.sty: Pattern matching with wildcards}, + date={2007-02-23}, + version={1.7925}, + url={https://ctan.org/pkg/qstest}, + urldate={2011-12-02}, +} +@manual{excludeonly, + author={Luecking, Daniel H. and Arseneau, Donald}, + title={The excludeonly package}, + date={2003-03-14}, + url={https://ctan.org/pkg/excludeonly}, + urldate={2011-12-02}, +} +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{askinclude.drv}% + [2019/12/09 v2.5 Interactive asking of included files]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\usepackage{iftex} +\ifluatex +\else + \usepackage[T1]{fontenc}% + \usepackage{lmodern}% +\fi +\usepackage{csquotes} +\usepackage[ + backend=bibtex, + bibencoding=ascii, + alldates=iso,seconds=true, +]{biblatex}[2011/11/13] +\bibliography{oberdiek-source} +\bibliography{askinclude} +\begin{document} + \DocInput{askinclude.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{askinclude.drv} +% +% \title{The \xpackage{askinclude} package} +% \date{2019/12/09 v2.5} +% \author{ +% Pablo A. Straub\\[1ex] +% Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/askinclude/issues}}} +% +% +% \maketitle +% +% \begin{abstract} +% This package replaces \cs{includeonly} by an interactive user +% interface. +% \end{abstract} +% +% \tableofcontents +% +% \section{Documentation} +% +% \subsection{User interface} +% +% The \cs{include} feature of \LaTeX\ allows the division of +% the text body in separate compilation units. It is page +% based and stores counter settings in additional auxiliary +% files. \cs{includeonly} limits the actually included files +% to the ones, listed in its argument. +% +% Example: +%\begin{quote} +%\begin{verbatim} +%\documentclass{report} +% +%\usepackage{askinclude} +% +% % Don't use \include in the preamble. +% % Instead \input can be used or make a package +% +%\begin{document} +%\include{title} +%\include{introduction} +%\include{summary} +%\include{index} +%\end{document} +%\end{verbatim} +%\end{quote} +% +% Package \xpackage{askinclude} adds an interactive user interface. +% The user is asked which files he want to include and sets +% \cs{includeonly} accordingly. +% +% The first time the package is used the question looks like: +%\begin{quote} +%\begin{verbatim} +%*********************************** +%*** Package askinclude Question *** +%*********************************** +% +%Previous answer (noregexp): +% [*] +% +%Regular expressions: +% --> [noregexp] disabled +% [makematch] enabled, using package `makematch' +% [pdfmatch] enabled, using pdfTeX's \pdfmatch +% +%Which files do you want to include? +% [foo,bar] comma separated file or pattern list +% [*] all files +% [-] no files +% [?] ask for each file +% [] use the previous answer +% +%\answer=chapter2,summary +%\end{verbatim} +%\end{quote} +% Square brackets are used as quotation symbols, +% they are not part of the answer. +% The answer by the user follows in the last line after |\answer=|. +% \begin{description} +% \def\Item[#1]{\item[{[\texttt{#1}]:}]} +% \Item[foo,bar] +% A comma separated file list (also one file only) is passed +% to macro \cs{includeonly} directly. If regular expression support +% is enabled, the entries in the list are interpreted as +% file name patterns that will be matched against the file names +% in \cs{include}, see \hyperref[sec:regexp]{section \ref*{sec:regexp}}. +% \Item[*] This is a shortcut for specifying \emph{all} files. +% \Item[-] This means \emph{none} of the files is included. +% \Item[?] The switches in single asking mode. +% The user will be asked at each \cs{include}. +% See section \hyperref[sec:single]{section \ref*{sec:single}}. +% \Item[] Just pressing return (empty string) uses the default +% answer, that was stored in the auxiliary file (\xfile{.aux}) +% of the previous \LaTeX run with package \xpackage{askinclude}. +% Without previous runs the default is [|*|] for all files. +% \Item[noregexp] Turns regular expression support off. +% \Item[makematch] Enables regular expression support +% package \xpackage{makematch} provides. +% \Item[pdfmatch] It is shown, if \pdfTeX~1.30 or later is used. +% It relies on an undocumented feature \cs{pdfmatch} that may +% change in future versions of \pdfTeX. +% \end{description} +% Package \xpackage{askinclude} remembers the files of \cs{include} +% in the auxiliary file and the given answer. they are +% presented at the next run +% at the start of the question: +%\begin{quote} +%\begin{verbatim} +%*********************************** +%*** Package askinclude Question *** +%*********************************** +% +%Files, found by previous run in \include: +% (-) title +% (-) introduction +% (-) chapter1 +% (+) chapter2 +% (-) chapter3 +% (+) summary +% +%Previous answer (noregexp): +% [chapter2,summary] +%... +%\end{verbatim} +%\end{quote} +% |(+)| and |(-)| marks files that were and were not included in +% the previous run. The file list and marks are not always correct. +% For example, if \cs{include} statements are added or removed. +% If the method of regular expression support is different, +% then the marks only reflects the mode of the previous answer. +% +% \subsection{Single asking mode} +% \label{sec:single} +% +% The special answer `|?|' trigger single asking mode, +% at the next \cs{include} the user is asked again: +%\begin{quote} +%\begin{verbatim} +%*********************************** +%*** Package askinclude Question *** +%*********************************** +% +%Include `title'? [y]es, [n]o, [A]ll, [N]one, [D]efault (n): +% +%\answer= +%\end{verbatim} +%\end{quote} +% Use the letter inside the square brackets as answer. +% An empty string uses the default answer, the letter in parentheses. +% The answers are: +% \begin{description} +% \def\Item[#1]{\item[{[\texttt{#1}]:}]} +% \Item[y] The file is included. +% \Item[n] The file is excluded. +% \Item[A] This file and all following files are included. +% \Item[N] This file and all following files are excluded. +% \Item[D] Use the default answer for this and all following files. +% \end{description} +% If the file is known from the previous run, then the +% default is `|y|' or `|n|' corresponding to the mark +% `|(+)|' or `|(-)|' in the list of previous files. +% Otherwise `|y|' is used as default. +% +% \subsection{Regular expressions} +% \label{sec:regexp} +% +% Three methods are available that can also set by package options: +% \begin{description} +% \def\Item[#1]{\item[\xoption{#1}:]} +% \Item[noregexp] Regular expression support is disabled. +% \Item[makematch] Use package \xpackage{makematch}. +% \Item[pdfmatch] Use \pdfTeX's \cs{pdfmatch} if available. +% \end{description} +% Without options the value remembered in the auxiliary file +% is used, otherwise the default is \xoption{noregexp}. +% +% \subsubsection{Method \xoption{makematch}} +% +% Package \xpackage{makematch} (part of \xpackage{qstest}), written +% by David Kastrup provides pattern matching based on wildcards: +% \begin{description} +% \item[{[\texttt{*}]}:] The star matches zero or more characters. +% Thus a lonely star machtes anything. +% \item[{[\texttt{!}]}:] The exclamation mark at the begin of a +% pattern negates it, thus the matching files are excluded. +% \end{description} +% The pattern list is evaluated for a file name from left to +% right. Always a file name must match the whole pattern. +% The file is included if it is matched by a pattern and +% not excluded afterwards. Examples: +% \begin{quote} +% \def\no{\textrm{$\emptyset$}} +% \begin{tabular}{>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l} +% \textrm{Pattern list} & \textrm{File names} & \textrm{Result}\\ +% \hline +% foobar & foobar,dummy & foobar\\ +% foo* & foobar,xfoobar & foobar\\ +% \relax *foo* & xfoobar & xfoobar\\ +% f*b*r & foobar & foobar\\ +% \relax * & any & any\\ +% !foobar & foobar,other & other\\ +% !foo* & xfoobar & xfoobar\\ +% in*,!*dex & intro,index & intro\\ +% !index,in* & intro,index & intro,index\\ +% \relax *,!chap2 & chap1,chap2,chap3 & chap1,chap3\\ +% \end{tabular} +% \end{quote} +% The example in the last line shows, how the behaviour of package +% \xpackage{excludeonly} \cite{excludeonly} can be simulated. +% +% The documentation of package \xpackage{makematch} tells the +% the empty pattern does not match anything. But if you answer +% the question with an empty string the answer of the previous +% run is used. Also curly braces are not reliable because the +% can get stripped during the processing of the answer. +% Using a pair of empty curly braces or the comma for two empty +% patterns currently works, but this is specific for the current +% implementation and may change in future. But the special +% answer `-' is available. +% +% \subsubsection{Method \xoption{pdfmatch}} +% +% In \pdfTeX\ 1.30 the new primitive \cs{pdfmatch} was introduced. +% It is not documented yet, because it was not decided if it remains +% and which implementation of regular expressions should be used. +% Thus the situation may change in later versions of \pdfTeX. +% Currently (1.30 until 1.40) it uses a library for POSIX 1003.2 regular +% expressions, see manual page ``regex(7)''. +% +% If a pattern in the pattern list is invalid, the package prints +% a warning and removes the pattern from the list. Actually there +% are two warnings, the other warning is generated by \pdfTeX\ itself. +% +% In opposite to \xoption{makematch} the pattern only needs to +% match the specified part of the file name. +% For matching the whole name, the symbols `|^|' and `|$|' for +% begin and end of string must be included. +% +% Additionally an initial exclamation mark `|!|' implements the +% same logic as method \xoption{makematch}. The match result is +% inverted, the matched file excluded. +% +% Examples: +% \begin{quote} +% \def\no{\textrm{$\emptyset$}} +% \begin{tabular}{>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l} +% \textrm{Pattern list} & \textrm{File names} & \textrm{Result}\\ +% \hline +% foobar & foobar,dummy & foobar\\ +% foo.* & foobar,xfoobar & foobar,xfoobar\\ +% |^|foo.* & foobar,xfoobar & foobar\\ +% foo|$| & foo,foobar & foo\\ +% fo?bar & fbar,fobar,foobar & fbar,fobar\\ +% fo+bar & fbar,fobar,foobar & fobar,foobar\\ +% fo*bar & fbar,fobar,foobar & fbar,fobar,foobar\\ +% chap3 & chap3,chap32 & chap1,chap3,chap32\\ +% chap[13] & chap1,chap2,chap3 & chap1,chap3\\ +% chap(1\string|3)|$| & chap1,chap3,chap33 & chap1,chap3\\ +% .* & any & any\\ +% !foobar & foobar,other & other\\ +% in.*,!dex & intro,index & intro\\ +% !index,in.* & intro,index & intro,index\\ +% .*,!chap2 & chap1,chap2,chap3 & chap1,chap3\\ +% .*,!bla & foo,bla,blabla & foo\\ +% .*,!|^|bla|$| & foo,bla,blabla & foo,blabla\\ +% \end{tabular} +% \end{quote} +% The example in the last line shows, how the behaviour of package +% \xpackage{excludeonly} \cite{excludeonly} can be simulated. +% As the third last line shows, that sometimes `|^|' and `|$|' can +% be omitted, but this will not work always, shown in the second +% last line. +% +% \subsection{History} +% +% Package \xpackage{askinclude} was invented by Pablo A. Straub in 1991 +% and maintained until 1994. +% ^^A Email address: pablo.straub \symbol{64} gmail.com +% +% In October 2007 it was removed from ``TeX Live'' because of +% the no-commercial license \cite{texlive}. Herbert Vo\ss\ initiated +% a search for the author in the newsgroup \xnewsgroup{comp.text.tex} +% \cite{newsthread} to ask him to change the license. +% +% It seems that the author could not be reached any more. +% Joseph Wright suggested a reimplementation that I (HO) have done +% as package \xpackage{askinc}. Soon it was enhanced by +% feature requests. +% +% Then Ulrike Fischer found email addresses of the original author +% and Jim Hefferon succeeded in contacting him. He allowed a change +% of the license to LPPL and the transfer of the maintainership +% to someone else. +% +% Thus I merged both packages as \xpackage{askinclude} in a new +% major version 2. The license is LPPL. +% +% \subsection{New features of version 2} +% +% \begin{itemize} +% \item License is now LPPL. +% \item A list of \cs{include} files that are detected by the previous +% run is printed before the question. +% \item If the special answer `|?|' is given, then the user is +% asked at each \cs{include}. +% \item Support for regular expressions. +% \item The remaining stuff in the \xfile{.aux} file does not +% cause errors, if the package is removed. +% \item The use of \cs{includeonly} before the package loading time +% is detected and respected by taking precedence. After the package +% is loaded, \cs{includeonly} is disabled and prints a warning. +% \end{itemize} +% +% \subsection{Compatibility to version 1} +% +% \begin{itemize} +% \item The user interface of version 1 with its special answers +% `|*|', `|-|', and `' remain unchanged, but it is extended by +% version 2 with the special answer `|?|' and support for +% regular expressions can be enabled. +% \item As reimplementation the internal macros have changed of course. +% \item \xfile{.aux} files that are written by version 1.x will work +% with version 2.x because \cs{@includeonly} is recognized. +% \item \LaTeX\ 2.09: The package works as \cs{documentstyle} option +% in compatibility mode of \LaTeXe. It is possible that it +% will not work in pure \LaTeX\ 2.09. +% \end{itemize} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \subsection{Header and catcodes} +% +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname AskInc@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\AskInc@AtEnd{% + \AskInc@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{33}{12}% ! +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{42}{12}% * +\TMP@EnsureCode{43}{12}% + +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{12}% : +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{63}{12}% ? +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{96}{12}% ` +\edef\AskInc@AtEnd{\AskInc@AtEnd\noexpand\endinput} +\ProvidesPackage{askinclude}% + [2019/12/09 v2.5 Interactive asking of included files]% +% \end{macrocode} +% +% Luatex compat +% \begin{macrocode} +\ifx\pdfextension\@undefined\else + \protected\def\pdflastobj {\numexpr\pdffeedback lastobj\relax} + \protected\def\pdfnames {\pdfextension names } + \protected\def\pdfobj {\pdfextension obj } + \let\pdfoutput \outputmode +\fi +% \end{macrocode} +% +% \subsection{Delay action after preamble} +% +% \begin{macro}{\AskInc@AtBeginDocument} +% Some actions such as \xfile{.aux} file writing cannot be +% performed in the preamble. \cs{AtBeginDocument} delays +% such action until |\begin{document}|. However \cs{AtBeginDocument} +% must not be used after that time (\cs{@onlypreamble}). +% Thus \cs{AskInc@AtBeginDocument} uses \cs{AtBeginDocument} +% in the preamble and afterwards executes the code immediately. +% \begin{macrocode} +\AtBeginDocument{% + \let\AskInc@AtBeginDocument\@firstofone +} +\providecommand*{\AskInc@AtBeginDocument}{\AtBeginDocument} +% \end{macrocode} +% \end{macro} +% +% \subsection{Write entry in \xfile{.aux} file} +% +% \begin{macro}{\AskInc@WriteAux} +% The first argument is written to the main \xfile{.aux} file +% and the second argument is executed if writing was possible. +% Remember \cs{nofiles} prevents writing to auxiliary files. +% \begin{macrocode} +\def\AskInc@WriteAux#1#2{% + \AskInc@AtBeginDocument{% + \if@filesw + \immediate\write\@mainaux{#1}% + #2% + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Remember \cs{include} files} +% +% \begin{macro}{\AskInc@CharHash} +% \begin{macrocode} +\edef\AskInc@CharHash{\string#} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AskInc@WriteDefAddList} +% \begin{macrocode} +\def\AskInc@WriteDefAddList{% + \AskInc@WriteAux{% +% \end{macrocode} +% \begin{macro}{\AskInc@AddList} +% \begin{macrocode} + \string\providecommand*\string\AskInc@AddList[2]{% + \string\ifcase\string\ifx\AskInc@CharHash1\string\@undefined + \string\else + \string\ifx\AskInc@CharHash1\string\relax + \string\else + \string\ifx\AskInc@CharHash1\string\@empty + \string\else + 1% + \string\fi + \string\fi + \string\fi + 0 % + \string\gdef\AskInc@CharHash1{\AskInc@CharHash2}% + \string\else + \string\g@addto@macro\AskInc@CharHash1{,\AskInc@CharHash2}% + \string\fi + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + }{% + \global\let\AskInc@WriteDefAddList\relax + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@WriteDefAddFile} +% \begin{macrocode} +\def\AskInc@WriteDefAddFile{% + \AskInc@WriteDefAddList + \AskInc@WriteAux{% +% \end{macrocode} +% \begin{macro}{\AskInc@AddFile} +% \begin{macrocode} + \string\providecommand\string\AskInc@AddFile{% + \string\AskInc@AddList\string\AskInc@Files + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + }{% + \global\let\AskInc@WriteDefAddFile\relax + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@AddFile} +% \begin{macrocode} +\AtBeginDocument{% + \global\let\AskInc@AddFile\@gobble +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@WriteAddFile} +% \begin{macrocode} +\def\AskInc@WriteAddFile#1{% + \AskInc@WriteDefAddFile + \AskInc@WriteAux{% + \string\AskInc@AddFile{#1}% + }{}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@Files} +% \begin{macrocode} +\providecommand*{\AskInc@Files}{} +% \end{macrocode} +% \end{macro} +% +% \paragraph{Summary:} +% Now \cs{AskInc@Files} is always defined +% and either empty or contains a comma separated list of +% \cs{include} files of previous run. +% +% The \cs{include} files are remembered by using +% \cs{AskInc@WriteAddFile} at each \cs{include}. +% +% \subsection{Redefine \cs{include}} +% +% \begin{macro}{\AskInc@OrgInclude} +% \begin{macrocode} +\newcommand{\AskInc@OrgInclude}{} +\let\AskInc@OrgInclude\include +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@AskFile} +% \begin{macrocode} +\let\AskInc@AskFile\@gobble +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@MatchFile} +% \begin{macrocode} +\let\AskInc@MatchFile\@gobble +% \end{macrocode} +% \end{macro} +% \begin{macro}{\include} +% \begin{macrocode} +\renewcommand*{\include}[1]{% + \AskInc@WriteAddFile{#1}% + \AskInc@AskFile{#1}% + \AskInc@MatchFile{#1}% + \AskInc@OrgInclude{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Store answer and match method in \xfile{.aux} file} +% +% \begin{macrocode} +\AtEndOfPackage{% + \AtBeginDocument{% + \@ifundefined{AskInc@Answer}{}{% + \AskInc@WriteAux{% + \string\gdef\string\AskInc@Answer{\AskInc@Answer}% + }{}% + }% + \@ifundefined{AskInc@MatchMethod}{}{% + \AskInc@WriteAux{% + \string\gdef\string\AskInc@MatchMethod{\AskInc@MatchMethod}% + }{}% + }% + }% +} +% \end{macrocode} +% +% \subsection{Support for \cs{@includeonly}} +% +% \begin{macro}{\@includeonly} +% Macro \cs{@includeonly} is defined for compatiblity reasons only, +% if the \xfile{.aux} file was written by versions before 2 of package +% \xpackage{askinclude}. +% \begin{macrocode} +\providecommand*{\@includeonly}[1]{% + \gdef\AskInc@Answer{#1}% + \ifx\AskInc@Answer\@empty + \gdef\AskInc@Answer{-}% + \fi + \global\let\AskInc@MatchMethod\@empty +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Stop if \cs{includeonly} is active} +% +% If \cs{includeonly} is used before, the questions are skipped +% and the data in the main auxiliary file is preserved. +% \begin{macrocode} +\if@partsw + \PackageWarningNoLine{askinclude}{% + Previous \string\includeonly\space detected,\MessageBreak + therefore asking for files is suppressed% + }% +% \end{macrocode} +% Dummy options. +% \begin{macrocode} + \DeclareOption{makematch}{}% + \DeclareOption{pdfmatch}{}% + \DeclareOption{noregexp}{}% + \ProcessOptions*% +% \end{macrocode} +% Preserve \cs{AskInc@MatchFiles}. +% \begin{macrocode} + \@ifundefined{AskInc@MatchFiles}{% + }{% + \ifx\AskInc@MatchMethod\@empty + \else + \AskInc@WriteAux{% + \string\gdef\string\AskInc@MatchFiles{\AskInc@MatchFiles}% + }{}% + \fi + }% + \expandafter\AskInc@AtEnd +\fi% +% \end{macrocode} +% +% \subsection{\cs{includeonly}} +% +% \begin{macro}{\AskInc@OrgIncludeOnly} +% \begin{macrocode} +\newcommand{\AskInc@OrgIncludeOnly}{}% +\let\AskInc@OrgIncludeOnly\includeonly +% \end{macrocode} +% \end{macro} +% \begin{macro}{\includeonly} +% \begin{macrocode} +\renewcommand*{\includeonly}[1]{% + \PackageWarning{askinclude}{% + \string\includeonly\space is managed by package `askinclude',% + \MessageBreak + therefore it is ignored% + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Options} +% +% \begin{macro}{\AskInc@StringNoRegExp} +% \begin{macrocode} +\def\AskInc@StringNoRegExp{noregexp} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@StringMakeMatch} +% \begin{macrocode} +\def\AskInc@StringMakeMatch{makematch} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@StringPdfMatch} +% \begin{macrocode} +\def\AskInc@StringPdfMatch{pdfmatch} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifAskInc@PdfMatchAvailable} +% \begin{macrocode} +\newif\ifAskInc@PdfMatchAvailable +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname pdfmatch\endcsname\relax +\else + \AskInc@PdfMatchAvailabletrue +\fi +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\DeclareOption{makematch}{% + \let\AskInc@MatchOption\AskInc@StringMakeMatch +} +\ifAskInc@PdfMatchAvailable + \DeclareOption{pdfmatch}{% + \let\AskInc@MatchOption\AskInc@StringPdfMatch + }% +\else + \DeclareOption{pdfmatch}{% + \PackageWarningNoLine{askinclude}{% + Option `pdfmatch' is not available because\MessageBreak + your pdfTeX does not provide \string\pdfmatch + }% + }% +\fi +\DeclareOption{noregexp}{% + \let\AskInc@MatchOption\@empty +} +\ProcessOptions* +% \end{macrocode} +% +% \subsection{Strings} +% +% \begin{macro}{\AskInc@CharAsterisk} +% \begin{macrocode} +\def\AskInc@CharAsterisk{*} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharMinus} +% \begin{macrocode} +\def\AskInc@CharMinus{-} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharPlus} +% \begin{macrocode} +\def\AskInc@CharPlus{+} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharQuestion} +% \begin{macrocode} +\def\AskInc@CharQuestion{?} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharExclam} +% \begin{macrocode} +\def\AskInc@CharExclam{!} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharYes} +% \begin{macrocode} +\def\AskInc@CharYes{y} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharNo} +% \begin{macrocode} +\def\AskInc@CharNo{n} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharAll} +% \begin{macrocode} +\def\AskInc@CharAll{A} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharNone} +% \begin{macrocode} +\def\AskInc@CharNone{N} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CharDefault} +% \begin{macrocode} +\def\AskInc@CharDefault{D} +% \end{macrocode} +% \end{macro} +% +% \subsection{Set defaults} +% +% \begin{macro}{\AskInc@SanitizeAnswer} +% \begin{macrocode} +\def\AskInc@SanitizeAnswer#1#2{% + \begingroup + \escapechar=`\\% + \edef\[{\string\[}% + \edef\]{\string\]}% + \edef\({\string\(}% + \edef\){\string\)}% + \edef\*{\string\*}% + \edef\+{\string\+}% + \edef\?{\string\?}% + \edef\|{\string\|}% + \edef\^{\string\^}% + \edef\${\string\$}% + \edef\{{\string\{}% + \edef\}{\string\}}% + \edef\.{\string\.}% + \xdef#1{% + \expandafter\expandafter\expandafter\zap@space + \expandafter#2\space\@empty + }% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\AtBeginDocument{% + \@ifundefined{AskInc@Answer}{% + \global\let\AskInc@Answer\AskInc@CharAsterisk + }{% + \AskInc@SanitizeAnswer\AskInc@Answer\AskInc@Answer + }% + \global\let\AskInc@PreviousAnswer\AskInc@Answer + \@ifundefined{AskInc@MatchMethod}{% + \global\let\AskInc@MatchMethod\@empty + }{}% + \global\let\AskInc@PreviousMatchMethod\AskInc@MatchMethod + \@ifundefined{AskInc@MatchOption}{% + \let\AskInc@MatchOption\AskInc@MatchMethod + }{}% + \ifx\AskInc@MatchOption\AskInc@StringPdfMatch + \ifAskInc@PdfMatchAvailable + \else + \let\AskInc@MatchOption\@empty + \fi + \fi + \@ifundefined{AskInc@MatchFiles}{% + \let\AskInc@MatchFiles\@empty + }{}% +} +% \end{macrocode} +% +% \subsection{Questions} +% +% \subsubsection{Generic question header} +% +% \begin{macro}{\AskInc@QuestionHeader} +% \begin{macrocode} +\def\AskInc@QuestionHeader{% + \typeout{}% + \typeout{***********************************}% + \typeout{*** Package askinclude Question ***}% + \typeout{***********************************}% + \typeout{}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Display files} +% +% \begin{macro}{\AskInc@TypeoutFiles} +% \begin{macrocode} +\def\AskInc@TypeoutFiles{% + \global\let\AskInc@PreviousMatches\@empty + \ifx\AskInc@Files\@empty + \else + \typeout{Files, found by previous run in \string\include:}% + \@for\AskInc@File:=\AskInc@Files\do{% + \ifx\AskInc@Answer\AskInc@CharAsterisk + \let\AskInc@Mark\AskInc@CharPlus + \else + \let\AskInc@Mark\AskInc@CharMinus + \ifx\AskInc@Answer\AskInc@CharMinus + \else + \ifx\AskInc@MatchMethod\@empty + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\@for\AskInc@Temp:=\AskInc@Answer}% + {\@for\AskInc@Temp:=\AskInc@MatchFiles}% + \do{% + \ifx\AskInc@File\AskInc@Temp + \let\AskInc@Mark\AskInc@CharPlus + \fi + }% + \fi + \fi + \typeout{ \@spaces(\AskInc@Mark) \AskInc@File}% + \ifx\AskInc@Mark\AskInc@CharPlus + \ifx\AskInc@PreviousMatches\@empty + \global\let\AskInc@PreviousMatches\AskInc@File + \else + \expandafter\g@addto@macro + \expandafter\AskInc@PreviousMatches{% + \expandafter,\AskInc@File + }% + \fi + \fi + }% + \typeout{}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Previous answer} +% +% \begin{macro}{\AskInc@TypeoutPreviousAnswer} +% \begin{macrocode} +\def\AskInc@TypeoutPreviousAnswer{% + \typeout{% + Previous answer (% + \ifx\AskInc@MatchMethod\@empty + noregexp% + \else + \AskInc@MatchMethod + \fi + ):% + }% + \typeout{ \@spaces[\AskInc@Answer]}% + \typeout{}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Current regular expression support} +% +% \begin{macro}{\AskInc@TypeoutMatchMethod} +% \begin{macrocode} +\def\AskInc@TypeoutMatchMethod{% + \typeout{Regular expressions:}% + \AskInc@TypeoutMethod\@empty{noregexp}{% + \space disabled% + }% + \AskInc@TypeoutMethod\AskInc@StringMakeMatch{makematch}{% + enabled, using package `makematch'% + }% + \ifAskInc@PdfMatchAvailable + \AskInc@TypeoutMethod\AskInc@StringPdfMatch{pdfmatch}{% + \space enabled, using pdfTeX's \string\pdfmatch + }% + \fi + \typeout{}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@TypeoutMethod} +% \begin{macrocode} +\def\AskInc@TypeoutMethod#1#2#3{% + \typeout{% + \ifx#1\AskInc@MatchOption \space--> \else\@spaces\space\fi + [#2] #3% hash-ok + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Main question text} +% +% \begin{macro}{\AskInc@TypeoutMainQuestion} +% \begin{macrocode} +\def\AskInc@TypeoutMainQuestion{% + \typeout{Which files do you want to include?}% + \typeout{ \@spaces[foo,bar] \space\space + comma separated file or pattern list}% + \typeout{ \@spaces[*] \@spaces\@spaces all files}% + \typeout{ \@spaces[-] \@spaces\@spaces no files}% + \typeout{ \@spaces[?] \@spaces\@spaces ask for each file}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Main question} +% +% \begin{macro}{\AskInc@MainQuestion} +% \begin{macrocode} +\def\AskInc@MainQuestion{% + \AskInc@QuestionHeader + \AskInc@TypeoutFiles + \AskInc@TypeoutPreviousAnswer + \AskInc@TypeoutMatchMethod + \AskInc@TypeoutMainQuestion + \begingroup + \@makeother\*% + \@makeother\-% + \@makeother\?% + \@makeother\,% + \@makeother\!% + \@makeother\^% + \@makeother\$% + \@makeother\(% + \@makeother\)% + \@makeother\+% + \@makeother\[% + \@makeother\]% + \@makeother\\% + \@makeother\|% + \@makeother\:% + \@makeother\.% + \typein[\answer]% + { \@spaces[] \space\@spaces\@spaces use the previous answer}% + \typeout{}% + \AskInc@SanitizeAnswer\AskInc@@Answer\answer + \endgroup + \let\AskInc@Next\AskInc@MainQuestion + \ifx\AskInc@@Answer\AskInc@StringNoRegExp + \let\AskInc@MatchOption\@empty + \else + \ifx\AskInc@@Answer\AskInc@StringMakeMatch + \let\AskInc@MatchOption\AskInc@StringMakeMatch + \else + \ifx\AskInc@@Answer\AskInc@StringPdfMatch + \ifAskInc@PdfMatchAvailable + \let\AskInc@MatchOption\AskInc@StringPdfMatch + \else + \PackageWarning{askinclude}{% + Method `pdfmatch' is not available because\MessageBreak + your pdfTeX does not provide \string\pdfmatch + }% + \let\AskInc@MatchOption\@empty + \fi + \else + \ifx\AskInc@@Answer\@empty + \global\let\AskInc@@Answer\AskInc@Answer + \fi + \let\AskInc@Next\AskInc@MainAnswer + \fi + \fi + \fi + \AskInc@Next +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Evaluate answer of main question} +% +% \begin{macro}{\AskInc@MainAnswer} +% \begin{macrocode} +\def\AskInc@MainAnswer{% + \ifx\AskInc@@Answer\AskInc@CharQuestion + \global\let\AskInc@Answer\@empty + \global\let\AskInc@MatchMethod\@empty + \global\let\AskInc@AskFile\AskInc@DoAskFile + \AskInc@OrgIncludeOnly{}% + \else + \global\let\AskInc@Answer\AskInc@@Answer + \ifx\AskInc@@Answer\AskInc@CharAsterisk + \global\let\AskInc@MatchMethod\@empty + \else + \ifx\AskInc@@Answer\AskInc@CharMinus + \global\let\AskInc@MatchMethod\@empty + \AskInc@OrgIncludeOnly{}% + \else + \global\let\AskInc@MatchMethod\AskInc@MatchOption + \ifx\AskInc@MatchOption\@empty + \expandafter\AskInc@OrgIncludeOnly\expandafter{% + \AskInc@Answer + }% + \else + \AskInc@MatchInit + \AskInc@OrgIncludeOnly{}% + \fi + \fi + \fi + \fi + \let\AskInc@Include\AskInc@DoInclude +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AskInc@MatchInit} +% \begin{macrocode} +\def\AskInc@MatchInit{% + \RequirePackage{kvsetkeys}[2007/09/29]% + \expandafter\comma@normalize\expandafter{\AskInc@Answer}% + \global\let\AskInc@MatchList\comma@list +% \end{macrocode} +% \begin{macro}{\AskInc@MatchFile} +% \begin{macrocode} + \def\AskInc@MatchFile##1{% + \AskInc@DoMatch{##1}{% + \AskInc@WriteAddMatch{##1}% + \ifx\@partlist\@empty + \gdef\@partlist{##1}% + \else + \g@addto@macro\@partlist{,##1}% + \fi + }% + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + \ifx\AskInc@MatchMethod\AskInc@StringMakeMatch + \AskInc@MakeMatchInit + \else + \AskInc@PdfMatchInit + \fi + \let\AskInc@MatchInit\@undefined +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@MakeMatchInit} +% \begin{macrocode} +\def\AskInc@MakeMatchInit{% + \RequirePackage{makematch}% +% \end{macrocode} +% \begin{macro}{\AskInc@DoMatch} +% \begin{macrocode} + \def\AskInc@DoMatch##1{% + \def\AskInc@Temp{% + \MakeMatcher[,]\AskInc@Temp + }% + \expandafter\AskInc@Temp\expandafter{\AskInc@MatchList}% + \AskInc@Temp{{##1}}\@firstofone\@gobble + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + \let\AskInc@MakeMatchInit\@undefined +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@PdfMatchInit} +% \begin{macrocode} +\def\AskInc@PdfMatchInit{% +% \end{macrocode} +% \begin{macro}{\ifAskInc@Found} +% \begin{macrocode} + \newif\ifAskInc@Found +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@DoMatch} +% \begin{macrocode} + \def\AskInc@DoMatch##1{% + \AskInc@Foundfalse + \expandafter\comma@parse@normalized\expandafter + {\AskInc@MatchList}{\AskInc@CheckMatch{##1}}% + \ifAskInc@Found + \expandafter\@firstofone + \else + \expandafter\@gobble + \fi + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@CheckMatch} +% \begin{macrocode} + \def\AskInc@CheckMatch##1##2{% + \AskInc@@CheckMatch##2\@empty\@nil{##1}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@@CheckMatch} +% \begin{macrocode} + \def\AskInc@@CheckMatch##1##2\@nil##3{% + \def\AskInc@Temp{##1}% + \ifx\AskInc@Temp\AskInc@CharExclam + \ifcase\pdfmatch{##2}{##3}=1 % + \or + \AskInc@Foundfalse + \else + \AskInc@InvalidPattern{##2}{##1##2}% + \fi + \else + \ifcase\pdfmatch{##1##2}{##3} % + \or + \AskInc@Foundtrue + \else + \AskInc@InvalidPattern{##1##2}{##1##2}% + \fi + \fi + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@InvalidPattern} +% Prints a warning with the regular expression and +% removes it from the list to prevent further warnings +% for the same expression. +% \begin{macrocode} + \def\AskInc@InvalidPattern##1##2{% + \edef\AskInc@Temp{##1}% + \PackageWarningNoLine{askinclude}{% + Invalid pattern `\AskInc@Temp' for \string\pdfmatch + }% + \edef\AskInc@Temp{##2}% + \global\expandafter\let\expandafter\AskInc@MatchList + \expandafter\@empty + \expandafter\comma@parse@normalized\expandafter + {\AskInc@MatchList}\AskInc@FilterPattern + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@FilterPattern} +% \begin{macrocode} + \def\AskInc@FilterPattern##1{% + \edef\AskInc@Pattern{##1}% + \ifx\AskInc@Temp\AskInc@Pattern + \else + \ifx\AskInc@MatchList\@empty + \global\let\AskInc@MatchList\AskInc@Pattern + \else + \expandafter\g@addto@macro\expandafter\AskInc@MatchList{% + \expandafter,\AskInc@Pattern + }% + \fi + \fi + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + \let\AskInc@PdfMatchInit\@undefined +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AskInc@WriteDefAddMatch} +% \begin{macrocode} +\def\AskInc@WriteDefAddMatch{% + \AskInc@WriteDefAddList + \AskInc@WriteAux{% +% \end{macrocode} +% \begin{macro}{\AskInc@AddMatch} +% \begin{macrocode} + \string\providecommand\string\AskInc@AddMatch{% + \string\AskInc@AddList\string\AskInc@MatchFiles + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + }{% + \global\let\AskInc@WriteDefAddMatch\relax + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@AddMatch} +% \begin{macrocode} +\AtBeginDocument{% + \global\let\AskInc@AddMatch\@gobble +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@WriteAddMatch} +% \begin{macrocode} +\def\AskInc@WriteAddMatch#1{% + \AskInc@WriteDefAddMatch + \AskInc@WriteAux{% + \string\AskInc@AddMatch{#1}% + }{}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AskInc@SaveAnswer} +% \begin{macrocode} +\def\AskInc@SaveAnswer{% + \AskInc@WriteAux{% + \string\gdef\string\AskInc@Answer{\AskInc@Answer}% + }{}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Ask for each file} +% +% \begin{macro}{\AskInc@PreviousAnswer} +% \begin{macrocode} +\@ifundefined{AskInc@PreviousAnswer}{% + \let\AskInc@PreviousAnswer\AskInc@CharAsterisk +}{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@PreviousMatchMethod} +% \begin{macrocode} +\@ifundefined{AskInc@PreviousMatchMethod}{% + \let\AskInc@PreviousMatchMethod\@empty +}{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@DoAskFile} +% \begin{macrocode} +\def\AskInc@DoAskFile#1{% + \edef\AskInc@File{#1}% + \ifx\AskInc@PreviousAnswer\AskInc@CharAsterisk + \let\AskInc@Default\AskInc@CharYes + \else + \let\AskInc@Default\AskInc@CharNo + \ifx\AskInc@PreviousAnswer\AskInc@CharMinus + \else + \ifx\AskInc@PreviousMatchMethod\@empty + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\@for\AskInc@Temp:=\AskInc@PreviousAnswer}% + {\@for\AskInc@Temp:=\AskInc@MatchFiles}% + \do{% + \ifx\AskInc@Temp\AskInc@File + \let\AskInc@Default\AskInc@CharYes + \fi + }% + \fi + \ifx\AskInc@Default\AskInc@CharNo + \let\AskInc@Default\AskInc@CharYes + \@for\AskInc@Temp:=\AskInc@Files\do{% + \ifx\AskInc@Temp\AskInc@File + \let\AskInc@Default\AskInc@CharNo + \fi + }% + \fi + \fi + \let\AskInc@@QuestionHeader\AskInc@QuestionHeader + \AskInc@AskQuestion + \ifx\AskInc@AskResult\AskInc@CharYes + \ifx\AskInc@Answer\@empty + \gdef\AskInc@Answer{#1}% + \else + \g@addto@macro\AskInc@Answer{,#1}% + \fi + \AskInc@SaveAnswer + \let\@partlist\AskInc@Answer + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\AskInc@AskQuestion} +% \begin{macrocode} +\def\AskInc@AskQuestion{% + \let\AskInc@Temp\answer + \AskInc@@QuestionHeader + \let\AskInc@@QuestionHeader\relax + \typein[\answer]{% + Include `\AskInc@File'? [y]es, [n]o, [A]ll, [N]one, [D]efault % + (\AskInc@Default):% + }% + \typeout{}% + \let\AskInc@AskResult\answer + \let\answer\AskInc@Temp + \ifx\AskInc@AskResult\@empty + \let\AskInc@AskResult\AskInc@Default + \let\AskInc@Next\relax + \else + \ifx\AskInc@AskResult\AskInc@CharYes + \let\AskInc@Next\relax + \else + \ifx\AskInc@AskResult\AskInc@CharNo + \let\AskInc@Next\relax + \else + \ifx\AskInc@AskResult\AskInc@CharAll + \gdef\AskInc@AskQuestion{% + \let\AskInc@AskResult\AskInc@CharYes + }% + \else + \ifx\AskInc@AskResult\AskInc@CharNone + \gdef\AskInc@AskQuestion{% + \let\AskInc@AskResult\AskInc@CharNo + }% + \else + \ifx\AskInc@AskResult\AskInc@CharDefault + \gdef\AskInc@AskQuestion{% + \let\AskInc@AskResult\AskInc@Default + }% + \else + \PackageWarningNoLine{askinclude}{% + Invalid answer [\AskInc@AskResult].\MessageBreak + Answer must be one letter out of [ynAND]% + }% + \fi + \fi + \fi + \let\AskInc@Next\AskInc@AskQuestion + \fi + \fi + \fi + \AskInc@Next +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\AtBeginDocument{\AskInc@MainQuestion} +% \end{macrocode} +% +% \begin{macrocode} +\AskInc@AtEnd% +% +% \end{macrocode} +% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{askinclude}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/askinclude/askinclude.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/askinclude/askinclude.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `askinclude' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/askinclude.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{askinclude.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip askinclude.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex askinclude.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% askinclude.sty & tex/latex/askinclude/askinclude.sty\\ +% askinclude.pdf & doc/latex/askinclude/askinclude.pdf\\ +% askinclude.dtx & source/latex/askinclude/askinclude.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{askinclude.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex askinclude.dtx +%bibtex askinclude.aux +%makeindex -s gind.ist askinclude.idx +%pdflatex askinclude.dtx +%makeindex -s gind.ist askinclude.idx +%pdflatex askinclude.dtx +%\end{verbatim} +% \end{quote} +% +% \section{Acknowledgement} +% +% \begin{description} +% \item[Tom Scavo] +% suggested saving the include file list +% from the previous run and a simplified user interface. +% \item[Joseph Wright] suggested questions for each \cs{include}. +% \end{description} +% +% \printbibliography[ +% heading=bibnumbered, +% ] +% +% \begin{History} + +% \begin{Version}{1991/11/05 v0.95} +% \item +% First beta-test version (asked two questions). +% \end{Version} +% \begin{Version}{1991/11/05 v0.99} +% \item +% Second beta-test version (asks one question; uses `|*|' and `|-|'). +% \end{Version} +% \begin{Version}{1991/11/07 v1.0} +% \item +% Changed prompts (sent to \xnewsgroup{comp.text.tex}): +% \URL{``\link{Interactive inclusion of files in LaTeX}''}^^A +% {https://groups.google.com/group/comp.text.tex/msg/34b770a7c277e79c} +% \end{Version} +% \begin{Version}{1991/12/13 v1.1} +% \item +% \textit{Unknown}. +% \end{Version} +% \begin{Version}{1994/11/02 v1.2e} +% \item +% Two small changes to run under LaTeX2e [RF]. +% \item +% Additional documentation [TRS]. +% \end{Version} +% \begin{Version}{2007/10/15 v1.0 (askinc)} +% \item +% Reimplementation, published as \xpackage{askinc} in +% newsgroup \xnewsgroup{comp.text.tex}:\\ +% \URL{``\link{Re: askinclude.sty}''}^^A +% {https://groups.google.com/group/comp.text.tex/msg/2d638b84a858fdc8} +% \item +% Listing of included files, collected from the previous run before +% the question. +% \item +% No error message by \xfile{.aux} file if package is removed. +% \end{Version} +% \begin{Version}{2007/10/23 v2.0} +% \item +% The next version of \xpackage{askinc} becomes +% version 2.0 of \xpackage{askinclude}. +% \item +% `|?|' added for questioning each file. +% \item +% \cs{includeonly} has precedence until package loading. +% Then it is disabled by a warning. +% \item +% Documentation rewritten/added. +% \item +% Tests added. +% \end{Version} +% \begin{Version}{2008/08/11 v2.1} +% \item +% Code is not changed. +% \item +% URLs updated. +% \end{Version} +% \begin{Version}{2011/12/02 v2.2} +% \item +% Bibliography rewritten for biblatex. +% \end{Version} +% \begin{Version}{2016/05/14 v2.3} +% \item +% Luatex compatibility +% \end{Version} +% \begin{Version}{2018/11/01 v2.4} +% \item +% Remove luatex85 package dependency +% \end{Version} +% \begin{Version}{2019/12/09 v2.5} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput +% \begin{Version}{1991/11/05 v0.95} +% \item +% First beta-test version (asked two questions). +% \end{Version} +% \begin{Version}{1991/11/05 v0.99} +% \item +% Second beta-test version (asks one question; uses `|*|' and `|-|'). +% \end{Version} +% \begin{Version}{1991/11/07 v1.0} +% \item +% Changed prompts (sent to \xnewsgroup{comp.text.tex}): +% \URL{``\link{Interactive inclusion of files in LaTeX}''}^^A +% {https://groups.google.com/group/comp.text.tex/msg/34b770a7c277e79c} +% \end{Version} +% \begin{Version}{1991/12/13 v1.1} +% \item +% \textit{Unknown}. +% \end{Version} +% \begin{Version}{1994/11/02 v1.2e} +% \item +% Two small changes to run under LaTeX2e [RF]. +% \item +% Additional documentation [TRS]. +% \end{Version} +% \begin{Version}{2007/10/15 v1.0 (askinc)} +% \item +% Reimplementation, published as \xpackage{askinc} in +% newsgroup \xnewsgroup{comp.text.tex}:\\ +% \URL{``\link{Re: askinclude.sty}''}^^A +% {https://groups.google.com/group/comp.text.tex/msg/2d638b84a858fdc8} +% \item +% Listing of included files, collected from the previous run before +% the question. +% \item +% No error message by \xfile{.aux} file if package is removed. +% \end{Version} +% \begin{Version}{2007/10/23 v2.0} +% \item +% The next version of \xpackage{askinc} becomes +% version 2.0 of \xpackage{askinclude}. +% \item +% `|?|' added for questioning each file. +% \item +% \cs{includeonly} has precedence until package loading. +% Then it is disabled by a warning. +% \item +% Documentation rewritten/added. +% \item +% Tests added. +% \end{Version} +% \begin{Version}{2008/08/11 v2.1} +% \item +% Code is not changed. +% \item +% URLs updated. +% \end{Version} +% \begin{Version}{2011/12/02 v2.2} +% \item +% Bibliography rewritten for biblatex. +% \end{Version} +% \begin{Version}{2016/05/14 v2.3} +% \item +% Luatex compatibility +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/askinclude/askinclude.pdf b/macros/latex/contrib/askinclude/askinclude.pdf new file mode 100644 index 0000000000..10c3f10452 Binary files /dev/null and b/macros/latex/contrib/askinclude/askinclude.pdf differ diff --git a/macros/latex/contrib/bibleref/CHANGES b/macros/latex/contrib/bibleref/CHANGES index f69256bc20..29d7c6e962 100644 --- a/macros/latex/contrib/bibleref/CHANGES +++ b/macros/latex/contrib/bibleref/CHANGES @@ -1,3 +1,6 @@ +1.24 + * Add more abbreviation + * Add more \brthreeabbrvname 1.23 * Add Tt abbreviation 1.22 diff --git a/macros/latex/contrib/bibleref/bibleref.dtx b/macros/latex/contrib/bibleref/bibleref.dtx index ff5130502c..0802fcf73b 100644 --- a/macros/latex/contrib/bibleref/bibleref.dtx +++ b/macros/latex/contrib/bibleref/bibleref.dtx @@ -84,12 +84,9 @@ %indicating the chapter and verse or verses. Verses can be %specified as a comma separated list of individual verses or range %of verses. A range of verses should be written with a single -%hyphen, e.g.\ \verb|2-4|. In the typeset output the range of verses will -%be separated with -%\begin{definition}[\DescribeMacro{\BRvrsep}] -%\cs{BRvrsep} -%\end{definition} -%(an en-dash by default.) A chapter may be referenced without a +%hyphen, e.g.\ \verb|2-4|. +% +% A chapter may be referenced without a %verse, but the colon must remain, e.g.\ \verb|(12:)| simply %indicates chapter 12. % @@ -134,6 +131,42 @@ % \begin{verbatim} % \renewcommand{\BRotherchapterstyle}[1]{} % \end{verbatim} +%\subsection{Default separators} +% In the typeset output the range of verses will +%be separated with +%\begin{definition}[\DescribeMacro{\BRvrsep}] +%\cs{BRvrsep} +%\end{definition} +%(an en-dash by default.) +% +%In the typeset output the verses in a list of verses will +%be separated with +%\begin{definition}[\DescribeMacro{\BRvsep}] +%\cs{BRvsep} +%\end{definition} +%(a comma, by default). +% +% +%In the typeset output the chapters will +%be separated with +%\begin{definition}[\DescribeMacro{\BRchsep}] +%\cs{BRchsep} +%\end{definition} +%(a semi-colon, by default). +% +%In the typeset output the chapter and the verse will +%be separated with +%\begin{definition}[\DescribeMacro{\BRchvsep}] +%\cs{BRchvsep} +%\end{definition} +%(a colon, by default). +% +%In the typeset output the books name will be followed by +%\begin{definition}[\DescribeMacro{\BRperiod}] +%\cs{BRperiod} +%\end{definition} +%(nothing, by default). +% %\subsection{Examples} %\begin{center} %\begin{tabular}{ll} @@ -215,7 +248,9 @@ %\begin{verbatim} %\addbiblebook{Susanna}{Story of Susanna} %\end{verbatim} -% +%\begin{definition}[\DescribeMacro{\brthreeabbrvname}] +% The \cs{brthreeabbrvname} command switches all the abbreviation of the booktitle to be typeset using exaclty three characters. +%\end{definition} %\section{Defining New Styles} % %You can define a new style using the command @@ -973,7 +1008,7 @@ % Declare package % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{bibleref}[2019/01/13 1.23 (NLCT and MR)] +\ProvidesPackage{bibleref}[2019/12/10 1.24 (NLCT and MR)] % \end{macrocode} % Need to do some conditional stuff % \begin{macrocode} @@ -1368,6 +1403,88 @@ \def\br@Revelation{Rev\BRperiod}} % \end{macrocode} %\end{macro} +% +%\begin{macro}{\brthreeabbrvname} +%\changes{1.24}{2019/12/10}{Added \cs{brthreelettabbrvname}} +% This switches to a standardized set of three-character abbreviations. +% \begin{macrocode} +\newcommand*{\brthreeabbrvname}{% +\def\br@Genesis{Gen\BRperiod}% +\def\br@Exodus{Exo\BRperiod}% +\def\br@Leviticus{Lev\BRperiod}% +\def\br@Numbers{Num\BRperiod}% +\def\br@Deuteronomy{Deu\BRperiod}% +\def\br@Joshua{Jos\BRperiod}% +\def\br@Judges{Jdg\BRperiod}% +\def\br@Ruth{Rut\BRperiod}% +\def\br@ISamuel{\BRbooknumberstyle{1}Sa\BRperiod}% +\def\br@IISamuel{\BRbooknumberstyle{2}Sa\BRperiod}% +\def\br@IKings{\BRbooknumberstyle{1}Ki\BRperiod}% +\def\br@IIKings{\BRbooknumberstyle{2}Ki\BRperiod}% +\def\br@IChronicles{\BRbooknumberstyle{1}Ch\BRperiod}% +\def\br@IIChronicles{\BRbooknumberstyle{2}Ch\BRperiod}% +\def\br@Ezra{Ezr\BRperiod}% +\def\br@Nehemiah{Neh\BRperiod}% +\def\br@Tobit{Tob\BRperiod}% +\def\br@Judith{Jdi\BRperiod}% +\def\br@Esther{Est\BRperiod}% +\def\br@IMaccabees{\BRbooknumberstyle{1}Ma\BRperiod}% +\def\br@IIMaccabees{\BRbooknumberstyle{2}Ma\BRperiod}% +\def\br@Job{Job}% +\def\br@Psalms{Psa\BRperiod}% +\def\br@Proverbs{Pro\BRperiod}% +\def\br@Ecclesiastes{Ecc\BRperiod}% +\def\br@SongofSongs{SoS\BRperiod}% +\def\br@Wisdom{Wis\BRperiod}% +\def\br@Ecclesiasticus{Ecu\BRperiod}% +\def\br@Isaiah{Isa\BRperiod}% +\def\br@Jeremiah{Jer\BRperiod}% +\def\br@Lamentations{Lam\BRperiod}% +\def\br@Baruch{Bar\BRperiod}% +\def\br@Ezekiel{Eze\BRperiod}% +\def\br@Daniel{Dan\BRperiod}% +\def\br@Hosea{Hos\BRperiod}% +\def\br@Joel{Joe\BRperiod}% +\def\br@Amos{Amo\BRperiod}% +\def\br@Obadiah{Oba\BRperiod}% +\def\br@Jonah{Jon\BRperiod}% +\def\br@Micah{Mic\BRperiod}% +\def\br@Nahum{Nah\BRperiod}% +\def\br@Habakkuk{Hab\BRperiod}% +\def\br@Zephaniah{Zep\BRperiod}% +\def\br@Haggai{Hag\BRperiod}% +\def\br@Zechariah{Zec\BRperiod}% +\def\br@Malachi{Mal\BRperiod}% +\def\br@Matthew{Mat\BRperiod}% +\def\br@Mark{Mar\BRperiod}% +\def\br@Luke{Luk\BRperiod}% +\def\br@John{Joh\BRperiod}% +\def\br@Acts{Act\BRperiod}% +\def\br@Romans{Rom\BRperiod}% +\def\br@ICorinthians{\BRepistlenumberstyle{1}Co\BRperiod}% +\def\br@IICorinthians{\BRepistlenumberstyle{2}Co\BRperiod}% +\def\br@Galatians{Gal\BRperiod}% +\def\br@Ephesians{Eph\BRperiod}% +\def\br@Philippians{Php\BRperiod}% +\def\br@Colossians{Col\BRperiod}% +\def\br@IThessalonians{\BRepistlenumberstyle{1}Th\BRperiod}% +\def\br@IIThessalonians{\BRepistlenumberstyle{2}Th\BRperiod}% +\def\br@ITimothy{\BRepistlenumberstyle{1}Ti\BRperiod}% +\def\br@IITimothy{\BRepistlenumberstyle{2}Ti\BRperiod}% +\def\br@Titus{Tit\BRperiod}% +\def\br@Philemon{Phm\BRperiod}% +\def\br@Hebrews{Heb\BRperiod}% +\def\br@James{Jam\BRperiod}% +\def\br@IPeter{\BRepistlenumberstyle{1}Pe\BRperiod}% +\def\br@IIPeter{\BRepistlenumberstyle{2}Pe\BRperiod}% +\def\br@IJohn{\BRepistlenumberstyle{1}Jo}% +\def\br@IIJohn{\BRepistlenumberstyle{2}Jo}% +\def\br@IIIJohn{\BRepistlenumberstyle{3}Jo}% +\def\br@Jude{Jde\BRperiod}% +\def\br@Revelation{Rev\BRperiod}} +% \end{macrocode} +%\end{macro} +% % Provide synonymns. % \begin{macrocode} \newcommand*\br@Gn{\br@Genesis}% @@ -1403,7 +1520,6 @@ \newcommand*\br@Lm{\br@Lamentations}% \newcommand*\br@Ba{\br@Baruch}% \newcommand*\br@Bar{\br@Baruch}% -\newcommand*\br@Ezk{\br@Ezekiel}% \newcommand*\br@Dn{\br@Daniel}% \newcommand*\br@Ho{\br@Hosea}% \newcommand*\br@Jl{\br@Joel}% @@ -1421,14 +1537,10 @@ \newcommand*\br@Mk{\br@Mark}% \newcommand*\br@Lk{\br@Luke}% \newcommand*\br@Jn{\br@John}% -\newcommand*\br@Ac{\br@Acts}% \newcommand*\br@Rm{\br@Romans}% -\newcommand*\br@ICo{\br@ICorinthians}% -\newcommand*\br@IICo{\br@IICorinthians}% \newcommand*\br@Ga{\br@Galatians}% \newcommand*\br@Ep{\br@Ephesians}% \newcommand*\br@Ph{\br@Philippians}% -\newcommand*\br@Col{\br@Colossians}% \newcommand*\br@ITh{\br@IThessalonians}% \newcommand*\br@IITh{\br@IIThessalonians}% \newcommand*\br@ITm{\br@ITimothy}% @@ -1447,27 +1559,48 @@ %\changes{1.21}{2018/11/17}{Add Wis abbreviation} %\changes{1.22}{2018/12/05}{Add Bar abbreviation} %\changes{1.23}{2019/01/13}{Add Ti abbreviation} +%\changes{1.24}{2019/12/10}{Added Exo, Levit, Deu, Jos, Jsh, Rut, IKi, IKin, IIKi, IIKin, IMac, IIMac, Psa, Psal, Pro, Son, Song, Songs, Ezk, Eze, Joe, Amo, Oba, Zec, Zep, Mat, Mar, Luk, Joh, Act, ICo IICo, Php, Col, IThe, IThes, IIThe, IIThes, ITi, IITi, Hb, Jam, IPe, IIPe, IJo, IJoh, IIJo, IIJoh, IIIJn, IIIJo, IIIJoh % \begin{macrocode} \newcommand*\br@Gen{\br@Genesis}% +\newcommand*\br@Exo{\br@Exodus}% \newcommand*\br@Exod{\br@Exodus}% \newcommand*\br@Lev{\br@Leviticus}% +\newcommand*\br@Levit{\br@Leviticus}% \newcommand*\br@Num{\br@Numbers}% +\newcommand*\br@Deu{\br@Deuteronomy}% \newcommand*\br@Deut{\br@Deuteronomy}% \newcommand*\br@Josh{\br@Joshua}% +\newcommand*\br@Jsh{\br@Joshua}% \newcommand*\br@Judg{\br@Judges}% +\newcommand*\br@Jdg{\br@Judges}% +\newcommand*\br@Rut{\br@Ruth}% \newcommand*\br@ISam{\br@ISamuel}% +\newcommand*\br@ISa{\br@ISamuel}% \newcommand*\br@IISam{\br@IISamuel}% +\newcommand*\br@IISa{\br@IISamuel}% \newcommand*\br@IKgs{\br@IKings}% +\newcommand*\br@IKi{\br@IKings}% +\newcommand*\br@IKin{\br@IKings}% \newcommand*\br@IIKgs{\br@IIKings}% +\newcommand*\br@IIKi{\br@IIKings}% +\newcommand*\br@IIKin{\br@IIKings}% \newcommand*\br@IChr{\br@IChronicles}% \newcommand*\br@IIChr{\br@IIChronicles}% \newcommand*\br@Neh{\br@Nehemiah}% \newcommand*\br@Esth{\br@Esther}% \newcommand*\br@IMacc{\br@IMaccabees}% +\newcommand*\br@IMac{\br@IMaccabees}% +\newcommand*\br@IIMac{\br@IIMaccabees}% \newcommand*\br@IIMacc{\br@IIMaccabees}% +\newcommand*\br@Psa{\br@Psalms}% +\newcommand*\br@Psal{\br@Psalms}% +\newcommand*\br@Pro{\br@Proverbs}% \newcommand*\br@Prov{\br@Proverbs}% \newcommand*\br@Eccl{\br@Ecclesiastes}% \newcommand*\br@SofS{\br@SongofSongs}% +\newcommand*\br@Son{\br@SongofSongs}% +\newcommand*\br@Song{\br@SongofSongs}% +\newcommand*\br@Songs{\br@SongofSongs}% \newcommand*\br@Wis{\br@Wisdom}% \newcommand*\br@Wisd{\br@Wisdom}% \newcommand*\br@Ecclus{\br@Ecclesiasticus}% @@ -1475,32 +1608,65 @@ \newcommand*\br@Jer{\br@Jeremiah}% \newcommand*\br@Lam{\br@Lamentations}% \newcommand*\br@Ezek{\br@Ezekiel}% +\newcommand*\br@Ezk{\br@Ezekiel}% +\newcommand*\br@Eze{\br@Ezekiel}% \newcommand*\br@Dan{\br@Daniel}% \newcommand*\br@Hos{\br@Hosea}% +\newcommand*\br@Joe{\br@Joel}% +\newcommand*\br@Amo{\br@Amos}% \newcommand*\br@Obad{\br@Obadiah}% +\newcommand*\br@Oba{\br@Obadiah}% \newcommand*\br@Mic{\br@Micah}% \newcommand*\br@Nah{\br@Nahum}% \newcommand*\br@Zeph{\br@Zephaniah}% +\newcommand*\br@Zep{\br@Zephaniah}% \newcommand*\br@Hag{\br@Haggai}% \newcommand*\br@Zech{\br@Zechariah}% +\newcommand*\br@Zec{\br@Zechariah}% \newcommand*\br@Mal{\br@Malachi}% \newcommand*\br@Matt{\br@Matthew}% +\newcommand*\br@Mat{\br@Matthew}% +\newcommand*\br@Mar{\br@Mark}% +\newcommand*\br@Luk{\br@Luke}% +\newcommand*\br@Joh{\br@John}% +\newcommand*\br@Ac{\br@Acts}% \newcommand*\br@Rom{\br@Romans}% +\newcommand*\br@ICo{\br@ICorinthians}% \newcommand*\br@ICor{\br@ICorinthians}% +\newcommand*\br@IICo{\br@IICorinthians}% \newcommand*\br@IICor{\br@IICorinthians}% \newcommand*\br@Gal{\br@Galatians}% \newcommand*\br@Eph{\br@Ephesians}% \newcommand*\br@Phil{\br@Philippians}% +\newcommand*\br@Php{\br@Philippians}% +\newcommand*\br@Col{\br@Colossians}% +\newcommand*\br@IThe{\br@IThessalonians}% +\newcommand*\br@IThes{\br@IThessalonians}% \newcommand*\br@IThess{\br@IThessalonians}% +\newcommand*\br@IIThe{\br@IIThessalonians}% +\newcommand*\br@IIThes{\br@IIThessalonians}% \newcommand*\br@IIThess{\br@IIThessalonians}% +\newcommand*\br@ITi{\br@ITimothy}% \newcommand*\br@ITim{\br@ITimothy}% +\newcommand*\br@IITi{\br@IITimothy}% \newcommand*\br@IITim{\br@IITimothy}% \newcommand*\br@Tit{\br@Titus}% \newcommand*\br@Ti{\br@Titus}% \newcommand*\br@Philem{\br@Philemon}% +\newcommand*\br@Hb{\br@Hebrews}% \newcommand*\br@Jas{\br@James}% +\newcommand*\br@Jam{\br@James}% \newcommand*\br@IPet{\br@IPeter}% +\newcommand*\br@IPe{\br@IPeter}% \newcommand*\br@IIPet{\br@IIPeter}% +\newcommand*\br@IIPe{\br@IIPeter}% +\newcommand*\br@IJo{\br@IJohn}% +\newcommand*\br@IJoh{\br@IJohn}% +\newcommand*\br@IIJo{\br@IIJohn}% +\newcommand*\br@IIJoh{\br@IIJohn}% +\newcommand*\br@IIIJn{\br@IIIJohn}% +\newcommand*\br@IIIJo{\br@IIIJohn}% +\newcommand*\br@IIIJoh{\br@IIIJohn}% \newcommand*\br@Rev{\br@Revelation} % \end{macrocode} %\begin{macro}{\brs@default} diff --git a/macros/latex/contrib/bibleref/bibleref.pdf b/macros/latex/contrib/bibleref/bibleref.pdf index d0d85d2b7e..99a06b2011 100644 Binary files a/macros/latex/contrib/bibleref/bibleref.pdf and b/macros/latex/contrib/bibleref/bibleref.pdf differ diff --git a/macros/latex/contrib/bibleref/makefile b/macros/latex/contrib/bibleref/makefile index b5dbbd7b50..90e5996d92 100644 --- a/macros/latex/contrib/bibleref/makefile +++ b/macros/latex/contrib/bibleref/makefile @@ -3,7 +3,6 @@ all:bibleref.pdf bibleref.sty mkdir bibleref mkdir bibleref/samples latexmk sample*tex - ln sample*tex bibleref/samples ln sample*pdf bibleref/samples ln CHANGES *ins *dtx bibleref.pdf README makefile bibleref @$(RM) ../bibleref.zip diff --git a/macros/latex/contrib/bibleref/samples/sample-categories.pdf b/macros/latex/contrib/bibleref/samples/sample-categories.pdf index e2822edd5b..4ccfb376e4 100644 Binary files a/macros/latex/contrib/bibleref/samples/sample-categories.pdf and b/macros/latex/contrib/bibleref/samples/sample-categories.pdf differ diff --git a/macros/latex/contrib/bibleref/samples/sample-indextools.pdf b/macros/latex/contrib/bibleref/samples/sample-indextools.pdf index 9f34cb6d51..21662c8438 100644 Binary files a/macros/latex/contrib/bibleref/samples/sample-indextools.pdf and b/macros/latex/contrib/bibleref/samples/sample-indextools.pdf differ diff --git a/macros/latex/contrib/bibleref/samples/sample-xidx.pdf b/macros/latex/contrib/bibleref/samples/sample-xidx.pdf index b890da74db..a4d31ce675 100644 Binary files a/macros/latex/contrib/bibleref/samples/sample-xidx.pdf and b/macros/latex/contrib/bibleref/samples/sample-xidx.pdf differ diff --git a/macros/latex/contrib/bibleref/samples/sample.pdf b/macros/latex/contrib/bibleref/samples/sample.pdf index 631b27f11b..3f58999daa 100644 Binary files a/macros/latex/contrib/bibleref/samples/sample.pdf and b/macros/latex/contrib/bibleref/samples/sample.pdf differ diff --git a/macros/latex/contrib/bitset/README.md b/macros/latex/contrib/bitset/README.md new file mode 100644 index 0000000000..655e6c6231 --- /dev/null +++ b/macros/latex/contrib/bitset/README.md @@ -0,0 +1,11 @@ +# bitset + +bitset package for LaTeX + + + +This package defines and implements the data type bit set, +a vector of bits. The size of the vector may grow dynamically. +Individual bits can be manipulated. + + diff --git a/macros/latex/contrib/bitset/bitset.dtx b/macros/latex/contrib/bitset/bitset.dtx new file mode 100644 index 0000000000..307b681bbb --- /dev/null +++ b/macros/latex/contrib/bitset/bitset.dtx @@ -0,0 +1,2957 @@ +% \iffalse meta-comment +% +% File: bitset.dtx +% Version: 2019/12/09 v1.3 +% Info: Handle bit-vector datatype +% +% Copyright (C) +% 2007, 2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/bitset/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/bitset/issues +% +% The Base Interpreter refers to any `TeX-Format', +% because some files are installed in TDS:tex/generic//. +% +% This work consists of the main source file bitset.dtx +% and the derived files +% bitset.sty, bitset.pdf, bitset.ins, bitset.drv, bitset-test1.tex, +% bitset-test2.tex, bitset-test3.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/bitset/bitset.dtx +% CTAN:macros/latex/contrib/bitset/bitset.pdf +% +% Unpacking: +% (a) If bitset.ins is present: +% tex bitset.ins +% (b) Without bitset.ins: +% tex bitset.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{bitset.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If bitset.drv is present: +% latex bitset.drv +% (b) Without bitset.drv: +% latex bitset.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex bitset.dtx +% makeindex -s gind.ist bitset.idx +% pdflatex bitset.dtx +% makeindex -s gind.ist bitset.idx +% pdflatex bitset.dtx +% +% Installation: +% TDS:tex/generic/bitset/bitset.sty +% TDS:doc/latex/bitset/bitset.pdf +% TDS:source/latex/bitset/bitset.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: bitset +Version: 2019/12/09 v1.3 + +Copyright (C) + 2007, 2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/bitset/issues + + +The Base Interpreter refers to any `TeX-Format', +because some files are installed in TDS:tex/generic//. + +This work consists of the main source file bitset.dtx +and the derived files + bitset.sty, bitset.pdf, bitset.ins, bitset.drv, bitset-test1.tex, + bitset-test2.tex, bitset-test3.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{bitset.ins}{\from{bitset.dtx}{install}}% + \file{bitset.drv}{\from{bitset.dtx}{driver}}% + \usedir{tex/generic/bitset}% + \file{bitset.sty}{\from{bitset.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* bitset.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `bitset.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{bitset.drv}% + [2019/12/09 v1.3 Handle bit-vector datatype (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\usepackage{amstext} +\usepackage{iftex} +\ifluatex +\else + \usepackage[T1]{fontenc}% + \usepackage{lmodern}% +\fi +\begin{document} + \DocInput{bitset.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{bitset.drv} +% +% \title{The \xpackage{bitset} package} +% \date{2019/12/09 v1.3} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/bitset/issues}}} +% +% \maketitle +% +% \begin{abstract} +% This package defines and implements the data type bit set, +% a vector of bits. The size of the vector may grow dynamically. +% Individual bits can be manipulated. +% \end{abstract} +% +% \tableofcontents +% +% \clearpage +% \section{Documentation} +% +% \subsection{Introduction} +% +% Annotations in the PDF format know entries whose values are +% integers. This numbers are interpreted as set of flags +% specifying properties. For example, annotation dictionaries +% can have a key |/F|. The bits of its integer value +% are interpreted the following way: +% \begin{quote} +% \begin{tabular}{@{}l|l@{}} +% Bit position & Property name\\ +% \hline +% 1 & Invisible\\ +% 2 & Hidden\\ +% 3 & Print\\ +% 4 & NoZoom\\ +% 5 & NoRotate\\ +% 6 & NoView\\ +% 7 & ReadOnly\\ +% \dots & \dots +% \end{tabular} +% \end{quote} +% Now, let's see how these values are set in package \xpackage{hyperref} +% before it uses this package (before v6.77a): +%\begin{quote} +%\begin{verbatim} +%\ifFld@hidden /F 6\else /F 4\fi +%\end{verbatim} +%\end{quote} +% Where are the other flags? The following example for key |/Ff| +% in a widget annotation +% supports at least three properties: +%\begin{quote} +%\begin{verbatim} +%\ifFld@multiline +% \ifFld@readonly /Ff 4097\else /Ff 4096\fi +%\else +% \ifFld@password +% \ifFld@readonly /Ff 8193\else /Ff 8192\fi +% \else +% \ifFld@readonly /Ff 1\fi +% \fi +%\fi +%\end{verbatim} +%\end{quote} +% But you see the point. It would be a nightmare to continue +% this way in supporting the missing flag settings. This kind +% of integers may have up to 32 bits. +% +% Therefore I wanted a data structure for setting and +% clearing individual bits. Also it should provide +% an export as decimal number. The snipsets above are +% executed in expansion contexts without \TeX's stomach +% commands. It would be convenient to have an expandable +% conversion from the data structure to the integer that +% gets written to the PDF file. +% +% This package \xpackage{bitset} implements such a data +% structure. The interface is quite close to Java's +% class |BitSet| in order not to learn to many interfaces +% for the same kind of data structure. +% +% \subsection{Glossary} +% +% \begin{description} +% \item[Bit set:] +% A bit set is a vector of bits or flags. +% The vector size is unlimited and +% grows dynamically. An undefined bit set is treated as bit +% set where all bits are cleared. +% +% Bit sets are addressed by name. A name should consists of +% letters or digits. Technically it must survive \cs{csname}, +% see \LaTeX's environment names for other names with such +% a constraint. Package \xpackage{babel}'s shorthands are +% not supported due to technical reasons. Shorthand support +% would break expandable operations. +% \item[Size:] +% A size of a bit set is the number of bits in use. +% It's the number of the highest index, incremented by one. +% Sizes are in the range |0| up to |2147483647|, the highest +% number supported by \TeX. +% \item[Index:] +% Bit positions in a bit set are addressed by an index number. +% The bit vector is zero based. The first and least significant +% bit is addressed by index |0| and the highest possible bit +% by |2147483646|. +% \item[Bit:] +% A bit is enoded as |0| for cleared/disabled or |1| for set/enabled. +% \end{description} +% +% \subsection{Design principles} +% +% \begin{description} +% \item[Name conventions:] +% To avoid conflicts with existing macro names, the operations +% are prefixed by the package name. +% \item[Zero based indexes:] The first bit is addressed by zero. +% (Convention of array indexing in C, Java, \dots) +% \item[Unlimited size:] +% There is no restriction on the size of a bit set other than +% usual memory limitations. \cs{bitsetSetDec} and \cs{bitsetGetDec} +% transparently switch to package \xpackage{bigintcalc} if the numbers +% get too large for \TeX's number limit. +% \item[Expandibility:] +% Any operation that does not change the bit set is expandable. +% And all operations that extract or calculate some result +% do this in exact two expansion steps. For example, +% a macro \cs{Macro} wants a bit set as decimal number. +% But the argument must be a plain number without macros. +% Thus you could prefix \cs{bitsetGetDec} with \cs{number}. +% However this won't work for bit sets with 31 or more bits +% because of \TeX's number limit of $2^{31}-1$. +% then just hit the operator with two \cs{expandafter}: +% \begin{quote} +% |\expandafter\expandafter\expandafter|\\ +% |\Macro\bitsetGetDec{foo}| +% \end{quote} +% |\bitsetGetDec| is hit first by the third \cs{expandafter} +% and then by the second one. +% \item[Format independence:] This package is written as \LaTeX\ package, +% but it does not depend on \LaTeX. It will also work for other formats +% such as \plainTeX. +% \item[Independence from \TeX\ engines:] +% Vanilla \TeX\ is all you need. Calculations are delegated to +% packages \xpackage{intcalc} and \xpackage{bigintcalc}. +% They don't need any special features, but they will switch +% to a little more efficient implementation if features such +% as \cs{numexpr} are available. +% \item[Numeric arguments:] Anything that is accepted by +% \cs{number}. If \eTeX\ is detected, also expressions +% for \cs{numexpr} are supported. The only exception so far +% is the number for \cs{bitsetSetDec}. The number might be too +% large for \cs{number} or \cs{numexpr}. +% \item[Error messages:] +% In expandable contexts, only a limited set of \TeX\ primitive +% commands work as expected. So called stomach commands behave +% like \cs{relax} and don't get expanded or executed. +% Unhappily also the error commands belong to this category. +% The expandable operations will throw an unknown control +% sequence instead to get \TeX's and user's attention. +% The name of these control sequences starts with +% \cs{BitSetError:} with the type of error after the colon. +% \end{description} +% +% \subsection{Operator overview} +% +% \begin{minipage}{\linewidth} +% \begin{description} +% \def\It#1#2{^^A +% \item[^^A +% {#1} ^^A +% \textmd{(\hyperref[{sec:#2}]{section \ref*{sec:#2}})}^^A +% ]^^A +% \mbox{}\\^^A +% } +% \def\op#1{^^A +% \cs{bitset}\texttt{\bfseries#1}^^A +% } +% \def\M#1{\meta{#1}} +% \def\Q{\hspace*{\fill}} +% \It{Miscellaneous}{misc} +% \op{Reset}\Q \M{BitSet}\\ +% \op{Let}\Q \M{BitSet A} \M{BitSet B} +% \It{Import}{import} +% \op{SetBin}, \op{SetOct}, \op{SetHex}\Q \M{BitSet} \M{Value}\\ +% \op{SetDec}\Q \M{BitSet} \M{Value} +% \It{Export\textsuperscript{a}}{export} +% \op{GetBin}, \op{GetOct}, \op{GetHex}\Q \M{BitSet} \M{MinSize}\\ +% \op{GetDec}\Q \M{BitSet} +% \It{Logical operators}{log} +% \op{And}, \op{AndNot}\Q \M{BitSet A} \M{BitSet B}\\ +% \op{Or}, \op{Xor}\Q \M{BitSet A} \M{BitSet B} +% \It{Shifting}{shift} +% \op{ShiftLeft}, \op{ShiftRight}\Q \M{BitSet} \M{ShiftAmount}\\ +% \It{Bit manipulation}{bitman} +% \op{Clear}, \op{Set}, \op{Flip}\Q \M{BitSet} \M{Index}\\ +% \op{SetValue}\Q \M{BitSet} \M{Index} \M{Value}\\ +% \op{ClearRange}, \op{SetRange}, \op{FlipRange}\\ +% \Q \M{BitSet} \M{IndexFrom} \M{IndexTo}\\ +% \op{SetValueRange}\Q \M{BitSet} \M{IndexFrom} \M{IndexTo} +% \It{Bit retrieval\textsuperscript{a}}{bitret} +% \op{Get}\Q \M{BitSet} \M{Index}\\ +% \op{NextClearBit}, \op{NextSetBit}\Q \M{BitSet} \M{Index}\\ +% \op{GetSetBitList}\Q \M{BitSet} +% \It{Bit set properties}{prop} +% \op{Size}, \op{Cardinality}\Q \M{BitSet} +% \It{Queries\textsuperscript{b}}{query} +% \op{IsDefined}, \op{IsEmpty}\Q \M{BitSet} \M{Then} \M{Else}\\ +% \op{Equals}, \op{Intersects}\Q \M{BitSet A} \M{BitSet B} \M{Then} \M{Else}\\ +% \op{Query}\Q \M{BitSet} \M{Index} \M{Then} \M{Else} +% \end{description} +% \footnotetext[1]{Macros are expandable, full expansion by two steps.} +% \footnotetext[2]{Macros are expandable.} +% \end{minipage} +% +% \subsection{Package loading} +% +% The package can be used as normal \LaTeX\ package: +%\begin{quote} +%|\usepackage{bitset}| +%\end{quote} +% Also \plainTeX\ is supported: +%\begin{quote} +%|\input bitset.sty\relax| +%\end{quote} +% +% \subsection{Operators} +% +% The following macros work on and with bit sets. +% A bit set \meta{BitSet} is represented by a name. +% The should consist of letters and digits. Technically +% it must survive \cs{csname}. It is the same constraint +% that must be satisfied by label or environment names +% in \LaTeX. +% +% However active characters that are shorthands +% of package \xpackage{babel} are not supported. +% Support for shorthands works by an assignment. +% But many operators +% such as \cs{bitsetGetDec} must be usable in expandable +% contexts. There assignments will not be executed in the +% best case or they will cause errors. +% +% The bits in a bit set are addressed by non-negative +% integers starting from zero. Thus negative index +% numbers cause an error message. Because index numbers +% are \TeX\ numbers. The largest index is 2147483647. +% But in practice memory limits and patience limits +% will be very likely reached much before. +% +% \subsubsection{Miscellaneous}\label{sec:misc} +% +% There isn't a separate operation for bit set creation. +% For simplicity an undefined bit set is treated as bit set +% with all bits cleared. +% +% \begin{declcs}{bitsetReset} \M{BitSet} +% \end{declcs} +% Macro \cs{bitsetReset} clears all bits. The result is an +% empty bit set. It may also be used as replacement for +% an operation ``new'', because an undefined bit set is defined +% afterwards. +% +% \begin{declcs}{bitsetLet} \M{BitSet A} \M{BitSet B} +% \end{declcs} +% Macro \cs{bitsetLet} performs a simple assignment similar +% to \TeX's \cs{let}. After the operation \meta{BitSet A} has +% the same value as \meta{BitSet B}. If \meta{BitSet B} is +% undefined, then \meta{BitSet A} will be the empty bit set. +% +% Note: If \meta{BitSet A} exists, it will be overwritten. +% +% \subsubsection{Import}\label{sec:import} +% +% \begin{declcs}{bitsetSetBin} \M{BitSet} \M{BinaryNumber}\\ +% \cs{bitsetSetOct} \M{BitSet} \M{OctalNumber}\\ +% \cs{bitsetSetHex} \M{BitSet} \M{HexadecimalNumber} +% \end{declcs} +% The numbers are interpreted as bit vectors and the flags in +% the bit \meta{BitSet} set are set accordingly. +% These numeric arguments are the only arguments where +% spaces are allowed. Then the numbers are easier to read. +% +% \begin{declcs}{bitsetSetDec} \M{BitSet} \M{DecimalNumber} +% \end{declcs} +% Macro \cs{bitsetSetDec} uses \meta{DecimalNumber} to +% set the bit set \meta{BitSet}. +% The numeric argument must expand +% to a plain number consisting of decimal digits without +% command tokens or spaces. Internally this argument is +% expanded only. It cannot be passed to \cs{number} or +% \cs{numexpr}, because the number may be too large for them. +% However \cs{number} or |\the\numexpr| may be used +% explicitely. This also helps for unexpandable number +% command tokens or registers (\cs{z@}, \cs{@ne}, \cs{count@}, \dots). +% Also \LaTeX'\ \cs{value} needs prefixing: +% \begin{quote} +% |\bitsetSetDec{foo}{\number\value{bar}}| +% \end{quote} +% +% \subsubsection{Export}\label{sec:export} +% +% \begin{declcs}{bitsetGetBin} \M{BitSet} \M{MinSize}\\ +% \cs{bitsetGetOct} \M{BitSet} \M{MinSize}\\ +% \cs{bitsetGetHex} \M{BitSet} \M{MinSize} +% \end{declcs} +% These macros returns the bit set as binary, octal or hexadecimal +% number. If the bit size is smaller than \meta{MinSize} the gap is +% filled with leading zeros. +% Example: +% \begin{quote} +% |\bitsetReset{abc}|\\ +% |\bitsetSet{abc}{2}|\\ +% |\bitsetGetBin{abc}{8}| $\rightarrow$ |00000100|\\ +% |\bitsetSet{abc}{5}\bitsetSet{abc}{7}|\\ +% |\bitsetGetHex{abc}{16}| $\rightarrow$ |00A2| +% \end{quote} +% Macro \cs{bitsetGetHex} uses the uppercase letters |A| to |F|. +% The catcode of the letters is one of 11 (letter) or 12 (other). +% +% \begin{declcs}{bitsetGetDec} \M{BitSet} +% \end{declcs} +% Macro \cs{bitsetGetDec} returns the bit set \meta{BitSet} as +% decimal number. The returned number can be larger than +% \TeX's number limit of $2^{31}-1$. +% +% \subsubsection{Logical operators}\label{sec:log} +% +% \begin{declcs}{bitsetAnd} \M{BitSet A} \M{BitSet B} +% \end{declcs} +% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} +% \mathbin{\text{and}} B \qquad (\forall\, \text{bits})$ +% +% \begin{declcs}{bitsetAndNot} \M{BitSet A} \M{BitSet B} +% \end{declcs} +% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} +% \mathbin{\text{and}} (\text{not}\,B) \qquad (\forall\, \text{bits})$ +% +% \begin{declcs}{bitsetOr} \M{BitSet A} \M{BitSet B} +% \end{declcs} +% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} +% \mathbin{\text{or}} B \qquad (\forall\, \text{bits})$ +% +% \begin{declcs}{bitsetXor} \M{BitSet A} \M{BitSet B} +% \end{declcs} +% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} +% \mathbin{\text{xor}} B \qquad (\forall\, \text{bits})$ +% +% \subsubsection{Shifting}\label{sec:shift} +% +% \begin{declcs}{bitsetShiftLeft} \M{BitSet} \M{ShiftAmount}\\ +% \cs{bitsetShiftRight} \M{BitSet} \M{ShiftAmount} +% \end{declcs} +% A left shift by one is a multiplication by two, thus left shifting +% moves the flags to higher positions. The new created low positions +% are filled by zeros. +% +% A right shift is the opposite, dividing by two, movint the bits +% to lower positions. The number will become smaller, the lowest +% bits are lost. +% +% If the \meta{ShiftAmount} is negative, it reverts the meaning of +% the shift operation. A left shift becomes a right shift. +% A \meta{ShiftAmount} of zero is ignored. +% +% \subsubsection{Bit manipulation}\label{sec:bitman} +% +% \begin{declcs}{bitsetClear} \M{BitSet} \M{Index}\\ +% \cs{bitsetSet} \M{BitSet} \M{Index}\\ +% \cs{bitsetFlip} \M{BitSet} \M{Index} +% \end{declcs} +% This macros manipulate a single bit in \meta{BitSet} addressed +% by \cs{Index}. Macro \cs{bitsetClear} disables the bit, +% \cs{bitsetSet} enables it and \cs{bitsetFlip} reverts the current +% setting of the bit. +% +% \begin{declcs}{bitsetSetValue} \M{BitSet} \M{Index} \M{Bit} +% \end{declcs} +% Macro \cs{bitsetSetValue} puts bit \meta{Bit} at position \meta{Index} +% in bit set \meta{BitSet}. \meta{Bit} must be a valid \TeX\ number +% equals to zero (disabled/cleared) or one (enabled/set). +% +% \subsubsection{Bit retrieval}\label{sec:bitret} +% +% \begin{declcs}{bitsetGet} \M{BitSet} \M{Index} +% \end{declcs} +% Macro \cs{bitsetGet} extracts the status of the bit at +% position \meta{Index} in bit set \meta{BitSet}. +% Digit |1| is returned if the bit is set/enabled. If the +% bit is cleared/disabled and in cases of an undefined bitset or +% an index number out of range the return value is |0|. +% +% \begin{declcs}{bitsetNextClearBit} \M{BitSet} \M{Index} +% \end{declcs} +% Starting at position \meta{Index} (inclusive) the bits +% are inspected. The first position without a set bit is returned. +% Possible results are decimal numbers: \meta{Index}, \meta{Index} + 1, +% \dots, ($\infty$) +% +% \begin{declcs}{bitsetNextSetBit} \M{BitSet} \M{Index} +% \end{declcs} +% Starting at position \meta{Index} (inclusive) the bits are +% inspected and the index position of the first found set bit +% is returned. If there isn't such a bit, then the result is +% |-1|. In summary possible results are decimal numbers: +% |-1|, \meta{Index}, \meta{Index} + 1, \dots, ($\infty$) +% +% \begin{declcs}{bitsetGetSetBitList} \M{BitSet} +% \end{declcs} +% Macro \cs{bitsetGetSetBitList} is an application for +% \cs{bitsetNextSetBit}. The set bits are iterated and +% returned as comma separated list of index positions +% in increasing order. The list is empty in case of +% an empty bit set. +% +% \subsubsection{Bit set properties}\label{sec:prop} +% +% \begin{declcs}{bitsetSize} \M{BitSet} +% \end{declcs} +% Macro \cs{bitsetSize} returns number of bits in use. +% It is the same as the index number of the highest set/enabled bit +% incremented by one. +% +% \begin{declcs}{bitsetCardinality} \M{BitSet} +% \end{declcs} +% Macro \cs{bitsetCardinality} counts the number of set/enabled bits. +% +% \subsubsection{Queries}\label{sec:query} +% +% Also the query procedures are expandable. They ask for a piece +% of information about a bit set and execute code depending +% on the answer. +% +% \begin{declcs}{bitsetIsDefined} \M{BitSet} \M{Then} \M{Else} +% \end{declcs} +% If the bit set with the name \meta{BitSet} exists the code +% given in \meta{Then} is executed, otherwise \meta{Else} is used. +% +% \begin{declcs}{bitsetIsEmpty} \M{BitSet} \M{Then} \M{Else} +% \end{declcs} +% If the bit set \meta{BitSet} exists and at least one bit +% is set/enabled, the code in \meta{Then} is executed, +% \meta{Else} otherwise. +% +% \begin{declcs}{bitsetEquals} \M{BitSet A} \M{BitSet B} \M{Then} \M{Else} +% \end{declcs} +% Both bit sets are equal if and only if either both are undefined +% or both are defined and represents the same bit values at the +% same positions. Thus this definition is reflexive, symmeric, +% and transitive, enough for an equivalent relation. +% +% \begin{declcs}{bitsetIntersects} \M{BitSet A} \M{BitSet B} \M{Then} \M{Else} +% \end{declcs} +% If and only if \meta{BitSet A} and \meta{BitSet B} have +% at least one bit at the same position that is set, then +% code part \meta{Then} is executed. +% +% \begin{declcs}{bitsetQuery} \M{BitSet} \M{Index} \M{Then} \M{Else} +% \end{declcs} +% It's just a wrapper for \cs{bitsetGet}. If the bit at position +% \meta{Index} is enabled, code \meta{Then} is called. +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% The internal format of a bit set is quite simple, a sequence +% of digits |0| and |1|. The least significant bit is left. +% A bit set without any flag set is encoded by |0|. Also +% undefined bit sets are treated that way. After the +% highest bit that is set there are no further zeroes. +% A regular expression of valid bit sets values: +% \begin{quote} +% |0|\string||[01]*1| +% \end{quote} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Reload check and package identification} +% Reload check, especially if the package is not used with \LaTeX. +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@bitset.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{bitset}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +% \end{macrocode} +% Package identification: +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@bitset.sty\endcsname +\ProvidesPackage{bitset}% + [2019/12/09 v1.3 Handle bit-vector datatype (HO)]% +% \end{macrocode} +% +% \subsection{Catcodes} +% +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname BitSet@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\BitSet@AtEnd{% + \BitSet@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{33}{12}% ! +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{42}{12}% * +\TMP@EnsureCode{43}{12}% + +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{11}% : (letter!) +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{63}{14}% ? (comment!) +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{96}{12}% ` +\edef\BitSet@AtEnd{\BitSet@AtEnd\noexpand\endinput} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname BitSet@TestMode\endcsname\relax +\else + \catcode63=9 % ? (ignore) +\fi +? \let\BitSet@@TestMode\BitSet@TestMode +% \end{macrocode} +% +% \subsection{Package loading} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \def\TMP@RequirePackage#1[#2]{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname ver@#1.sty\endcsname\relax + \input #1.sty\relax + \fi + }% + \TMP@RequirePackage{infwarerr}[2007/09/09]% + \TMP@RequirePackage{intcalc}[2007/09/27]% + \TMP@RequirePackage{bigintcalc}[2007/09/27]% +\else + \RequirePackage{infwarerr}[2007/09/09]% + \RequirePackage{intcalc}[2007/09/27]% + \RequirePackage{bigintcalc}[2007/09/27]% +\fi +% \end{macrocode} +% +% \subsection{Help macros} +% +% \subsubsection{Number constant} +% +% \begin{macro}{\BitSet@MaxSize} +% \begin{macrocode} +\def\BitSet@MaxSize{2147483647}% +% \end{macrocode} +% \end{macro} +% +% \subsubsection{General basic macros} +% +% \begin{macro}{\BitSet@Empty} +% \begin{macrocode} +\def\BitSet@Empty{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@FirstOfOne} +% \begin{macrocode} +\def\BitSet@FirstOfOne#1{#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Gobble} +% \begin{macrocode} +\def\BitSet@Gobble#1{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@FirstOfTwo} +% \begin{macrocode} +\def\BitSet@FirstOfTwo#1#2{#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SecondOfTwo} +% \begin{macrocode} +\def\BitSet@SecondOfTwo#1#2{#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@Space} +% \begin{macrocode} +\def\BitSet@Space{ } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@ZapSpace} +% \begin{macrocode} +\def\BitSet@ZapSpace#1 #2{% + #1% + \ifx\BitSet@Empty#2% + \else + \expandafter\BitSet@ZapSpace + \fi + #2% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Tail recursion} +% +% \begin{macro}{\BitSet@Fi} +% \begin{macrocode} +\let\BitSet@Fi\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@AfterFi} +% \begin{macrocode} +\def\BitSet@AfterFi#1#2\BitSet@Fi{\fi#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@AfterFiFi} +% \begin{macrocode} +\def\BitSet@AfterFiFi#1#2\BitSet@Fi{\fi\fi#1}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@AfterFiFiFi} +% \begin{macrocode} +\def\BitSet@AfterFiFiFi#1#2\BitSet@Fi{\fi\fi\fi#1}% +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Check macros} +% +% \begin{macro}{\BitSet@IfUndefined} +% \begin{macrocode} +\def\BitSet@IfUndefined#1{% + \expandafter\ifx\csname BS@#1\endcsname\relax + \expandafter\BitSet@FirstOfTwo + \else + \expandafter\BitSet@SecondOfTwo + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@CheckIndex} +% |#1|: continuation code\\ +% |#2|: BitSet\\ +% |#3|: Index +% \begin{macrocode} +\def\BitSet@CheckIndex#1#2#3{% + \BitSet@IfUndefined{#2}{\bitsetReset{#2}}{}% + \expandafter\expandafter\expandafter\BitSet@@CheckIndex + \intcalcNum{#3}!% + {#2}{#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@CheckIndex} +% |#1|: plain Index\\ +% |#2|: BitSet\\ +% |#3|: continuation code +% \begin{macrocode} +\def\BitSet@@CheckIndex#1!#2#3{% + \ifnum#1<0 % + \BitSet@AfterFi{% + \@PackageError{bitset}{% + Invalid negative index (#1)% + }\@ehc + }% + \else + \BitSet@AfterFi{% + #3{#2}{#1}% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Miscellaneous}\label{src:misc} +% +% \begin{macro}{\bitsetReset} +% \begin{macrocode} +\def\bitsetReset#1{% + \expandafter\def\csname BS@#1\endcsname{0}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bitsetLet} +% \begin{macrocode} +\def\bitsetLet#1#2{% + \BitSet@IfUndefined{#2}{% + \bitsetReset{#1}% + }{% + \expandafter\let\csname BS@#1\expandafter\endcsname + \csname BS@#2\endcsname + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Import}\label{src:import} +% +% \subsubsection{From binary number} +% +% \begin{macro}{\bitsetSetBin} +% \begin{macrocode} +\def\bitsetSetBin#1#2{% + \edef\BitSet@Temp{#2}% + \edef\BitSet@Temp{% + \expandafter\expandafter\expandafter\BitSet@ZapSpace + \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty + }% + \edef\BitSet@Temp{% + \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty + }% + \ifx\BitSet@Temp\BitSet@Empty + \expandafter\let\csname BS@#1\endcsname\BitSet@Zero + \else + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\BitSet@Reverse\BitSet@Temp!% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@KillZeros} +% \begin{macrocode} +\def\BitSet@KillZeros#1{% + \ifx#10% + \expandafter\BitSet@KillZeros + \else + #1% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Reverse} +% \begin{macrocode} +\def\BitSet@Reverse#1#2!{% + \ifx\\#2\\% + #1% + \else + \BitSet@AfterFi{% + \BitSet@Reverse#2!#1% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{From octal/hex number} +% +% \begin{macro}{\bitsetSetOct} +% \begin{macrocode} +\def\bitsetSetOct{% + \BitSet@SetOctHex\BitSet@FromFirstOct +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetSetHex} +% \begin{macrocode} +\def\bitsetSetHex{% + \BitSet@SetOctHex\BitSet@FromFirstHex +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SetOctHex} +% \begin{macrocode} +\def\BitSet@SetOctHex#1#2#3{% + \edef\BitSet@Temp{#3}% + \edef\BitSet@Temp{% + \expandafter\expandafter\expandafter\BitSet@ZapSpace + \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty + }% + \edef\BitSet@Temp{% + \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty + }% + \ifx\BitSet@Temp\BitSet@Empty + \expandafter\let\csname BS@#2\endcsname\BitSet@Zero + \else + \edef\BitSet@Temp{% + \expandafter#1\BitSet@Temp!% + }% + \ifx\BitSet@Temp\BitSet@Empty + \expandafter\let\csname BS@#2\endcsname\BitSet@Zero + \else + \expandafter\edef\csname BS@#2\endcsname{% + \expandafter\BitSet@Reverse\BitSet@Temp!% + }% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@FromFirstOct} +% \begin{macrocode} +\def\BitSet@FromFirstOct#1{% + \ifx#1!% + \else + \ifcase#1 \BitSet@AfterFiFi\BitSet@FromFirstOct + \or 1% + \or 10% + \or 11% + \or 100% + \or 101% + \or 110% + \or 111% + \else \BitSetError:WrongOctalDigit% + \fi + \expandafter\BitSet@FromOct + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@FromOct} +% \begin{macrocode} +\def\BitSet@FromOct#1{% + \ifx#1!% + \else + \ifcase#1 000% + \or 001% + \or 010% + \or 011% + \or 100% + \or 101% + \or 110% + \or 111% + \else \BitSetError:WrongOctalDigit% + \fi + \expandafter\BitSet@FromOct + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@FromFirstHex} +% \begin{macrocode} +\def\BitSet@FromFirstHex#1{% + \ifx#1!% + \else + \ifx#10% + \BitSet@AfterFiFi\BitSet@FromFirstHex + \fi + \expandafter\ifx\csname BitSet@Hex#1\endcsname\relax + \BitSetError:InvalidHexDigit% + \else + \expandafter\expandafter\expandafter\BitSet@KillZeros + \csname BitSet@Hex#1\endcsname + \fi + \expandafter\BitSet@FromHex + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@FromHex} +% \begin{macrocode} +\def\BitSet@FromHex#1{% + \ifx#1!% + \else + \expandafter\ifx\csname BitSet@Hex#1\endcsname\relax + \BitSetError:InvalidHexDigit% + \else + \csname BitSet@Hex#1\endcsname + \fi + \expandafter\BitSet@FromHex + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Hex[0..F]} +% \begin{macrocode} +\def\BitSet@Temp#1{% + \expandafter\def\csname BitSet@Hex#1\endcsname +} +\BitSet@Temp 0{0000}% +\BitSet@Temp 1{0001}% +\BitSet@Temp 2{0010}% +\BitSet@Temp 3{0011}% +\BitSet@Temp 4{0100}% +\BitSet@Temp 5{0101}% +\BitSet@Temp 6{0110}% +\BitSet@Temp 7{0111}% +\BitSet@Temp 8{1000}% +\BitSet@Temp 9{1001}% +\BitSet@Temp A{1010}% +\BitSet@Temp B{1011}% +\BitSet@Temp C{1100}% +\BitSet@Temp D{1101}% +\BitSet@Temp E{1110}% +\BitSet@Temp F{1111}% +\BitSet@Temp a{1010}% +\BitSet@Temp b{1011}% +\BitSet@Temp c{1100}% +\BitSet@Temp d{1101}% +\BitSet@Temp e{1110}% +\BitSet@Temp f{1111}% +% \end{macrocode} +% \end{macro} +% +% \subsubsection{From decimal number} +% +% \begin{macro}{\bitsetSetDec} +% \begin{macrocode} +\def\bitsetSetDec#1#2{% + \edef\BitSet@Temp{#2}% + \edef\BitSet@Temp{% + \expandafter\expandafter\expandafter\BitSet@ZapSpace + \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty + }% + \edef\BitSet@Temp{% + \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty + }% + \ifx\BitSet@Temp\BitSet@Empty + \expandafter\let\csname BS@#1\endcsname\BitSet@Zero + \else + \ifcase\bigintcalcSgn{\BitSet@Temp} % + \expandafter\let\csname BS@#1\endcsname\BitSet@Zero + \or + \ifnum\bigintcalcCmp\BitSet@Temp\BitSet@MaxSize>0 % + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\BitSet@SetDecBig\BitSet@Temp!% + }% + \else + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\BitSet@SetDec\BitSet@Temp!% + }% + \fi + \else + \@PackageError{bitset}{% + Bit sets cannot be negative% + }\@ehc + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SetDecBig} +% \begin{macrocode} +\def\BitSet@SetDecBig#1#2#3#4#5#6#7#8#9!{% + \ifx\\#9\\% + \BitSet@SetDec#1#2#3#4#5#6#7#8!% + \else + \ifcase\BigIntCalcOdd#1#2#4#5#6#7#8#9! % + 0% + \or + 1% +? \else\BitSetError:ThisCannotHappen% + \fi + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@SetDecBig + \BigIntCalcShr#1#2#3#4#5#6#7#8#9!!% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SetDec} +% \begin{macrocode} +\def\BitSet@SetDec#1!{% + \ifcase#1 % + \or 1% + \else + \ifodd#1 % + 1% + \else + 0% + \fi + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@SetDec + \IntCalcShr#1!!% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Export}\label{src:export} +% +% \subsubsection{To binary number} +% +% \begin{macro}{\bitsetGetBin} +% \begin{macrocode} +\def\bitsetGetBin#1#2{% + \romannumeral0% + \expandafter\expandafter\expandafter\BitSet@@GetBin + \intcalcNum{#2}!{#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@GetBin} +% \begin{macrocode} +\def\BitSet@@GetBin#1!#2{% + \BitSet@IfUndefined{#2}{% + \ifnum#1>1 % + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@Fill + \IntCalcDec#1!!0% + }% + \else + \BitSet@AfterFi{ 0}% + \BitSet@Fi + }{% + \expandafter\expandafter\expandafter\BitSet@NumBinRev + \expandafter\expandafter\expandafter1% + \expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!!#1!% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Fill} +% |#1|: number of leading digits |0|\\ +% |#2|: result +% \begin{macrocode} +\def\BitSet@Fill#1!{% + \ifnum#1>0 % + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@Fill + \IntCalcDec#1!!0% + }% + \else + \BitSet@AfterFi{ }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@NumBinRev} +% |#1|: bit counter (including |#2|)\\ +% |#2#3|: reverted number\\ +% |#4|: result\\ +% |#5|: min size +% \begin{macrocode} +\def\BitSet@NumBinRev#1!#2#3!{% + \ifx\\#3\\% + \BitSet@AfterFi{% + \BitSet@NumBinFill#1!#2% + }% + \else + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@NumBinRev + \IntCalcInc#1!!#3!#2% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@NumBinFill} +% \begin{macrocode} +\def\BitSet@NumBinFill#1!#2!#3!{% + \ifnum#3>#1 % + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@Fill + \IntCalcSub#3!#1!!#2% + }% + \else + \BitSet@AfterFi{ #2}% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{To octal/hexadecimal number} +% +% \begin{macro}{\bitsetGetOct} +% \begin{macrocode} +\def\bitsetGetOct#1#2{% + \romannumeral0% + \bitsetIsEmpty{#1}{% + \expandafter\expandafter\expandafter\BitSet@@GetOctHex + \intcalcNum{#2}!3!230% + }{% + \expandafter\expandafter\expandafter\BitSet@@GetOct + \expandafter\expandafter\expandafter1% + \expandafter\expandafter\expandafter!% + \expandafter\expandafter\expandafter!% + \csname BS@#1\endcsname00% + \BitSet@Empty\BitSet@Empty\BitSet@Empty!{#2}% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetGetHex} +% \begin{macrocode} +\def\bitsetGetHex#1#2{% + \romannumeral0% + \bitsetIsEmpty{#1}{% + \expandafter\expandafter\expandafter\BitSet@@GetOctHex + \intcalcNum{#2}!4!340% + }{% + \expandafter\expandafter\expandafter\BitSet@@GetHex + \expandafter\expandafter\expandafter1% + \expandafter\expandafter\expandafter!% + \expandafter\expandafter\expandafter!% + \csname BS@#1\endcsname000% + \BitSet@Empty\BitSet@Empty\BitSet@Empty\BitSet@Empty!{#2}% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@GetOct} +% |#1|: number of digits\\ +% |#2|: result\\ +% |#3#4#5|: bits +% \begin{macrocode} +\def\BitSet@@GetOct#1!#2!#3#4#5{% + \ifx#5\BitSet@Empty + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@GetOctHex + \IntCalcDec#1!!#2!23% + }% + \else + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@@GetOct + \number\IntCalcInc#1!\expandafter\expandafter\expandafter!% + \csname BitSet@Oct#5#4#3\endcsname#2!% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Oct[000..111]} +% \begin{macrocode} +\def\BitSet@Temp#1#2#3#4{% + \expandafter\def\csname BitSet@Oct#1#2#3\endcsname{#4}% +} +\BitSet@Temp0000% +\BitSet@Temp0011% +\BitSet@Temp0102% +\BitSet@Temp0113% +\BitSet@Temp1004% +\BitSet@Temp1015% +\BitSet@Temp1106% +\BitSet@Temp1117% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@GetHex} +% |#1|: number of digits\\ +% |#2|: result\\ +% |#3#4#5#6|: bits +% \begin{macrocode} +\def\BitSet@@GetHex#1!#2!#3#4#5#6{% + \ifx#6\BitSet@Empty + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@GetOctHex + \IntCalcDec#1!!#2!34% + }% + \else + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@@GetHex + \number\IntCalcInc#1!\expandafter\expandafter\expandafter!% + \csname BitSet@Hex#6#5#4#3\endcsname#2!% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Hex[0000..1111]} +% \begin{macrocode} +\def\BitSet@Temp#1#2#3#4#5{% + \expandafter\def\csname BitSet@Hex#1#2#3#4\endcsname{#5}% +} +\BitSet@Temp00000% +\BitSet@Temp00011% +\BitSet@Temp00102% +\BitSet@Temp00113% +\BitSet@Temp01004% +\BitSet@Temp01015% +\BitSet@Temp01106% +\BitSet@Temp01117% +\BitSet@Temp10008% +\BitSet@Temp10019% +\BitSet@Temp1010A% +\BitSet@Temp1011B% +\BitSet@Temp1100C% +\BitSet@Temp1101D% +\BitSet@Temp1110E% +\BitSet@Temp1111F% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@GetOctHex} +% Leading zeros $ (|#4| - |#1| * 3 + 2)/3 $ if $ |#4| > |#1| * 3$\\ +% |#1|: digit size\\ +% |#2|: result\\ +% |#3|: bits per digit - 1\\ +% |#4|: bits per digit +% |#5|: garbage\\ +% |#6|: min size +% \begin{macrocode} +\def\BitSet@GetOctHex#1!#2!#3#4#5!#6{% + \expandafter\BitSet@@GetOctHex + \number\intcalcNum{#6}\expandafter\expandafter\expandafter!% + \IntCalcMul#1!#4!!#3#4#2% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@GetOctHex} +% |#1|: plain min size\\ +% |#2|: digits * (bits per digit)\\ +% |#3|: bits per digit - 1\\ +% |#4|: bits per digit +% \begin{macrocode} +\def\BitSet@@GetOctHex#1!#2!#3#4{% + \ifnum#1>#2 % + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\BitSet@Fill + \expandafter\IntCalcDiv\number + \expandafter\expandafter\expandafter\IntCalcAdd + \IntCalcSub#1!#2!!#3!!#4!!% + }% + \else + \BitSet@AfterFi{ }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{To decimal number} +% +% \begin{macro}{\bitsetGetDec} +% \begin{macrocode} +\def\bitsetGetDec#1{% + \romannumeral0% + \BitSet@IfUndefined{#1}{ 0}{% + \expandafter\expandafter\expandafter\BitSet@GetDec + \csname BS@#1\endcsname!% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@GetDec} +% \begin{macrocode} +\def\BitSet@GetDec#1#2!{% + \ifx\\#2\\% + \BitSet@AfterFi{ #1}% + \else + \BitSet@AfterFi{% + \BitSet@@GetDec2!#1!#2!% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@GetDec} +% |#1|: power of two\\ +% |#2|: result\\ +% |#3#4|: number +% \begin{macrocode} +\def\BitSet@@GetDec#1!#2!#3#4!{% + \ifx\\#4\\% + \ifx#31% + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@Space + \IntCalcAdd#1!#2!% + }% + \else + \BitSet@AfterFiFi{ #2}% + \fi + \else + \ifx#31% + \BitSet@AfterFiFi{% + \csname BitSet@N#1% + \expandafter\expandafter\expandafter\endcsname + \IntCalcAdd#1!#2!!#4!% + }% + \else + \BitSet@AfterFiFi{% + \csname BitSet@N#1\endcsname#2!#4!% + }% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@N[1,2,4,...]} +% \begin{macrocode} +\def\BitSet@Temp#1#2{% + \expandafter\def\csname BitSet@N#1\endcsname{% + \BitSet@@GetDec#2!% + }% +} +\BitSet@Temp{1}{2} +\BitSet@Temp{2}{4} +\BitSet@Temp{4}{8} +\BitSet@Temp{8}{16} +\BitSet@Temp{16}{32} +\BitSet@Temp{32}{64} +\BitSet@Temp{64}{128} +\BitSet@Temp{128}{256} +\BitSet@Temp{256}{512} +\BitSet@Temp{512}{1024} +\BitSet@Temp{1024}{2048} +\BitSet@Temp{2048}{4096} +\BitSet@Temp{4096}{8192} +\BitSet@Temp{8192}{16384} +\BitSet@Temp{16384}{32768} +\BitSet@Temp{32768}{65536} +\BitSet@Temp{65536}{131072} +\BitSet@Temp{131072}{262144} +\BitSet@Temp{262144}{524288} +\BitSet@Temp{524288}{1048576} +\BitSet@Temp{1048576}{2097152} +\BitSet@Temp{2097152}{4194304} +\BitSet@Temp{4194304}{8388608} +\BitSet@Temp{8388608}{16777216} +\BitSet@Temp{16777216}{33554432} +\BitSet@Temp{33554432}{67108864} +\BitSet@Temp{67108864}{134217728} +\BitSet@Temp{134217728}{268435456} +\BitSet@Temp{268435456}{536870912} +\BitSet@Temp{536870912}{1073741824} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@N1073741824} +% \begin{macrocode} +\expandafter\def\csname BitSet@N1073741824\endcsname{% + \BitSet@GetDecBig2147483648!% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@GetDecBig} +% |#1|: current power of two\\ +% |#2|: result\\ +% |#3#4|: number +% \begin{macrocode} +\def\BitSet@GetDecBig#1!#2!#3#4!{% + \ifx\\#4\\% + \ifx#31% + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@Space + \BigIntCalcAdd#1!#2!% + }% + \else + \BitSet@AfterFiFi{ #2}% + \fi + \else + \ifx#31% + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@@GetDecBig + \BigIntCalcAdd#1!#2!!#1!#4!% + }% + \else + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@GetDecBig + \BigIntCalcShl#1!!#2!#4!% + }% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@GetDecBig} +% |#1|: result\\ +% |#2|: power of two\\ +% |#3#4|: number +% \begin{macrocode} +\def\BitSet@@GetDecBig#1!#2!{% + \expandafter\expandafter\expandafter\BitSet@GetDecBig + \BigIntCalcShl#2!!#1!% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Logical operators}\label{src:log} +% +% \subsubsection{\cs{bitsetAnd}} +% +% \begin{macro}{\bitsetAnd} +% Decision table for \cs{bitsetAnd}: +% \begin{quote} +% \begin{tabular}{l|l|l|l|} +% & undef(B) & empty(B) & cardinality(B)$>$0\\ +% \hline +% undef(A) & A := empty & A := empty & A := empty\\ +% \hline +% empty(A) & & &\\ +% \hline +% cardinality(A)$>$0 & A := empty & A := empty & A \&= B\\ +% \hline +% \end{tabular} +% \end{quote} +% \begin{macrocode} +\def\bitsetAnd#1#2{% + \bitsetIsEmpty{#1}{% + \bitsetReset{#1}% + }{% + \bitsetIsEmpty{#2}{% + \bitsetReset{#1}% + }{% + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\expandafter\expandafter\BitSet@And + \csname BS@#1\expandafter\expandafter\expandafter\endcsname + \expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!!% + }% + \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty + \bitsetReset{#1}% + \fi + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@And} +% \begin{macrocode} +\def\BitSet@And#1#2!#3#4!#5!{% + \ifx\\#2\\% + \ifnum#1#3=11 #51\fi + \else + \ifx\\#4\\% + \ifnum#1#3=11 #51\fi + \else + \ifnum#1#3=11 % + #51% + \BitSet@AfterFiFiFi{% + \BitSet@And#2!#4!!% + }% + \else + \BitSet@AfterFiFiFi{% + \BitSet@And#2!#4!#50!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\cs{bitsetAndNot}} +% +% \begin{macro}{\bitsetAndNot} +% Decision table for \cs{bitsetAndNot}: +% \begin{quote} +% \begin{tabular}{l|l|l|l|} +% & undef(B) & empty(B) & cardinality(B)$>$0\\ +% \hline +% undef(A) & A := empty & A := empty & A := empty\\ +% \hline +% empty(A) & & &\\ +% \hline +% cardinality(A)$>$0 & & & A \&= !B\\ +% \hline +% \end{tabular} +% \end{quote} +% \begin{macrocode} +\def\bitsetAndNot#1#2{% + \bitsetIsEmpty{#1}{% + \bitsetReset{#1}% + }{% + \bitsetIsEmpty{#2}{% + }{% + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\expandafter\expandafter\BitSet@AndNot + \csname BS@#1\expandafter\expandafter\expandafter\endcsname + \expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!!% + }% + \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty + \bitsetReset{#1}% + \fi + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@AndNot} +% \begin{macrocode} +\def\BitSet@AndNot#1#2!#3#4!#5!{% + \ifx\\#2\\% + \ifnum#1#3=10 #51\fi + \else + \ifx\\#4\\% + #5% + \ifnum#1#3=10 1\else 0\fi + #2% + \else + \ifnum#1#3=10 % + #51% + \BitSet@AfterFiFiFi{% + \BitSet@AndNot#2!#4!!% + }% + \else + \BitSet@AfterFiFiFi{% + \BitSet@AndNot#2!#4!#50!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\cs{bitsetOr}} +% +% \begin{macro}{\bitsetOr} +% Decision table for \cs{bitsetOr}: +% \begin{quote} +% \begin{tabular}{l|l|l|l|} +% & undef(B) & empty(B) & cardinality(B)$>$0\\ +% \hline +% undef(A) & A := empty & A := empty & A := B\\ +% \hline +% empty(A) & & & A := B\\ +% \hline +% cardinality(A)$>$0 & & & A \string|= B\\ +% \hline +% \end{tabular} +% \end{quote} +% \begin{macrocode} +\def\bitsetOr#1#2{% + \bitsetIsEmpty{#2}{% + \BitSet@IfUndefined{#1}{\bitsetReset{#1}}{}% + }{% + \bitsetIsEmpty{#1}{% + \expandafter\let\csname BS@#1\expandafter\endcsname + \csname BS@#2\endcsname + }{% + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\expandafter\expandafter\BitSet@Or + \csname BS@#1\expandafter\expandafter\expandafter\endcsname + \expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!% + }% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Or} +% \begin{macrocode} +\def\BitSet@Or#1#2!#3#4!{% + \ifnum#1#3>0 1\else 0\fi + \ifx\\#2\\% + #4% + \else + \ifx\\#4\\% + #2% + \else + \BitSet@AfterFiFi{% + \BitSet@Or#2!#4!% + }% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\cs{bitsetXor}} +% +% \begin{macro}{\bitsetXor} +% Decision table for \cs{bitsetXor}: +% \begin{quote} +% \begin{tabular}{l|l|l|l|} +% & undef(B) & empty(B) & cardinality(B)$>$0\\ +% \hline +% undef(A) & A := empty & A := empty & A := B\\ +% \hline +% empty(A) & & & A := B\\ +% \hline +% cardinality(A)$>$0 & & & A \string^= B\\ +% \hline +% \end{tabular} +% \end{quote} +% \begin{macrocode} +\def\bitsetXor#1#2{% + \bitsetIsEmpty{#2}{% + \BitSet@IfUndefined{#1}{\bitsetReset{#1}}{}% + }{% + \bitsetIsEmpty{#1}{% + \expandafter\let\csname BS@#1\expandafter\endcsname + \csname BS@#2\endcsname + }{% + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\expandafter\expandafter\BitSet@Xor + \csname BS@#1\expandafter\expandafter\expandafter\endcsname + \expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!!% + }% + \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty + \bitsetReset{#1}% + \fi + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Xor} +% \begin{macrocode} +\def\BitSet@Xor#1#2!#3#4!#5!{% + \ifx\\#2\\% + \ifx#1#3% + \ifx\\#4\\% + \else + #50#4% + \fi + \else + #51#4% + \fi + \else + \ifx\\#4\\% + #5% + \ifx#1#30\else 1\fi + #2% + \else + \ifx#1#3% + \BitSet@AfterFiFiFi{% + \BitSet@Xor#2!#4!#50!% + }% + \else + #51% + \BitSet@AfterFiFiFi{% + \BitSet@Xor#2!#4!!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Shifting}\label{src:shift} +% +% \subsubsection{\cs{bitsetShiftLeft}} +% +% \begin{macro}{\bitsetShiftLeft} +% \begin{macrocode} +\def\bitsetShiftLeft#1#2{% + \BitSet@IfUndefined{#1}{% + \bitsetReset{#1}% + }{% + \bitsetIsEmpty{#1}{% + }{% + \expandafter\expandafter\expandafter\BitSet@ShiftLeft + \intcalcNum{#2}!{#1}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@ShiftLeft} +% \begin{macrocode} +\def\BitSet@ShiftLeft#1!#2{% + \ifcase\intcalcSgn{#1} % + \or + \begingroup + \uccode`m=`0 % + \uppercase\expandafter{\expandafter\endgroup + \expandafter\edef\csname BS@#2\expandafter\endcsname + \expandafter{% + \romannumeral#1000\expandafter\BitSet@Space + \csname BS@#2\endcsname + }% + }% + \else + \expandafter\BitSet@ShiftRight\BitSet@Gobble#1!{#2}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\cs{bitsetShiftRight}} +% +% \begin{macro}{\bitsetShiftRight} +% \begin{macrocode} +\def\bitsetShiftRight#1#2{% + \BitSet@IfUndefined{#1}{% + \bitsetReset{#1}% + }{% + \bitsetIsEmpty{#1}{% + }{% + \expandafter\expandafter\expandafter\BitSet@ShiftRight + \intcalcNum{#2}!{#1}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@ShiftRight} +% \begin{macrocode} +\def\BitSet@ShiftRight#1!#2{% + \ifcase\intcalcSgn{#1} % + \or + \expandafter\edef\csname BS@#2\endcsname{% + \expandafter\expandafter\expandafter\BitSet@Kill + \csname BS@#2\expandafter\endcsname\expandafter\BitSet@Empty + \expandafter=% + \expandafter{\expandafter}\expandafter{\expandafter}% + \romannumeral#1000!% + }% + \else + \expandafter\BitSet@ShiftLeft\BitSet@Gobble#1!{#2}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Kill} +% \begin{macrocode} +\def\BitSet@Kill#1#2=#3#4#5{% + #3#4% + \ifx#5!% + \ifx#1\BitSet@Empty + 0% + \else + #1#2% + \fi + \else + \ifx#1\BitSet@Empty + 0% + \BitSet@AfterFiFi\BitSet@Cleanup + \else + \BitSet@Kill#2=% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Bit manipulation}\label{src:bitman} +% +% \begin{macro}{\bitsetClear} +% \begin{macrocode} +\def\bitsetClear{% + \BitSet@CheckIndex\BitSet@Clear +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetSet} +% \begin{macrocode} +\def\bitsetSet{% + \BitSet@CheckIndex\BitSet@Set +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetFlip} +% \begin{macrocode} +\def\bitsetFlip{% + \BitSet@CheckIndex\BitSet@Flip +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetSetValue} +% \begin{macrocode} +\def\bitsetSetValue#1#2#3{% + \expandafter\expandafter\expandafter\BitSet@SetValue + \intcalcNum{#3}!{#1}{#2}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SetValue} +% |#1|: plain value\\ +% |#2|: BitSet\\ +% |#3|: Index +% \begin{macrocode} +\def\BitSet@SetValue#1!{% + \BitSet@CheckIndex{% + \ifcase#1 % + \expandafter\BitSet@Clear + \or + \expandafter\BitSet@Set + \else + \BitSet@ErrorInvalidBitValue{#1}% + \expandafter\expandafter\expandafter\BitSet@Gobble + \expandafter\BitSet@Gobble + \fi + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@ErrorInvalidBitValue} +% |#1|: Wrong bit value +% \begin{macrocode} +\def\BitSet@ErrorInvalidBitValue#1{% + \@PackageError{bitset}{% + Invalid bit value (#1) not in range 0..1% + }\@ehc +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Clear operation} +% +% \begin{macro}{\BitSet@Clear} +% |#1|: BitSet\\ +% |#2|: plain and checked index +% \begin{macrocode} +\def\BitSet@Clear#1#2{% + \edef\BitSet@Temp{% + \expandafter\expandafter\expandafter\BitSet@@Clear + \csname BS@#1\expandafter\endcsname + \expandafter\BitSet@Empty\expandafter=\expandafter!% + \romannumeral#2000!% + }% + \expandafter\let\csname BS@#1\expandafter\endcsname + \ifx\BitSet@Temp\BitSet@Empty + \BitSet@Zero + \else + \BitSet@Temp + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@Clear} +% \begin{macrocode} +\def\BitSet@@Clear#1#2=#3!#4{% + \ifx#4!% + \ifx#1\BitSet@Empty + \else + \ifx\BitSet@Empty#2% + \else + #30#2% + \fi + \fi + \else + \ifx#1\BitSet@Empty + \BitSet@AfterFiFi\BitSet@Cleanup + \else + \ifx#10% + \BitSet@AfterFiFiFi{% + \BitSet@@Clear#2=#30!% + }% + \else + #31% + \BitSet@AfterFiFiFi{% + \BitSet@@Clear#2=!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Set operation} +% +% \begin{macro}{\BitSet@Set} +% |#1|: BitSet\\ +% |#2|: plain and checked Index +% \begin{macrocode} +\def\BitSet@Set#1#2{% + \expandafter\edef\csname BS@#1\endcsname{% + \expandafter\expandafter\expandafter\BitSet@@Set + \csname BS@#1\expandafter\endcsname + \expandafter\BitSet@Empty\expandafter=% + \expandafter{\expandafter}\expandafter{\expandafter}% + \romannumeral#2000!% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@Set} +% \begin{macrocode} +\def\BitSet@@Set#1#2=#3#4#5{% + #3#4% + \ifx#5!% + 1#2% + \else + \ifx#1\BitSet@Empty + 0% + \BitSet@AfterFiFi\BitSet@@@Set + \else + #1% + \BitSet@@Set#2=% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@@Set} +% \begin{macrocode} +\def\BitSet@@@Set#1{% + \ifx#1!% + 1% + \else + 0% + \expandafter\BitSet@@@Set + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Flip operation} +% +% \begin{macro}{\BitSet@Flip} +% |#1|: BitSet\\ +% |#2|: plain and checked Index +% \begin{macrocode} +\def\BitSet@Flip#1#2{% + \edef\BitSet@Temp{% + \expandafter\expandafter\expandafter\BitSet@@Flip + \csname BS@#1\expandafter\endcsname + \expandafter\BitSet@Empty\expandafter=\expandafter!% + \romannumeral#2000!% + }% + \expandafter\let\csname BS@#1\expandafter\endcsname + \ifx\BitSet@Temp\BitSet@Empty + \BitSet@Zero + \else + \BitSet@Temp + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@Flip} +% \begin{macrocode} +\def\BitSet@@Flip#1#2=#3!#4{% + \ifx#4!% + \ifx#11% + \ifx\BitSet@Empty#2% + \else + #30#2% + \fi + \else + #31#2% + \fi + \else + \ifx#1\BitSet@Empty + #30% + \BitSet@AfterFiFi\BitSet@@@Set + \else + \ifx#10% + \BitSet@AfterFiFiFi{% + \BitSet@@Flip#2=#30!% + }% + \else + #31% + \BitSet@AfterFiFiFi{% + \BitSet@@Flip#2=!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Range operators} +% +% \begin{macro}{\bitsetClearRange} +% \begin{macrocode} +\def\bitsetClearRange{% + \BitSet@Range\BitSet@Clear +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetSetRange} +% \begin{macrocode} +\def\bitsetSetRange{% + \BitSet@Range\BitSet@Set +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetFlipRange} +% \begin{macrocode} +\def\bitsetFlipRange{% + \BitSet@Range\BitSet@Flip +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetSetValueRange} +% \begin{macrocode} +\def\bitsetSetValueRange#1#2#3#4{% + \expandafter\expandafter\expandafter\BitSet@SetValueRange + \intcalcNum{#4}!{#1}{#2}{#3}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SetValueRange} +% \begin{macrocode} +\def\BitSet@SetValueRange#1!#2#3#4{% + \ifcase#1 % + \BitSet@Range\BitSet@Clear{#2}{#3}{#4}% + \or + \BitSet@Range\BitSet@Set{#2}{#3}{#4}% + \else + \BitSet@ErrorInvalidBitValue{#1}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@Range} +% |#1|: clear/set/flip macro\\ +% |#2|: BitSet\\ +% |#3|: Index from\\ +% |#4|: Index to +% \begin{macrocode} +\def\BitSet@Range#1#2#3#4{% + \edef\BitSet@Temp{% + \noexpand\BitSet@@Range\noexpand#1{#2}% + \intcalcNum{#3}!\intcalcNum{#4}!% + }% + \BitSet@Temp +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@Range} +% |#1|: clear/set/flip macro\\ +% |#2|: BitSet\\ +% |#3|: Index from\\ +% |#4|: Index to +% \begin{macrocode} +\def\BitSet@@Range#1#2#3!#4!{% + \ifnum#3<0 % + \BitSet@NegativeIndex#1{#2}#3!#4!0!#4!% + \else + \ifnum#4<0 % + \BitSet@NegativeIndex#1{#2}#3!#4!#3!0!% + \else + \ifcase\intcalcCmp{#3}{#4} % + \or + \@PackageError{bitset}{% + Wrong index numbers in range [#3..#4]\MessageBreak% hash-ok + for clear/set/flip on bit set `#2'.\MessageBreak + The lower index exceeds the upper index.\MessageBreak + Canceling the operation as error recovery% + }\@ehc + \else + \BitSet@@@Range#3!#4!#1{#2}% + \fi + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@NegativeIndex} +% \begin{macrocode} +\def\BitSet@NegativeIndex#1#2#3!#4!#5!#6!{% + \@PackageError{bitset}{% + Negative index in range [#3..#4]\MessageBreak % hash-ok + for \string\bitset + \ifx#1\BitSet@Clear + Clear% + \else + \ifx#1\BitSet@Set + Set% + \else + Flip% + \fi + \fi + Range on bit set `#2'.\MessageBreak + Using [#5..#6] as error recovery% hash-ok + }\@ehc + \BitSet@@Range#1{#2}#5!#6!% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@Range} +% \begin{macrocode} +\def\BitSet@@@Range#1!#2!#3#4{% + \ifnum#1<#2 % + #3{#4}{#1}% + \BitSet@AfterFi{% + \expandafter\expandafter\expandafter\BitSet@@@Range + \IntCalcInc#1!!#2!#3{#4}% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Bit retrieval}\label{src:bitret} +% +% \subsubsection{\cs{bitsetGet}} +% +% \begin{macro}{\bitsetGet} +% \begin{macrocode} +\def\bitsetGet#1#2{% + \number + \expandafter\expandafter\expandafter\BitSet@Get + \intcalcNum{#2}!{#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Get} +% |#1|: plain index\\ +% |#2|: BitSet +% \begin{macrocode} +\def\BitSet@Get#1!#2{% + \ifnum#1<0 % + \BitSet@AfterFi{% + 0 \BitSetError:NegativeIndex% + }% + \else + \BitSet@IfUndefined{#2}{0}{% + \expandafter\expandafter\expandafter\BitSet@@Get + \csname BS@#2\expandafter\endcsname + \expandafter!\expandafter=% + \expandafter{\expandafter}\expandafter{\expandafter}% + \romannumeral\intcalcNum{#1}000!% + }% + \expandafter\BitSet@Space + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@Get} +% \begin{macrocode} +\def\BitSet@@Get#1#2=#3#4#5{% + #3#4% + \ifx#5!% + \ifx#1!% + 0% + \else + #1% + \fi + \else + \ifx#1!% + 0% + \BitSet@AfterFiFi\BitSet@Cleanup + \else + \BitSet@@Get#2=% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\cs{bitsetNextClearBit}, \cs{bitsetNextSetBit}} +% +% \begin{macro}{\bitsetNextClearBit} +% \begin{macrocode} +\def\bitsetNextClearBit#1#2{% + \number + \expandafter\expandafter\expandafter\BitSet@NextClearBit + \intcalcNum{#2}!{#1} % +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@NextClearBit} +% |#1|: Index\\ +% |#2|: BitSet +% \begin{macrocode} +\def\BitSet@NextClearBit#1!#2{% + \ifnum#1<0 % + \BitSet@NextClearBit0!{#2}% + \BitSet@AfterFi{% + \expandafter\BitSet@Space + \expandafter\BitSetError:NegativeIndex\romannumeral0% + }% + \else + \bitsetIsEmpty{#2}{#1}{% + \expandafter\BitSet@Skip + \number#1\expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!!!!!!!!!=% + {\BitSet@@NextClearBit#1!}% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@NextClearBit} +% |#1|: index for next bit in |#2|\\ +% |#2|: next bit +% \begin{macrocode} +\def\BitSet@@NextClearBit#1!#2{% + \ifx#2!% + #1% + \else + \ifx#20% + #1% + \BitSet@AfterFiFi\BitSet@Cleanup + \else + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@@NextClearBit + \IntCalcInc#1!!% + }% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bitsetNextSetBit} +% \begin{macrocode} +\def\bitsetNextSetBit#1#2{% + \number + \expandafter\expandafter\expandafter\BitSet@NextSetBit + \intcalcNum{#2}!{#1} % +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@NextSetBit} +% |#1|: Index\\ +% |#2|: BitSet +% \begin{macrocode} +\def\BitSet@NextSetBit#1!#2{% + \ifnum#1<0 % + \BitSet@NextSetBit0!{#2}% + \BitSet@AfterFi{% + \expandafter\BitSet@Space + \expandafter\BitSetError:NegativeIndex\romannumeral0% + }% + \else + \bitsetIsEmpty{#2}{-1}{% + \expandafter\BitSet@Skip + \number#1\expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!!!!!!!!!=% + {\BitSet@@NextSetBit#1!}% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@@NextSetBit} +% |#1|: index for next bit in |#2|\\ +% |#2|: next bit +% \begin{macrocode} +\def\BitSet@@NextSetBit#1!#2{% + \ifx#2!% + -1% + \else + \ifx#21% + #1% + \BitSet@AfterFiFi\BitSet@Cleanup + \else + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@@NextSetBit + \IntCalcInc#1!!% + }% + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Cleanup} +% \begin{macrocode} +\def\BitSet@Cleanup#1!{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BitSet@Skip} +% |#1|: number of bits to skip\\ +% |#2|: bits\\ +% |#3|: continuation code +% \begin{macrocode} +\def\BitSet@Skip#1!#2{% + \ifx#2!% + \BitSet@AfterFi{% + \BitSet@SkipContinue% + }% + \else + \ifcase#1 % + \BitSet@AfterFiFi{% + \BitSet@SkipContinue#2% + }% + \or + \BitSet@AfterFiFi\BitSet@SkipContinue + \or + \BitSet@AfterFiFi{% + \expandafter\BitSet@SkipContinue\BitSet@Gobble + }% + \else + \ifnum#1>8 % + \BitSet@AfterFiFiFi{% + \expandafter\BitSet@Skip + \number\IntCalcSub#1!8!\expandafter!% + \BitSet@GobbleSeven + }% + \else + \BitSet@AfterFiFiFi{% + \expandafter\expandafter\expandafter\BitSet@Skip + \IntCalcDec#1!!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@SkipContinue} +% |#1|: remaining bits\\ +% |#2|: continuation code +% \begin{macrocode} +\def\BitSet@SkipContinue#1!#2=#3{% + #3#1!% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@GobbleSeven} +% \begin{macrocode} +\def\BitSet@GobbleSeven#1#2#3#4#5#6#7{} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\cs{bitsetGetSetBitList}} +% +% \begin{macro}{\bitsetGetSetBitList} +% It's just a wrapper for \cs{bitsetNextSetBit}. +% \begin{macrocode} +\def\bitsetGetSetBitList#1{% + \romannumeral0% + \bitsetIsEmpty{#1}{ }{% + \expandafter\BitSet@GetSetBitList + \number\BitSet@NextSetBit0!{#1}!{#1}{}!% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@GetSetBitList} +% |#1|: found index\\ +% |#2|: BitSet\\ +% |#3|: comma +% |#4|: result +% \begin{macrocode} +\def\BitSet@GetSetBitList#1!#2#3#4!{% + \ifnum#1<0 % + \BitSet@AfterFi{ #4}% + \else + \BitSet@AfterFi{% + \expandafter\BitSet@GetSetBitList\number + \expandafter\expandafter\expandafter\BitSet@NextSetBit + \IntCalcInc#1!!{#2}!{#2},#4#3#1!% + }% + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Bit set properties}\label{src:prop} +% +% \begin{macro}{\bitsetSize} +% \begin{macrocode} +\def\bitsetSize#1{% + \number + \BitSet@IfUndefined{#1}{0 }{% + \expandafter\expandafter\expandafter\BitSet@Size + \expandafter\expandafter\expandafter1% + \expandafter\expandafter\expandafter!% + \csname BS@#1\endcsname!0!% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Size} +% |#1|: counter\\ +% |#2#3|: bits\\ +% |#4|: result +% \begin{macrocode} +\def\BitSet@Size#1!#2#3!#4!{% + \ifx#21% + \ifx\\#3\\% + \BitSet@AfterFiFi{#1 }% + \else + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@Size + \IntCalcInc#1!!#3!#1!% + }% + \fi + \else + \ifx\\#3\\% + \BitSet@AfterFiFi{#4 }% + \else + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@Size + \IntCalcInc#1!!#3!#4!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bitsetCardinality} +% \begin{macrocode} +\def\bitsetCardinality#1{% + \number + \BitSet@IfUndefined{#1}{0 }{% + \expandafter\expandafter\expandafter\BitSet@Cardinality + \expandafter\expandafter\expandafter0% + \expandafter\expandafter\expandafter!% + \csname BS@#1\endcsname!% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Cardinality} +% |#1|: result\\ +% |#2#3|: bits +% \begin{macrocode} +\def\BitSet@Cardinality#1!#2#3!{% + \ifx#21% + \ifx\\#3\\% + \BitSet@AfterFiFi{\IntCalcInc#1! }% + \else + \BitSet@AfterFiFi{% + \expandafter\expandafter\expandafter\BitSet@Cardinality + \IntCalcInc#1!!#3!% + }% + \fi + \else + \ifx\\#3\\% + \BitSet@AfterFiFi{#1 }% + \else + \BitSet@AfterFiFi{% + \BitSet@Cardinality#1!#3!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Queries}\label{src:query} +% +% \begin{macro}{\bitsetIsDefined} +% \begin{macrocode} +\def\bitsetIsDefined#1{% + \BitSet@IfUndefined{#1}% + \BitSet@SecondOfTwo + \BitSet@FirstOfTwo +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\bitsetIsEmpty} +% \begin{macrocode} +\def\bitsetIsEmpty#1{% + \BitSet@IfUndefined{#1}\BitSet@FirstOfTwo{% + \expandafter\ifx\csname BS@#1\endcsname\BitSet@Zero + \expandafter\BitSet@FirstOfTwo + \else + \expandafter\BitSet@SecondOfTwo + \fi + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Zero} +% \begin{macrocode} +\def\BitSet@Zero{0} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bitsetQuery} +% \begin{macrocode} +\def\bitsetQuery#1#2{% + \ifnum\bitsetGet{#1}{#2}=1 % + \expandafter\BitSet@FirstOfTwo + \else + \expandafter\BitSet@SecondOfTwo + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bitsetEquals} +% \begin{macrocode} +\def\bitsetEquals#1#2{% + \BitSet@IfUndefined{#1}{% + \BitSet@IfUndefined{#2}\BitSet@FirstOfTwo\BitSet@SecondOfTwo + }{% + \BitSet@IfUndefined{#2}\BitSet@SecondOfTwo{% + \expandafter\ifx\csname BS@#1\expandafter\endcsname + \csname BS@#2\endcsname + \expandafter\BitSet@FirstOfTwo + \else + \expandafter\BitSet@SecondOfTwo + \fi + }% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bitsetIntersects} +% \begin{macrocode} +\def\bitsetIntersects#1#2{% + \bitsetIsEmpty{#1}\BitSet@SecondOfTwo{% + \bitsetIsEmpty{#2}\BitSet@SecondOfTwo{% + \expandafter\expandafter\expandafter\BitSet@Intersects + \csname BS@#1\expandafter\expandafter\expandafter\endcsname + \expandafter\expandafter\expandafter!% + \csname BS@#2\endcsname!% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\BitSet@Intersects} +% \begin{macrocode} +\def\BitSet@Intersects#1#2!#3#4!{% + \ifnum#1#3=11 % + \BitSet@AfterFi\BitSet@FirstOfTwo + \else + \ifx\\#2\\% + \BitSet@AfterFiFi\BitSet@SecondOfTwo + \else + \ifx\\#4\\% + \BitSet@AfterFiFiFi\BitSet@SecondOfTwo + \else + \BitSet@AfterFiFiFi{% + \BitSet@Intersects#2!#4!% + }% + \fi + \fi + \BitSet@Fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\BitSet@AtEnd% +% +% \end{macrocode} +%% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{bitset}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/bitset/bitset.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/bitset/bitset.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `bitset' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/bitset.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{bitset.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip bitset.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex bitset.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% bitset.sty & tex/generic/bitset/bitset.sty\\ +% bitset.pdf & doc/latex/bitset/bitset.pdf\\ +% bitset.dtx & source/latex/bitset/bitset.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{bitset.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex bitset.dtx +%makeindex -s gind.ist bitset.idx +%pdflatex bitset.dtx +%makeindex -s gind.ist bitset.idx +%pdflatex bitset.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{History} +% \begin{Version}{2007/09/28 v1.0} +% \item +% First version. +% \end{Version} +% \begin{Version}{2011/01/30 v1.1} +% \item +% Already loaded package files are not input in \hologo{plainTeX}. +% \end{Version} +% \begin{Version}{2016/05/16 v1.2} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2019/12/09 v1.3} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/bitset/bitset.pdf b/macros/latex/contrib/bitset/bitset.pdf new file mode 100644 index 0000000000..2572156d82 Binary files /dev/null and b/macros/latex/contrib/bitset/bitset.pdf differ diff --git a/macros/latex/contrib/catchfile/README.md b/macros/latex/contrib/catchfile/README.md new file mode 100644 index 0000000000..5975b3433f --- /dev/null +++ b/macros/latex/contrib/catchfile/README.md @@ -0,0 +1,9 @@ +# catchfile + +catchfile package for LaTeX + + +This package catches the contents of a file and puts it in a macro. +It requires eTeX. Both LaTeX and plain TeX are supported. + + diff --git a/macros/latex/contrib/catchfile/catchfile.dtx b/macros/latex/contrib/catchfile/catchfile.dtx new file mode 100644 index 0000000000..b6a4549709 --- /dev/null +++ b/macros/latex/contrib/catchfile/catchfile.dtx @@ -0,0 +1,777 @@ +% \iffalse meta-comment +% +% File: catchfile.dtx +% Version: 2019/12/09 v1.8 +% Info: Catch the contents of a file +% +% Copyright (C) +% 2007, 2010, 2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/catchfile/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/catchfile/issues +% +% The Base Interpreter refers to any `TeX-Format', +% because some files are installed in TDS:tex/generic//. +% +% This work consists of the main source file catchfile.dtx +% and the derived files +% catchfile.sty, catchfile.pdf, catchfile.ins, catchfile.drv, +% catchfile-test1.tex, catchfile-test2.tex, +% catchfile-test3.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/catchfile/catchfile.dtx +% CTAN:macros/latex/contrib/catchfile/catchfile.pdf +% +% Unpacking: +% (a) If catchfile.ins is present: +% tex catchfile.ins +% (b) Without catchfile.ins: +% tex catchfile.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{catchfile.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If catchfile.drv is present: +% latex catchfile.drv +% (b) Without catchfile.drv: +% latex catchfile.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex catchfile.dtx +% makeindex -s gind.ist catchfile.idx +% pdflatex catchfile.dtx +% makeindex -s gind.ist catchfile.idx +% pdflatex catchfile.dtx +% +% Installation: +% TDS:tex/generic/catchfile/catchfile.sty +% TDS:doc/latex/catchfile/catchfile.pdf +% TDS:source/latex/catchfile/catchfile.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: catchfile 2019/12/09 v1.8 Catch the contents of a file (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: catchfile +Version: 2019/12/09 v1.8 + +Copyright (C) + 2007, 2010, 2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/catchfile/issues + + +The Base Interpreter refers to any `TeX-Format', +because some files are installed in TDS:tex/generic//. + +This work consists of the main source file catchfile.dtx +and the derived files + catchfile.sty, catchfile.pdf, catchfile.ins, catchfile.drv, + catchfile-test1.tex, catchfile-test2.tex, + catchfile-test3.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{catchfile.ins}{\from{catchfile.dtx}{install}}% + \file{catchfile.drv}{\from{catchfile.dtx}{driver}}% + \usedir{tex/generic/catchfile}% + \file{catchfile.sty}{\from{catchfile.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* catchfile.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `catchfile.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{catchfile.drv}% + [2019/12/09 v1.8 Catch the contents of a file (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{catchfile.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{catchfile.drv} +% +% \title{The \xpackage{catchfile} package} +% \date{2019/12/09 v1.8} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/catchfile/issues}}} +% +% \maketitle +% +% \begin{abstract} +% This package catches the contents of a file and puts it in a macro. +% It requires \eTeX. Both \LaTeX\ and \plainTeX\ are supported. +% \end{abstract} +% +% \tableofcontents +% +% \section{Documentation} +% +% The package relies on \eTeX's \cs{everyeof}. Otherwise it +% aborts with an error message. +% +% \begin{declcs}{CatchFileDef} \M{cmd} \M{file name} \M{setup}\\ +% \cs{CatchFileEdef} \M{cmd} \M{file name} \M{setup} +% \end{declcs} +% Macro \meta{cmd} is defined with the contents +% of file \meta{file name}. +% \cs{CatchFileDef} uses \cs{def}, \cs{CatchFileEdef} \cs{edef} +% for the definition. +% Additional setup code for setting +% catcodes or treatment of line ends can be given in code +% \meta{setup}. See the test files for an example. +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Reload check and package identification} +% Reload check, especially if the package is not used with \LaTeX. +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@catchfile.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{catchfile}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +% \end{macrocode} +% Package identification: +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@catchfile.sty\endcsname +\ProvidesPackage{catchfile}% + [2019/12/09 v1.8 Catch the contents of a file (HO)]% +% \end{macrocode} +% +% \subsection{Catcodes} +% +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname CatchFile@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\CatchFile@AtEnd{% + \CatchFile@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{96}{12}% ` +\edef\CatchFile@AtEnd{\CatchFile@AtEnd\noexpand\endinput} +% \end{macrocode} +% +% \subsection{Preparations} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \input infwarerr.sty\relax + \input ltxcmds.sty\relax +\else + \RequirePackage{infwarerr}[2007/09/09]% + \RequirePackage{ltxcmds}[2010/03/09]% +\fi +% \end{macrocode} +% +% Check for \eTeX's \cs{everyeof}. +% \begin{macrocode} +\begingroup + \escapechar=92\relax + \edef\TestString{\string\everyeof}% + \edef\TestMeaning{\meaning\everyeof}% + \ifx\TestString\TestMeaning + \else + \@PackageError{catchfile}{% + Cannot find e-TeX's \string\everyeof,\MessageBreak + package loading is aborted% + }\@ehd + \endgroup + \expandafter\CatchFile@AtEnd + \fi% +\endgroup +% \end{macrocode} +% +% \subsection{Looking for primitive \cs{input}} +% +% \begin{macro}{\CatchFile@Input} +% The package needs the expandable primitive \cs{input}. +% However there are formats that redefine it. For example, +% \LaTeX's \cs{input} is not expandable, but it stores +% the primitive in \cs{@@input}. The third possibility +% is \cs{pdfprimitive}, introduced in \pdfTeX\ 1.40.0. +% +% Thus we try to find the primitive and store it in +% \cs{CatchFile@Input}. If it is used, it must be expanded +% twice (because of the solution with \cs{pdfprimitive}). +% \begin{macrocode} +\begingroup + \def\Check#1#2#3#4\endgroup{% + \edef\TestString{\string#1}% + \edef\TestMeaning{\meaning#2}% + \ifx\TestString\TestMeaning + \endgroup + \let\CatchFile@Primitive#2% + \def\CatchFile@Input{\CatchFile@Primitive#3}% + \else + #4\endgroup + \fi + }% + \Check\input\input{}% + \Check\input\@@input{}% + \Check\pdfprimitive\pdfprimitive\input + \@PackageError{% + Cannot find primitive \string\input,\MessageBreak + package loading is aborted% + }\@ehd + \csname endgroup\endcsname + \CatchFile@AtEnd% +\endgroup +% \end{macrocode} +% \end{macro} +% +% \subsection{Input file check} +% +% \begin{macro}{\CatchFile@CheckFileExists} +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname IfFileExists\endcsname\relax + \input pdftexcmds.sty\relax + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname pdf@filesize\endcsname\relax + \def\CatchFile@CheckFileExists#1{% + \expandafter\ifx\csname @inputcheck\endcsname\relax + \csname newread\endcsname\@inputcheck + \fi + \openin\@inputcheck#1\relax + \expandafter\closein\expandafter\@inputcheck + \ifeof\@inputcheck + \let\CatchFile@File\relax + \else + \def\CatchFile@File{#1}% + \fi + }% + \else + \def\CatchFile@CheckFileExists#1{% + \expandafter\expandafter\expandafter\ifx + \expandafter\expandafter\expandafter\relax\pdf@filesize{#1}\relax + \let\CatchFile@File\relax + \else + \def\CatchFile@File{#1}% + \fi + }% + \fi +\else + \def\CatchFile@CheckFileExists#1{% + \IfFileExists{#1}{% + \expandafter\CatchFile@DefFile\@filef@und\@nil + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname @addtofilelist\endcsname\relax + \else + \@addtofilelist\CatchFile@File + \fi + }{% + \let\CatchFile@File\relax + }% + }% + \def\CatchFile@DefFile#1 \@nil{% + \def\CatchFile@File{#1}% + }% +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CatchFile@NotFound} +% \begin{macrocode} +\def\CatchFile@NotFound#1#2{% + \def#1{}% + \@PackageError{catchfile}{% + File `#2' not found% + }\@ehc +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Catch file contents} +% +% \begin{macrocode} +\ltx@IfUndefined{RequirePackage}{% + \input etexcmds.sty\relax +}{% + \RequirePackage{etexcmds}[2010/01/28]% +} +% \end{macrocode} +% +% \begin{macro}{\CatchFileEdef} +% \begin{macrocode} +\long\def\CatchFileEdef#1#2#3{% + \CatchFile@CheckFileExists{#2}% + \ifx\CatchFile@File\relax + \CatchFile@NotFound{#1}{#2}% + \else + \begingroup + \everyeof{\noexpand}% + #3% + \xdef\CatchFile@Contents{\CatchFile@Input\CatchFile@File\space}% + \endgroup + \let#1\CatchFile@Contents + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CatchFileDef} +% \begin{macrocode} +\long\def\CatchFileDef#1#2#3{% + \CatchFile@CheckFileExists{#2}% + \ifx\CatchFile@File\relax + \CatchFile@NotFound{#1}{#2}% + \else + \begingroup + \everyeof\expandafter{% + \CatchFile@EOF + \expandafter\CatchFile@Finish + \noexpand + }% + \ltx@ifundefined{etex@unexpanded}{% + \expandafter\long\expandafter\def\expandafter\CatchFile@Do + \expandafter##\expandafter1\CatchFile@EOF{% + \toks\ltx@zero{##1}% + \xdef\CatchFile@gtemp{\the\toks\ltx@zero}% + \def\CatchFile@Finish{% + \endgroup + \let#1\CatchFile@gtemp + \global\let\CatchFile@gtemp\ltx@undefined + }% + }% + }{% + \expandafter\long\expandafter\def\expandafter\CatchFile@Do + \expandafter##\expandafter1\CatchFile@EOF{% + \edef\CatchFile@Finish{% + \endgroup + \etex@unexpanded{% + \edef#1{\etex@unexpanded{##1}}% + }% + }% + }% + }% + #3\relax + \expandafter\expandafter\expandafter\CatchFile@Do + \CatchFile@Input\CatchFile@File\relax + \fi +} +% \end{macrocode} +% \cs{relax} after |#3| was added to make it more robust in +% case the user uses something like +%\begin{verbatim} +%\CatchFileDef{\content}{\jobname.tt}{\endlinechar=-1} +%\end{verbatim} +% that expands the following \cs{expandafter} after |#3| prematurely +% (contribution of Martin Scharrer). +% \end{macro} +% \begin{macro}{\CatchFile@EOF} +% If the file is read the catcode mappings are fixed. +% This means that the same character cannot occur +% inside the file with different catcodes. +% Thus we use as end of file marker the at sign +% twice with different catcodes. +% \begin{macrocode} +\begingroup + \lccode65=64 % lowercase('A') = '@' + \lccode66=64 % lowercase('B') = '@' + \catcode65=8 % catcode('A') = subscript + \catcode66=3 % catcode('B') = math shift +\lowercase{\endgroup + \def\CatchFile@EOF{AB}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\CatchFile@AtEnd% +% +% \end{macrocode} +%% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{catchfile}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/catchfile/catchfile.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/catchfile/catchfile.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `catchfile' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/catchfile.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{catchfile.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip catchfile.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex catchfile.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% catchfile.sty & tex/generic/catchfile/catchfile.sty\\ +% catchfile.pdf & doc/latex/catchfile/catchfile.pdf\\ +% catchfile.dtx & source/latex/catchfile/catchfile.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{catchfile.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex catchfile.dtx +%makeindex -s gind.ist catchfile.idx +%pdflatex catchfile.dtx +%makeindex -s gind.ist catchfile.idx +%pdflatex catchfile.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{History} +% \begin{Version}{2007/05/30 v1.0} +% \item +% First version. +% \end{Version} +% \begin{Version}{2007/09/09 v1.1} +% \item +% Catcode section rewritten. +% \end{Version} +% \begin{Version}{2007/11/11 v1.2} +% \item +% Use of package \xpackage{pdftexcmds} for \LuaTeX\ support. +% \end{Version} +% \begin{Version}{2010/03/01 v1.3} +% \item +% Fix for unknown \cs{@PackageErrorNoLine}. +% \end{Version} +% \begin{Version}{2010/04/08 v1.4} +% \item +% \cs{closein} also added if \cs{ifeof} is true. +% \end{Version} +% \begin{Version}{2010/04/28 v1.5} +% \item +% \cs{CatchFileDef}: Getting rid of warning `end of semi simple group +% entered at line \dots\ of +% a different file (Florent Chervet). +% \item +% \cs{CatchFileDef}: Fix for error `Illegal parameter number in +% definition of \dots' (HO) including improvement that uses +% \cs{unexpanded} if available (Florent Chervet). +% \end{Version} +% \begin{Version}{2011/03/01 v1.6} +% \item +% \cs{relax} added after the setup argument of +% \cs{CatchFileDef} to prevent premature file reading +% (Martin Scharrer). +% \end{Version} +% \begin{Version}{2016/05/16 v1.7} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2019/12/09 v1.8} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/catchfile/catchfile.pdf b/macros/latex/contrib/catchfile/catchfile.pdf new file mode 100644 index 0000000000..cc9f89d10f Binary files /dev/null and b/macros/latex/contrib/catchfile/catchfile.pdf differ diff --git a/macros/latex/contrib/listingsutf8/README.md b/macros/latex/contrib/listingsutf8/README.md new file mode 100644 index 0000000000..c5d95c046f --- /dev/null +++ b/macros/latex/contrib/listingsutf8/README.md @@ -0,0 +1,11 @@ +# listingsutf8 + +listingsutf8 package for LaTeX + + +Package listings does not support files with multi-byte +encodings such as UTF-8. In case of \lstinputlisting a simple +workaround is possible if an one-byte encoding exists that the file +can be converted to. Also eTeX and pdfTeX regardless of its mode +are required. + diff --git a/macros/latex/contrib/listingsutf8/listingsutf8.dtx b/macros/latex/contrib/listingsutf8/listingsutf8.dtx new file mode 100644 index 0000000000..31ae6f77b0 --- /dev/null +++ b/macros/latex/contrib/listingsutf8/listingsutf8.dtx @@ -0,0 +1,673 @@ +% \iffalse meta-comment +% +% File: listingsutf8.dtx +% Version: 2019/12/09 v1.4 +% Info: Allow UTF-8 in listings input +% +% Copyright (C) +% 2007, 2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/listingsutf8/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/listingsutf8/issues +% +% This work consists of the main source file listingsutf8.dtx +% and the derived files +% listingsutf8.sty, listingsutf8.pdf, listingsutf8.ins, listingsutf8.drv, +% listingsutf8-test1.tex, listingsutf8-test2.tex, +% listingsutf8-test3.tex, listingsutf8-test4.tex, +% listingsutf8-test5.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/listingsutf8/listingsutf8.dtx +% CTAN:macros/latex/contrib/listingsutf8/listingsutf8.pdf +% +% Unpacking: +% (a) If listingsutf8.ins is present: +% tex listingsutf8.ins +% (b) Without listingsutf8.ins: +% tex listingsutf8.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{listingsutf8.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If listingsutf8.drv is present: +% latex listingsutf8.drv +% (b) Without listingsutf8.drv: +% latex listingsutf8.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex listingsutf8.dtx +% makeindex -s gind.ist listingsutf8.idx +% pdflatex listingsutf8.dtx +% makeindex -s gind.ist listingsutf8.idx +% pdflatex listingsutf8.dtx +% +% Installation: +% TDS:tex/latex/listingsutf8/listingsutf8.sty +% TDS:doc/latex/listingsutf8/listingsutf8.pdf +% TDS:source/latex/listingsutf8/listingsutf8.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: listingsutf8 2019/12/09 v1.4 Allow UTF-8 in listings input (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: listingsutf8 +Version: 2019/12/09 v1.4 + +Copyright (C) + 2007, 2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/listingsutf8/issues + + +This work consists of the main source file listingsutf8.dtx +and the derived files + listingsutf8.sty, listingsutf8.pdf, listingsutf8.ins, listingsutf8.drv, + listingsutf8-test1.tex, listingsutf8-test2.tex, + listingsutf8-test3.tex, listingsutf8-test4.tex, + listingsutf8-test5.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{listingsutf8.ins}{\from{listingsutf8.dtx}{install}}% + \file{listingsutf8.drv}{\from{listingsutf8.dtx}{driver}}% + \usedir{tex/latex/listingsutf8}% + \file{listingsutf8.sty}{\from{listingsutf8.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* listingsutf8.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `listingsutf8.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{listingsutf8.drv}% + [2019/12/09 v1.4 Allow UTF-8 in listings input (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{listingsutf8.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{listingsutf8.drv} +% +% \title{The \xpackage{listingsutf8} package} +% \date{2019/12/09 v1.4} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/listingsutf8/issues}}} +% +% \maketitle +% +% \begin{abstract} +% Package \xpackage{listings} does not support files with multi-byte +% encodings such as UTF-8. In case of \cs{lstinputlisting} a simple +% workaround is possible if an one-byte encoding exists that the file +% can be converted to. Also \eTeX\ and \pdfTeX\ regardless of its mode +% are required. +% \end{abstract} +% +% \tableofcontents +% +% \section{Documentation} +% +% \subsection{User interface} +% +% Load this package after or instead of package \xpackage{listings} +% \cite{listings}. +% The package does not define own options and passes given options to +% package \xpackage{listings}. +% +% The syntax of package \xpackage{listings}' key \xoption{inputencoding} +% is extended: +% \begin{quote} +% |inputencoding=utf8/|\meta{one-byte-encoding}\\ +% Example: |inputencoding=utf8/latin1| +% \end{quote} +% That means the file is encoded in UTF-8 and can +% be converted to the given \meta{one-byte-encoding}. +% The available encodings for \meta{one-byte-encoding} are +% listed in section ``1.2 Supported encodings'' of +% package \xpackage{stringenc}'s documentation \cite{stringenc}. +% Of course, the encoding must encode its characters with +% one byte exactly. This excludes the unicode encodings +% (\xoption{utf8}, \xoption{utf16}, \dots). +% +% Only \cs{lstinputlisting} is supported by the syntax extension +% of key \xoption{inputencoding}. +% +% Internally package \xpackage{listingsutf8} reads the file as binary file +% via primitives of \pdfTeX\ (\cs{pdffiledump}). Then the file +% contents is converted as string using package \xpackage{stringenc} and +% finally the string is read as virtual file by \eTeX's \cs{scantokens}. +% +% \subsection{Future} +% +% Workarounds are not provided for +% \begin{itemize} +% \item \cs{lstinline} +% \item Environment |lstlisting|. +% \item Environments defined by \cs{lstnewenvironment}. +% \end{itemize} +% Perhaps someone will find time to extend package \xpackage{listings} +% with full native support for UTF-8. Then this package would become obsolete. +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Catcodes and identification} +% +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname lstU@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\lstU@AtEnd{% + \lstU@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{10}{12}% ^^J +\TMP@EnsureCode{33}{12}% ! +\TMP@EnsureCode{36}{3}% $ +\TMP@EnsureCode{38}{4}% & +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{42}{12}% * +\TMP@EnsureCode{43}{12}% + +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{12}% : +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{94}{7}% ^ (superscript) +\TMP@EnsureCode{95}{8}% _ (subscript) +\TMP@EnsureCode{96}{12}% ` +\TMP@EnsureCode{124}{12}% | +\TMP@EnsureCode{126}{13}% ~ (active) +\edef\lstU@AtEnd{\lstU@AtEnd\noexpand\endinput} +% \end{macrocode} +% +% Package identification. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{listingsutf8}% + [2019/12/09 v1.4 Allow UTF-8 in listings input (HO)] +% \end{macrocode} +% +% \subsection{Package options} +% +% Just pass options to package listings. +% +% \begin{macrocode} +\DeclareOption*{% + \PassOptionsToPackage\CurrentOption{listings}% +} +\ProcessOptions* +% \end{macrocode} +% Key \xoption{inputencoding} was introduced in version +% 2002/04/01 v1.0 of package \xpackage{listings}. +% \begin{macrocode} +\RequirePackage{listings}[2002/04/01] +% \end{macrocode} +% Ensure that \cs{inputencoding} is provided. +% \begin{macrocode} +\AtBeginDocument{% + \@ifundefined{inputencoding}{% + \RequirePackage{inputenc}% + }{}% +} +% \end{macrocode} +% +% \subsection{Check prerequisites} +% +% \begin{macrocode} +\RequirePackage{pdftexcmds}[2011/04/22] +% \end{macrocode} +% +% \begin{macrocode} +\def\lstU@temp#1#2{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname #1\endcsname\relax + \PackageWarningNoLine{listingsutf8}{% + Package loading is aborted because of missing % + \@backslashchar#1.\MessageBreak + #2% + }% + \expandafter\lstU@AtEnd + \fi +} +\lstU@temp{scantokens}{It is provided by e-TeX}% +\lstU@temp{pdf@unescapehex}{It is provided by pdfTeX >= 1.30}% +\lstU@temp{pdf@filedump}{It is provided by pdfTeX >= 1.30}% +\lstU@temp{pdf@filesize}{It is provided by pdfTeX >= 1.30}% +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{stringenc}[2010/03/01] +% \end{macrocode} +% +% \subsection{Add support for UTF-8} +% +% \begin{macro}{\iflstU@utfviii} +% \begin{macrocode} +\newif\iflstU@utfviii +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\lstU@inputenc} +% \begin{macrocode} +\def\lstU@inputenc#1{% + \expandafter\lstU@@inputenc#1utf8/utf8/\@nil +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\lstU@@inputenc} +\def\lstU@@inputenc#1utf8/#2utf8/#3\@nil{% + \ifx\\#1\\% + \lstU@utfviiitrue + \def\lst@inputenc{#2}% + \else + \lstU@utfviiifalse + \fi +} +% \begin{macrocode} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\lst@Key{inputencoding}\relax{% + \def\lst@inputenc{#1}% + \lstU@inputenc{#1}% +} +% \end{macrocode} +% +% \subsubsection{Conversion} +% +% \begin{macro}{\lstU@input} +% \begin{macrocode} +\def\lstU@input#1{% + \iflstU@utfviii + \edef\lstU@text{% + \pdf@unescapehex{% + \pdf@filedump{0}{\pdf@filesize{#1}}{#1}% + }% + }% + \lstU@CRLFtoLF\lstU@text + \StringEncodingConvert\lstU@text\lstU@text{utf8}\lst@inputenc + \def\lstU@temp{% + \scantokens\expandafter{\lstU@text}% + }% + \else + \def\lstU@temp{% + \input{#1}% + }% + \fi + \lstU@temp +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Convert CR/LF pairs to LF} +% +% \begin{macro}{\lstU@CRLFtoLF} +% \begin{macrocode} +\begingroup + \endlinechar=-1 % + \@makeother\^^J % + \@makeother\^^M % + \gdef\lstU@CRLFtoLF#1{% + \edef#1{% + \expandafter\lstU@CRLFtoLF@aux#1^^M^^J\@nil + }% + }% + \gdef\lstU@CRLFtoLF@aux#1^^M^^J#2\@nil{% + #1% + \ifx\relax#2\relax + \@car + \fi + ^^J% + \lstU@CRLFtoLF@aux#2\@nil + }% +\endgroup % +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Patch \cs{lst@InputListing}} +% +% \begin{macrocode} +\def\lstU@temp#1\def\lst@next#2#3\@nil{% + \def\lst@InputListing##1{% + #1% + \def\lst@next{\lstU@input{##1}}% + #3% + }% +} +\expandafter\lstU@temp\lst@InputListing{#1}\@nil +% \end{macrocode} +% +% \begin{macrocode} +\lstU@AtEnd% +% +% \end{macrocode} +%% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{listingsutf8}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/listingsutf8/listingsutf8.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/listingsutf8/listingsutf8.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `listingsutf8' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/listingsutf8.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{listingsutf8.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip listingsutf8.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex listingsutf8.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% listingsutf8.sty & tex/latex/listingsutf8/listingsutf8.sty\\ +% listingsutf8.pdf & doc/latex/listingsutf8/listingsutf8.pdf\\ +% listingsutf8.dtx & source/latex/listingsutf8/listingsutf8.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{listingsutf8.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex listingsutf8.dtx +%makeindex -s gind.ist listingsutf8.idx +%pdflatex listingsutf8.dtx +%makeindex -s gind.ist listingsutf8.idx +%pdflatex listingsutf8.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{thebibliography}{9} +% +% \bibitem{inputenc} +% Alan Jeffrey, Frank Mittelbach, +% \textit{inputenc.sty}, 2006/05/05 v1.1b. +% \CTANpkg{inputenc} +% +% \bibitem{listings} +% Carsten Heinz, Brooks Moses: +% \textit{The \xpackage{listings} package}; +% 2007/02/22;\\ +% \CTANpkg{listings}. +% +% \bibitem{stringenc} +% Heiko Oberdiek: +% \textit{The \xpackage{stringenc} package}; +% 2007/10/22;\\ +% \CTANpkg{stringenc}. +% +% \end{thebibliography} +% +% \begin{History} +% \begin{Version}{2007/10/22 v1.0} +% \item +% First version. +% \end{Version} +% \begin{Version}{2007/11/11 v1.1} +% \item +% Use of package \xpackage{pdftexcmds}. +% \end{Version} +% \begin{Version}{2011/11/10 v1.2} +% \item +% DOS line ends CR/LF normalized to LF to avoid empty lines +% (Bug report of Thomas Benkert in de.comp.text.tex). +% \end{Version} +% \begin{Version}{2016/05/16 v1.3} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2019/12/09 v1.4} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/listingsutf8/listingsutf8.pdf b/macros/latex/contrib/listingsutf8/listingsutf8.pdf new file mode 100644 index 0000000000..2c722abd81 Binary files /dev/null and b/macros/latex/contrib/listingsutf8/listingsutf8.pdf differ diff --git a/macros/latex/contrib/oberdiek/README.txt b/macros/latex/contrib/oberdiek/README.txt index 9abb0caf69..1a01bea365 100644 --- a/macros/latex/contrib/oberdiek/README.txt +++ b/macros/latex/contrib/oberdiek/README.txt @@ -1,4 +1,4 @@ -README 2019/12/05 +README 2019/12/09 This file describes the directory CTAN:macros/latex/contrib/oberdiek/ diff --git a/macros/latex/contrib/oberdiek/aliascnt.pdf b/macros/latex/contrib/oberdiek/aliascnt.pdf index 81d6089175..2710d52efd 100644 Binary files a/macros/latex/contrib/oberdiek/aliascnt.pdf and b/macros/latex/contrib/oberdiek/aliascnt.pdf differ diff --git a/macros/latex/contrib/oberdiek/alphalph.dtx b/macros/latex/contrib/oberdiek/alphalph.dtx deleted file mode 100644 index 7c70cd4825..0000000000 --- a/macros/latex/contrib/oberdiek/alphalph.dtx +++ /dev/null @@ -1,1535 +0,0 @@ -% \iffalse meta-comment -% -% File: alphalph.dtx -% Version: 2016/05/16 v2.5 -% Info: Convert numbers to letters -% -% Copyright (C) -% 1999, 2006-2008, 2010, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% The Base Interpreter refers to any `TeX-Format', -% because some files are installed in TDS:tex/generic//. -% -% This work consists of the main source file alphalph.dtx -% and the derived files -% alphalph.sty, alphalph.pdf, alphalph.ins, alphalph.drv, -% alphalph-test1.tex, alphalph-test2.tex, alphalph-test3.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/alphalph.dtx -% CTAN:macros/latex/contrib/oberdiek/alphalph.pdf -% -% Unpacking: -% (a) If alphalph.ins is present: -% tex alphalph.ins -% (b) Without alphalph.ins: -% tex alphalph.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{alphalph.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If alphalph.drv is present: -% latex alphalph.drv -% (b) Without alphalph.drv: -% latex alphalph.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex alphalph.dtx -% makeindex -s gind.ist alphalph.idx -% pdflatex alphalph.dtx -% makeindex -s gind.ist alphalph.idx -% pdflatex alphalph.dtx -% -% Installation: -% TDS:tex/generic/oberdiek/alphalph.sty -% TDS:doc/latex/oberdiek/alphalph.pdf -% TDS:source/latex/oberdiek/alphalph.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: alphalph 2016/05/16 v2.5 Convert numbers to letters (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: alphalph -Version: 2016/05/16 v2.5 - -Copyright (C) - 1999, 2006-2008, 2010, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -The Base Interpreter refers to any `TeX-Format', -because some files are installed in TDS:tex/generic//. - -This work consists of the main source file alphalph.dtx -and the derived files - alphalph.sty, alphalph.pdf, alphalph.ins, alphalph.drv, - alphalph-test1.tex, alphalph-test2.tex, alphalph-test3.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{alphalph.ins}{\from{alphalph.dtx}{install}}% - \file{alphalph.drv}{\from{alphalph.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% - \file{alphalph.sty}{\from{alphalph.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{alphalph-test1.tex}{\from{alphalph.dtx}{test1}}% -% \file{alphalph-test2.tex}{\from{alphalph.dtx}{test2,etex}}% -% \file{alphalph-test3.tex}{\from{alphalph.dtx}{test2,noetex}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* alphalph.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `alphalph.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{alphalph.drv}% - [2016/05/16 v2.5 Convert numbers to letters (HO)]% -\documentclass{ltxdoc} -\usepackage{alphalph}[2016/05/16] -\makeatletter -\newalphalph{\fnsymbolwrap}[wrap]{\@fnsymbol}{} -\newcommand*{\fnsymbolsingle}[1]{% - \ensuremath{% - \ifcase#1% - \or *% - \or \dagger - \or \ddagger - \or \mathsection - \or \mathparagraph - \else - \@ctrerr - \fi - }% -} -\makeatother -\newalphalph{\fnsymbolmult}[mult]{\fnsymbolsingle}{} -\usepackage{amsmath} -\DeclareMathOperator{\opDiv}{div} -\DeclareMathOperator{\opMod}{mod} -\newcommand*{\Def}{% - \ensuremath{% - \mathrel{\mathop{:}}=% - }% -} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{alphalph.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{alphalph.drv} -% -% \title{The \xpackage{alphalph} package} -% \date{2016/05/16 v2.5} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% The package provides methods to represent numbers with a limited -% set of symbols. Both \hologo{LaTeX} and \hologo{plainTeX} are supported. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% \subsection{Introduction} -% \hologo{LaTeX} counters can be represented in different ways -% by using presentation commands: -% \begin{quote} -% \cs{arabic}, \cs{roman}, \cs{Roman},\\ -% \cs{alph}, \cs{Alph}, \cs{fnsymbol} -% \end{quote} -% The ranges of supported counter values are more or less -% restricted. Only \cs{arabic} can be used with any counter -% value \hologo{TeX} supports. -% \begin{quote} -% \catcode`\|=12 % -% \begin{tabular}{@{}l|l|l|l@{}} -% Presentation & Supported & Ignored & Error message\\ -% command & domain & values & ``Counter too large''\\ -% \hline -% \cs{arabic} -% & \ttfamily -MAX..MAX & &\\ -% \cs{roman}, \cs{Roman} -% & \ttfamily 1..MAX & \ttfamily -MAX..0 &\\ -% \cs{alph}, \cs{Alph} -% & \ttfamily 1..26 & 0 & \ttfamily -MAX..-1, 27..MAX\\ -% \cs{fnsymbol} -% & \ttfamily 1..9 & 0 & \ttfamily -MAX..-1, 10..MAX\\ -% \hline -% \end{tabular}\\[1ex] -% \texttt{MAX} = \texttt{2147483647} -% \end{quote} -% Ordinal numbers are often used in documents: numbering -% of chapters, sections, figures, footnotes and so on. -% The layouter chooses \cs{Alph} for chapter numbers -% and \cs{fnsymbol} for footnotes. But what can be done -% if there are more than 26 chapters or more than 10 footnotes? -% This package \xpackage{alphalph} allows to define new -% presentation commands. They rely on a existing command -% and define presentations for values greater the limits. -% Three different methods are provided by the package. -% In the following use cases they are presentated. -% -% \subsection{Use cases} -% -% \subsubsection{Number system based on symbols} -% -% Asume you are writing a book and your lecturer demands -% that chapter numbers must be letters. But you have already -% 30 chapters and you have only 26 letters? -% -% In the decimal system the situation would be clear. -% If you run out of digits, you are using more digits -% to represent a number. This method can be also be used -% for letters. After chapter 26 with |Z| we us |AA|, |AB|, |AC|, and |AD| -% for the remaining chapters. -% -% Happily this package already defines this presentation command: -%\begin{quote} -%\begin{verbatim} -%\usepackage{alphalph} -%\renewcommand*{\thechapter}{% -% \AlphAlph{\value{chapter}}% -%} -%\end{verbatim} -%\end{quote} -% \cs{AlphAlph} generates: -% \AlphAlph{1}, \AlphAlph{2}, \AlphAlph{3}, \dots, -% \AlphAlph{26}, \AlphAlph{27}, \AlphAlph{28}, \dots -% -% The other presentation command is \cs{alphalph} for lowercase letters. -% -% \subsubsection{Wrap symbols around} -% -% Nine footnote symbols are quite a few. -% Too soon the symbols are consumed -% and \hologo{LaTeX} complains with the error ``Counter too large''. -% However, it could be acceptable to start again with the symbols -% from the beginning, especially if there are less than nine symbols -% on a page. -% This could be achieved by a counter reset. -% But finding the right place can be difficult or needs manual -% actions. Also a -% unique counter value can be desirable (e.g. for generating -% unique anchor/link names). -% Package \xpackage{alphalph} allows you to define -% a macro that implements a ``wrap around'', but letting -% the value of the counter untouched: -%\begin{quote} -%\begin{verbatim} -%\usepackage{alphalph} -%\makeatletter -%\newalphalph{\fnsymbolwrap}[wrap]{\@fnsymbol}{} -%\makeatother -%\renewcommand*{\thefootnote}{% -% \fnsymbolwrap{\value{footnote}}% -%} -%\end{verbatim} -%\end{quote} -% \cs{fnsymbolwrap} generates: -% \fnsymbolwrap{1}~(1), \fnsymbolwrap{2}~(2), \fnsymbolwrap{3}~(3), \dots, -% \fnsymbolwrap{9}~(9), \fnsymbolwrap{10}~(10), \fnsymbolwrap{11}~11, \dots -% -% \subsubsection{Multiple symbols} -% -% \Hologo{LaTeX}'s standard set of footnote symbols contains doubled -% symbols at the higher positions. Could this principle -% be generalized? -% Yes, but first we need a clean footnote symbol list without -% doubled entries, example: -%\begin{quote} -%\begin{verbatim} -%\usepackage{alphalph} -%\makeatletter -%\newcommand*{\fnsymbolsingle}[1]{% -% \ensuremath{% -% \ifcase#1% -% \or *% -% \or \dagger -% \or \ddagger -% \or \mathsection -% \or \mathparagraph -% \else -% \@ctrerr -% \fi -% }% -%} -%\makeatother -%\newalphalph{\fnsymbolmult}[mult]{\fnsymbolsingle}{} -%\renewcommand*{\thefootnote}{% -% \fnsymbolmult{\value{footnote}}% -%} -%\end{verbatim} -%\end{quote} -% The own definition of \cs{fnsymbolsingle} has the -% advantage that this list can easily modified. -% Otherwise you can use \cs{@fnsymbol} directly, -% because it uses the same first five symbols. -%\begin{quote} -%\begin{verbatim} -%\usepackage{alphalph} -%\makeatletter -%\newalphalph{\fnsymbolmult}[mult]{\@fnsymbol}{5} -%\makeatother -%\renewcommand*{\thefootnote}{% -% \fnsymbolmult{\value{footnote}}% -%} -%\end{verbatim} -%\end{quote} -% \cs{fnsymbolmult} generates: -% \fnsymbolmult{1}~(1), \fnsymbolmult{2}~(2), \fnsymbolmult{3}~(3), -% \fnsymbolmult{4}~(4), \fnsymbolmult{5}~(5), \fnsymbolmult{6}~(6), -% \dots, \fnsymbolmult{16}~16, \fnsymbolmult{17}~17, \dots -% -% \bigskip -% The same method can also be used for the chapter problem -% in the first discussed use case: -%\begin{quote} -%\begin{verbatim} -%\usepackage{alphalph} -%\makeatletter -%\newalphalph{\AlphMult}[mult]{\@Alph}{26} -%\makeatother -%\renewcommand*{\chapter}{% -% \AlphMult{\value{chapter}}% -%} -%\end{verbatim} -%\end{quote} -% \cs{AlphMult} then generates AA, BB, CC, and DD for chapters 27--30. -% -% \subsection{Glossary} -% -% \begin{description} -% \item[Counter presentation command] is a macro that -% expects a \hologo{LaTeX} counter name as argument. -% Numbers cannot be used. Examples: -% \cs{arabic}, \cs{alph}, \cs{fnsymbol}. -% \item[Number presentation command] is a macro that -% expects a number as argument. A number is anything -% that \hologo{TeX} accepts as number including \cs{value}. -% Examples: \cs{alphalph}, \cs{AlphAlph}, \cs{alphalph@alph} -% -% However, \cs{alph} or \cs{fnsymbol} are not number -% presentation commands because they expect a counter -% name as argument. Happily \hologo{LaTeX} counter presentation -% commands internally uses number presentation commands -% with the same name, but prefixed by `@'. Thus -% \cs{@alph}, \cs{@fnsymbol} are number presentation commands. -% \item[Symbols provider] is a command that can be used -% to get a list of symbols. For example, \cs{@Alph} -% provides the 26 uppercase letters from `A' to `Z'. -% Basically a symbol provider is a number presentation -% command, usually with a limited range. -% \item[Number of symbols] is the number of the -% last symbol slot of a symbol provider. Thus \cs{@Alph} -% generates 26 symbols, \cs{@fnsymbol} provides 9 symbols. -% \end{description} -% -% \subsection{Package usage} -% -% The package \Package{alphalph} can be used with both \hologo{plainTeX} -% and \hologo{LaTeX}: -% \begin{description} -% \item[\hologo{plainTeX}:] |\input alphalph.sty| -% \item[\hologo{LaTeX2e}:] |\usepackage{alphalph}|\\ -% There aren't any options. -% \end{description} -% -% \subsection{User commands} -% -% \begin{declcs}{AlphAlph} \M{number}\\ -% \cs{alphalph} \M{number} -% \end{declcs} -% Both macros are number presentation commands that -% expects a number as argument. \hologo{LaTeX} counters -% are used with \cs{value}. -% -% The macros represents a number by letters. -% First single letters |A..Z| are used, then -% two letters |AA..ZZ|, three letters |AAA...ZZZ|, \dots -% follow. -% -% Macro \cs{AlphAlph} uses uppercase letters, -% \cs{alphalph} generates the lowercase variant. -% \begin{quote} -% \catcode`\|=12 -% \def\entry#1{ -% \texttt{#1} -% & \texttt{\AlphAlph{#1}} -% & \texttt{\alphalph{#1}} -% } -% \begin{tabular}{@{}l|l|l@{}} -% \meta{number} & \verb|\AlphAlph{|\meta{number}\verb|}| -% & \verb|\alphalph{|\meta{number}\verb|}|\\ -% \hline -% \entry{1}\\ -% \entry{2}\\ -% \entry{26}\\ -% \entry{27}\\ -% \entry{30}\\ -% \entry{2000}\\ -% \entry{3752127}\\ -% \entry{10786572}\\ -% \entry{2147483647}\\ -% \end{tabular} -% \end{quote} -% -% \begin{declcs}{newalphalph} -% \M{cmd} -% |[|\meta{method}|]| -% \M{symbols provider} -% \M{number of symbols} -% \end{declcs} -% Macro \cs{newalphalph} defines \meta{cmd} as new -% number presentation command. Like \cs{newcommand} an error -% is thrown, if macro \meta{cmd} already exists. -% -% The \meta{method} is one of |alph|, |wrap|, or |mult|. -% The default is |alph|. -% -% As symbol provider a number presentation command -% can be used, e.g. \cs{@fnsymbol}, \cs{@Alph}, or -% \cs{alphalph@alph}. -% -% The last argument is the number of symbols. -% If the argument is empty, then \cs{newalphalph} tries -% to find this number itself. \hologo{LaTeX}'s number presentation -% commands throw an error message, if the number is too large. -% This error message is put in a macro \cs{@ctrerr}. -% Thus \cs{newalphalph} calls the symbol provider and tests -% a number by typesetting it in a temporary box. The error -% macro \cs{@ctrerr} is catched, it proofs that the number -% is not supported. Also if the width of the result is zero -% the number is considered as unavailable. -% -% The empty argument is useful for potentially variable lists. -% However if the end cannot be detected, then the number of -% symbols must be given. This is also a lot faster. Therefore don't -% let the argument empty without reason. -% -% \subsection{Programmer commands} -% -% \begin{declcs}{alphalph@Alph} \M{number}\\ -% \cs{alphalph@alph} \M{number} -% \end{declcs} -% They are basically the same as \cs{@Alph} and \cs{@alph}. -% Some languages of package \xpackage{babel} redefine -% \hologo{LaTeX}'s macros to include some font setup that -% breaks expandibility. Therefore \cs{AlphAlph} and \cs{alphalph} -% are based on \cs{alphalph@Alph} and \cs{alphalph@alph} to get -% the letters. The behaviour of these symbol providers for numbers -% outside the range |1..26| is undefined. -% -% \subsection{Design principles} -% -% \subsubsection{Number presentation commands} -% -% All number presentation commands that this package defines -% (including \cs{alphalph} and \cs{AlphAlph}) have the following -% properties: -% \begin{itemize} -% \item They are fully expandable. This means that they can safely -% \begin{itemize} -% \item be written to a file, -% \item used in moving arguments (\hologo{LaTeX}: they are \emph{robust}), -% \item used in a \cmd{\csname}-\cmd{\endcsname} pair. -% \end{itemize} -% \item If the argument is zero or negative, the commands expand -% to nothing like \cmd{\romannumeral}. -% \item The argument is a \hologo{TeX} number. Anything that would be -% accepted by \cmd{\number} is a valid argument: -% \begin{itemize} -% \item explicite constants, -% \item macros that expand to a number, -% \item count registers, \hologo{LaTeX} counter can used -% via \cmd{\value}, e.\,g.:\\ -% |\alphalph{\value{page}}| -% \item \dots -% \end{itemize} -% \item \hologo{eTeX}'s numeric expressions are supported, if \hologo{eTeX} is -% available. Then \cs{numexpr} is applied to the argument. -% Package \cs{calc}'s expressions are not supported. -% That would violate the expandibility. -% \end{itemize} -% -% \subsubsection{General usability} -% -% \begin{description} -% \item[\hologo{TeX} format:] -% The package does not depend on \hologo{LaTeX}, it can also be used -% by \hologo{plainTeX}, for example. -% \item[\hologo{eTeX}:] \eTeX is supported, the macros are shorter and -% faster. But \eTeX's extensions are not requirements. -% Without \hologo{eTeX}, just the implementation changes. The properties -% remain unchanged. -% \end{description} -% -% \StopEventually{ -% } -% -% \section{Implementation} -% \subsection{Begin\texorpdfstring{ of package}{}} -% \begin{macrocode} -%<*package> -% \end{macrocode} -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode58=12 % : - \catcode64=11 % @ - \catcode123=1 % { - \catcode125=2 % } - \expandafter\let\expandafter\x\csname ver@alphalph.sty\endcsname - \ifx\x\relax % plain-TeX, first loading - \else - \def\empty{}% - \ifx\x\empty % LaTeX, first loading, - % variable is initialized, but \ProvidesPackage not yet seen - \else - \expandafter\ifx\csname PackageInfo\endcsname\relax - \def\x#1#2{% - \immediate\write-1{Package #1 Info: #2.}% - }% - \else - \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% - \fi - \x{alphalph}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode47=12 % / - \catcode58=12 % : - \catcode64=11 % @ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode123=1 % { - \catcode125=2 % } - \expandafter\ifx\csname ProvidesPackage\endcsname\relax - \def\x#1#2#3[#4]{\endgroup - \immediate\write-1{Package: #3 #4}% - \xdef#1{#4}% - }% - \else - \def\x#1#2[#3]{\endgroup - #2[{#3}]% - \ifx#1\@undefined - \xdef#1{#3}% - \fi - \ifx#1\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@alphalph.sty\endcsname -\ProvidesPackage{alphalph}% - [2016/05/16 v2.5 Convert numbers to letters (HO)]% -% \end{macrocode} -% -% \subsection{Catcodes} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname AlPh@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2{% - \edef\AlPh@AtEnd{% - \AlPh@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{33}{12}% ! -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{40}{12}% ( -\TMP@EnsureCode{41}{12}% ) -\TMP@EnsureCode{43}{12}% + -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{59}{12}% ; -\TMP@EnsureCode{60}{12}% < -\TMP@EnsureCode{62}{12}% > -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{96}{12}% ` -\TMP@EnsureCode{124}{12}% | -\edef\AlPh@AtEnd{\AlPh@AtEnd\noexpand\endinput} -% \end{macrocode} -% -% \subsection{Package loading} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \input infwarerr.sty\relax - \input intcalc.sty\relax -\else - \RequirePackage{infwarerr}[2007/09/09]% - \RequirePackage{intcalc}[2007/09/09]% -\fi -% \end{macrocode} -% -% \subsection{\hologo{eTeX} detection} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname numexpr\endcsname\relax - \catcode124=9 % '!': ignore - \catcode43=14 % '+': comment -\else - \catcode124=14 % '!': comment - \catcode43=9 % '+': ignore -\fi -% \end{macrocode} -% -% \subsection{Help macros} -% -% \begin{macro}{\AlPh@Error} -% \begin{macrocode} -\def\AlPh@Error#1{% - \begingroup - \escapechar=92 % backslash - \@PackageError{alphalph}{#1}\@ehc - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AlPh@IfDefinable} -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname @ifdefinable\endcsname\relax - \def\AlPh@IfDefinable#1#2{% - \ifcase\ifx#1\@undefined\else\ifx#1\relax\else1\fi\fi0 % - #2% - \else - \AlPh@Error{% - Command \string#1 already defined% - }% - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\else -% \end{macrocode} -% \begin{macro}{\AlPh@IfDefinable} -% \begin{macrocode} - \let\AlPh@IfDefinable\@ifdefinable -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\fi -% \end{macrocode} -% -% \begin{macro}{\@ReturnAfterElseFi} -% \begin{macro}{\@ReturnAfterFi} -% The following commands moves the `then' and `else' part respectively -% behind the |\if|-construct. This prevents a too deep |\if|-nesting -% and so a \hologo{TeX} capacity error because of a limited input stack size. -% I use this trick in several packages, so I don't prefix these internal -% commands in order not to have the same macros with different names. -% (It saves memory.) -% \begin{macrocode} -\long\def\@ReturnAfterElseFi#1\else#2\fi{\fi#1} -\long\def\@ReturnAfterFi#1\fi{\fi#1} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@gobblefour} -% \Hologo{LaTeX} defines commands for eating arguments. -% Define \cs{@gobblefour} if it is not defined (\hologo{plainTeX}). -% \begin{macrocode} -\expandafter\ifx\csname @gobblefour\endcsname\relax - \long\def\@gobblefour#1#2#3#4{}% -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{AlPh@IfOptArg} -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname kernel@ifnextchar\endcsname\relax - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname @ifnextchar\endcsname\relax - \def\AlPh@IfOptArg#1#2{% - \def\AlPh@TempA{#1}% - \def\AlPh@TempB{#2}% - \futurelet\AlPh@Token\AlPh@IfOptArgNext - }% - \let\AlPh@BracketLeft=[%] - \def\AlPh@IfOptArgNext{% - \ifx\AlPh@Token\AlPh@BracketLeft - \expandafter\AlPh@TempA - \else - \expandafter\AlPh@TempB - \fi - }% - \else - \def\AlPh@IfOptArg{\@ifnextchar[}%] - \fi -\else - \def\AlPh@IfOptArg{\kernel@ifnextchar[}%] -\fi -% \end{macrocode} -% \end{macro} -% -% \subsection{Symbol provider} -% -% \subsubsection{Alphabet} -% -% The output of \cs{alphalph} and \cs{AlphAlph} should be -% usable as part of command names (see \cs{@namedef}, \cs{csname}, \dots). -% Unhappily some languages of package \xpackage{babel} -% redefine \hologo{LaTeX}'s \cs{@alph} and \cs{@Alph} in a manner that -% they cannot be used in expandable context any more. -% Therefore package \xpackage{alphalph} provides its own -% commands. -% -% \begin{macro}{\alphalph@Alph} -% \begin{macro}{\alphalph@alph} -% The two commands \cmd{\AlPh@Alph} and \cmd{\AlPh@alph} convert a -% number into a letter (uppercase and lowercase respectivly). -% The character |@| is used as an error symbol, -% if the number isn't in the range of 1 until 26. -% Here we need no space after the number |#1|, because the error -% symbol |@| for the zero case stops scanning the number. -% This error symbol should not appear anywhere (except for bugs). -% \begin{macrocode} -\def\alphalph@Alph#1{% - \ifcase#1% - @% - \or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M% - \or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z% - \else - \AlPh@ctrerr - @% - \fi -} -\def\alphalph@alph#1{% - \ifcase#1% - @% - \or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m% - \or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z% - \else - \AlPh@ctrerr - @% - \fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macro}{\AlPh@ctrerr} -% Macro \cs{AlPh@ctrerr} is used as hook for the algorithm -% to get the available number of symbols. -% \begin{macrocode} -\def\AlPh@ctrerr{} -% \end{macrocode} -% \end{macro} -% -% \subsection{Finding number of symbols} -% -% \begin{macro}{\AlPh@GetNumberOfSymbols} -% \noindent -% |#1|: symbols provider -% \begin{macrocode} -\def\AlPh@GetNumberOfSymbols#1{% - \AlPh@TestNumber1!{#1}% - \ifAlPh@Unavailable - \def\AlPh@Number{0}% - \AlPh@Error{No symbols found}% - \else - \def\AlPh@Number{1}% - \AlPh@ExpSearch2!{#1}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ifAlPh@Unavailable} -% \begin{macrocode} -\let\ifAlPh@Unavailable\iffalse -\def\AlPh@Unavailabletrue{% - \global\let\ifAlPh@Unavailable\iftrue -} -\def\AlPh@Unavailablefalse{% - \global\let\ifAlPh@Unavailable\iffalse -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@TestNumber} -% |#1|: number to be tested\\ -% |#2|: symbols provider -% \begin{macrocode} -\def\AlPh@TestNumber#1!#2{% - \AlPh@Unavailablefalse - \begingroup - \setbox0=\hbox{% - \begingroup % color - \let\@ctrerr\AlPh@Unavailabletrue - \let\AlPh@ctrerr\AlPh@Unavailabletrue - #2{#1}% - \endgroup - }% - \ifdim\wd0=0pt % - \AlPh@Unavailabletrue - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@ExpSearch} -% |#1|: number to be tested\\ -% |#2|: symbols provider -% \begin{macrocode} -\def\AlPh@ExpSearch#1!#2{% - \let\AlPh@Next\relax - \AlPh@TestNumber#1!{#2}% - \ifAlPh@Unavailable - \expandafter\AlPh@BinSearch\AlPh@Number!#1!{#2}% - \else - \def\AlPh@Number{#1}% - \ifnum#1>1073741823 % - \AlPh@TestNumber2147483647!{#2}% - \ifAlPh@Unavailable - \AlPh@BinSearch#1!2147483647!{#2}% - \else - \def\AlPh@Number{0}% - \AlPh@Error{% - Maximal symbol number not found% - }% - \fi - \else - \def\AlPh@Next{% - \expandafter\AlPh@ExpSearch\number\intcalcShl{#1}!{#2}% - }% - \fi - \fi - \AlPh@Next -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@BinSearch} -% |#1|: available number\\ -% |#2|: unavailable number, |#2| $>$ |#1|\\ -% |#3|: symbols provider -% \begin{macrocode} -\def\AlPh@BinSearch#1!#2!#3{% - \expandafter\AlPh@ProcessBinSearch - \number\intcalcShr{\intcalcAdd{#1}{#2}}!% - #1!#2!{#3}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@ProcessBinSearch} -% |#1|: number to be tested, |#2| $\leq$ |#1| $\leq$ |#3|\\ -% |#2|: available number\\ -% |#3|: unavailable number\\ -% |#4|: symbols provider -% \begin{macrocode} -\def\AlPh@ProcessBinSearch#1!#2!#3!#4{% - \let\AlPh@Next\relax - \ifnum#1>#2 % - \ifnum#1<#3 % - \AlPh@TestNumber#1!{#4}% - \ifAlPh@Unavailable - \def\AlPh@Next{% - \AlPh@BinSearch#2!#1!{#4}% - }% - \else - \def\AlPh@Next{% - \AlPh@BinSearch#1!#3!{#4}% - }% - \fi - \else - \def\AlPh@Number{#2}% - \fi - \else - \def\AlPh@Number{#2}% - \fi - \AlPh@Next -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Methods} -% -% The names of method macros start with \cs{AlPh@Method}. -% These macros do the main job in converting a number to -% its representation. -% A method command is called with three arguments. -% The first argument is the number of symbols. The -% second argument is the basic macro for converting -% a number with limited number range. The last parameter -% is the number that needs converting. -% -% \subsubsection{Common methods} -% -% \begin{macro}{\AlPh@CheckPositive} -% \noindent -% |#1|: number to be checked -% |#2|: continuation macro\\ -% |#3|: number of symbols (hidden here)\\ -% |#4|: symbol provider (hidden here) -% \begin{macrocode} -\def\AlPh@CheckPositive#1!#2{% - \ifnum#1<1 % - \expandafter\@gobblefour - \fi - #2{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Method `alph'} -% -% \begin{macro}{\AlPh@Method@alph} -% \noindent -% |#1|: number of symbols\\ -% |#2|: symbols provider\\ -% |#3|: number to be converted -% \begin{macrocode} -\def\AlPh@Method@alph#1#2#3{% - \expandafter\AlPh@CheckPositive -| \number#3!% -+ \the\numexpr#3!% - \AlPh@ProcessAlph - {#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@ProcessAlph} -% |#1|: current number\\ -% |#2|: number of symbols\\ -% |#3|: symbols provider -% \begin{macrocode} -\def\AlPh@ProcessAlph#1#2#3{% - \ifnum#1>#2 % - \@ReturnAfterElseFi{% - \expandafter\AlPh@StepAlph\number - \intcalcInc{% - \intcalcMod{\intcalcDec{#1}}{#2}% - }% - \expandafter!\number - \intcalcDiv{\intcalcDec{#1}}{#2}% - !{#2}{#3}% - }% - \else - \@ReturnAfterFi{% - #3{#1}% - }% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@StepAlph} -% |#1|: current last digit\\ -% |#2|: new current number\\ -% |#3|: number of symbols\\ -% |#4|: symbols provider -% \begin{macrocode} -\def\AlPh@StepAlph#1!#2!#3#4{% - \AlPh@ProcessAlph{#2}{#3}{#4}% - #4{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Method `wrap'} -% -% \begin{macro}{\AlPh@Method@wrap} -% \noindent -% |#1|: number of symbols\\ -% |#2|: symbols provider\\ -% |#3|: number to be converted -% \begin{macrocode} -\def\AlPh@Method@wrap#1#2#3{% - \expandafter\AlPh@CheckPositive -| \number#3!% -+ \the\numexpr#3!% - \AlPh@ProcessWrap - {#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AlPh@ProcessWrap} -% |#1|: number to be converted\\ -% |#2|: number of symbols\\ -% |#3|: symbols provider -% \begin{macrocode} -\def\AlPh@ProcessWrap#1#2#3{% - \ifnum#1>#2 % - \@ReturnAfterElseFi{% - \expandafter\AlPh@StepWrap\number - \intcalcInc{\intcalcMod{\intcalcDec{#1}}{#2}}% - !{#3}% - }% - \else - \@ReturnAfterFi{% - #3{#1}% - }% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@StepWrap} -% |#1|: final number\\ -% |#2|: symbols provider -% \begin{macrocode} -\def\AlPh@StepWrap#1!#2{% - #2{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Method `mult'} -% -% After the number of symbols is exhausted, -% repetitions of the symbol are used. -% \begin{gather*} -% x \Def \text{number to be converted}\\ -% n \Def \text{number of symbols}\\ -% r \Def \text{repetition length}\\ -% s \Def \text{symbol slot}\\ -% r = ((x - 1) \div n) + 1\\ -% s = ((x - 1) \mod n) + 1 -% \end{gather*} -% \begin{macro}{\AlPh@Method@mult} -% \noindent -% |#1|: number of symbols\\ -% |#2|: symbols provider\\ -% |#3|: number to be converted -% \begin{macrocode} -\def\AlPh@Method@mult#1#2#3{% - \expandafter\AlPh@CheckPositive -| \number#3!% -+ \the\numexpr#3!% - \AlPh@ProcessMult - {#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AlPh@ProcessMult} -% |#1|: number to be converted\\ -% |#2|: number of symbols\\ -% |#3|: symbols provider -% \begin{macrocode} -\def\AlPh@ProcessMult#1#2#3{% - \ifnum#1>#2 % - \@ReturnAfterElseFi{% - \expandafter\AlPh@StepMult\romannumeral - \intcalcInc{\intcalcDiv{\intcalcDec{#1}}{#2}}% - 000% - \expandafter!\number - \intcalcInc{\intcalcMod{\intcalcDec{#1}}{#2}}% - !{#3}% - }% - \else - \@ReturnAfterFi{% - #3{#1}% - }% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@StepMult} -% |#1#2|: repetitions coded as list of character `m'\\ -% |#3|: symbol slot\\ -% |#4|: symbols provider -% \begin{macrocode} -\def\AlPh@StepMult#1#2!#3!#4{% - \ifx\\#2\\% - \else - \@ReturnAfterFi{% - \AlPh@StepMult#2!#3!{#4}% - }% - \fi - #4{#3}% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{User interface} -% -% \begin{macro}{\newalphalph} -% Macro \cs{newalphalph} had three arguments in versions below 2.0. -% For the new method argument we use an optional argument an first -% position.\\ -% |#1|: cmd\\ -% |[#2]|: method name: |alph| (default), |wrap|, |mult|\\ % hash-ok -% |#3|: symbols provider\\ -% |#4|: number of symbols -% \begin{macrocode} -\AlPh@IfDefinable\newalphalph{% - \def\newalphalph#1{% - \AlPh@IfOptArg{% - \AlPh@newalphalph{#1}% - }{% - \AlPh@newalphalph{#1}[alph]% - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@newalphalph} -% |#1|: cmd -% |#2|: method name\\ -% |#3|: symbols provider\\ -% |#4|: number of symbols -% \begin{macrocode} -\def\AlPh@newalphalph#1[#2]#3#4{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname AlPh@Method@#2\endcsname\relax - \AlPh@Error{% - Unknown method % -| `#2'% -+ `\detokenize{#2}'% - }% - \else - \ifx\\#4\\% - \AlPh@GetNumberOfSymbols{#3}% - \ifcase\AlPh@Number - \else - \begingroup - \escapechar=92 % backslash - \@PackageInfo{alphalph}{% - Number of symbols for \string#1 is \AlPh@Number - }% - \endgroup - \expandafter\AlPh@NewAlphAlph - \csname AlPh@Method@#2\expandafter\endcsname - \AlPh@Number!{#1}{#3}% - \fi - \else - \expandafter\AlPh@NewAlphAlph - \csname AlPh@Method@#2\expandafter\endcsname -| \number#4!% -+ \the\numexpr#4!% - {#1}{#3}% - \fi - \fi -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AlPh@NewAlphAlph} -% |#1|: method macro\\ -% |#2|: number of symbols\\ -% |#3|: cmd\\ -% |#4|: symbols provider -% \begin{macrocode} -\def\AlPh@NewAlphAlph#1#2!#3#4{% - \AlPh@IfDefinable#3{% - \ifnum#2>0 % - \def#3{#1{#2}{#4}}% - \else - \AlPh@Error{% - Definition of \string#3 failed,\MessageBreak - because number of symbols (#2) is not positive% - }% - \fi - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AlphAlph} -% \begin{macrocode} -\newalphalph\AlphAlph\alphalph@Alph{26} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\alphalph} -% \begin{macrocode} -\newalphalph\alphalph\alphalph@alph{26} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\AlPh@AtEnd% -% -% \end{macrocode} -% -% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{alphalph}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/alphalph.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/alphalph.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex alphalph.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% alphalph.sty & tex/generic/oberdiek/alphalph.sty\\ -% alphalph.pdf & doc/latex/oberdiek/alphalph.pdf\\ -% alphalph.dtx & source/latex/oberdiek/alphalph.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{alphalph.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex alphalph.dtx -%makeindex -s gind.ist alphalph.idx -%pdflatex alphalph.dtx -%makeindex -s gind.ist alphalph.idx -%pdflatex alphalph.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{History} -% \begin{Version}{1999/03/19 v0.1} -% \item -% The first version was built as a response to a -% \URL{\link{question}}^^A -% {https://groups.google.com/group/comp.text.tex/msg/17a74cd721641038}^^A -% of \NameEmail{Will Douglas}{william.douglas@wolfson.ox.ac.uk} -% and the -% \URL{\link{request}}^^A -% {https://groups.google.com/group/comp.text.tex/msg/8f9768825640315f}^^A -% of \NameEmail{Donald Arsenau}{asnd@reg.triumf.ca}, -% published in the newsgroup -% \href{news:comp.text.tex}{comp.text.tex}: -% \URL{``\link{Re: alph counters \textgreater\ 26}''}^^A -% {https://groups.google.com/group/comp.text.tex/msg/cec563eef8bf65d0} -% \item -% Copyright: LPPL (\CTAN{macros/latex/base/lppl.txt}) -% \end{Version} -% \begin{Version}{1999/04/12 v1.0} -% \item -% Documentation added in dtx format. -% \item -% \hologo{eTeX} support added. -% \end{Version} -% \begin{Version}{1999/04/13 v1.1} -% \item -% Minor documentation change. -% \item -% First CTAN release. -% \end{Version} -% \begin{Version}{1999/06/26 v1.2} -% \item -% First generic code about \cmd{\ProvidesPackage} improved. -% \item -% Documentation: Installation part revised. -% \end{Version} -% \begin{Version}{2006/02/20 v1.3} -% \item -% Reload check (for \hologo{plainTeX}) -% \item -% New DTX framework. -% \item -% LPPL 1.3 -% \end{Version} -% \begin{Version}{2006/05/30 v1.4} -% \item -% \cs{newalphalph} added. -% \end{Version} -% \begin{Version}{2007/04/11 v1.5} -% \item -% Line ends sanitized. -% \end{Version} -% \begin{Version}{2007/09/09 v2.0} -% \item -% New implementation that uses package \cs{intcalc}. -% This removes the dependency on \hologo{eTeX}. -% \item -% \cs{newalphalph} is extended to support new methods `wrap' and 'multi'. -% \item -% Documentation rewritten. -% \end{Version} -% \begin{Version}{2008/08/11 v2.1} -% \item -% Code is not changed. -% \item -% URLs updated from \texttt{www.dejanews.com} -% to \texttt{groups.google.com}. -% \end{Version} -% \begin{Version}{2010/03/01 v2.2} -% \item -% Compatibility with \hologo{iniTeX}. -% \end{Version} -% \begin{Version}{2010/04/18 v2.3} -% \item -% Documentation fixes (Martin M\"unch). -% \end{Version} -% \begin{Version}{2011/05/13 v2.4} -% \item -% Documentation fixes (Jim Diamond) and using package -% \xpackage{hologo} for the documentation. -% \item -% Catalogue file added. -% \end{Version} -% \begin{Version}{2016/05/16 v2.5} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/askinclude.dtx b/macros/latex/contrib/oberdiek/askinclude.dtx deleted file mode 100644 index 0fcab173eb..0000000000 --- a/macros/latex/contrib/oberdiek/askinclude.dtx +++ /dev/null @@ -1,1947 +0,0 @@ -% \iffalse meta-comment -% -% File: askinclude.dtx -% Version: 2018/11/01 v2.4 -% Info: Interactive asking of included files -% -% Copyright (C) -% 1991-1994 Pablo A. Straub -% 2007, 2008, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% This work consists of the main source file askinclude.dtx -% and the derived files -% askinclude.sty, askinclude.pdf, askinclude.ins, askinclude.drv, -% askinclude.bib, askinclude-a.tex, askinclude-b.tex, -% askinclude-c.tex, askinclude-test1.tex, -% askinclude-test2.tex, askinclude-test3.tex, -% askinclude-test4.tex, askinclude-test5.tex, -% askinclude-test6.tex, askinclude-test7.tex, -% askinclude-test8.tex, askinclude-test9.tex, -% askinclude-test10.tex, askinclude-test11.tex, -% askinclude-test12.tex, askinclude-test13.tex, -% askinclude-test14.tex, askinclude-test15.tex, -% askinclude-test16.tex, askinclude-test17.tex, -% askinclude-test18.tex, askinclude-test19.tex, -% askinclude-test20.tex, askinclude-test21.tex, -% askinclude-test22.tex, askinclude-test23.tex, -% askinclude-test24.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/askinclude.dtx -% CTAN:macros/latex/contrib/oberdiek/askinclude.pdf -% -% Unpacking: -% (a) If askinclude.ins is present: -% tex askinclude.ins -% (b) Without askinclude.ins: -% tex askinclude.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{askinclude.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If askinclude.drv is present: -% latex askinclude.drv -% (b) Without askinclude.drv: -% latex askinclude.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex askinclude.dtx -% bibtex askinclude.aux -% makeindex -s gind.ist askinclude.idx -% pdflatex askinclude.dtx -% makeindex -s gind.ist askinclude.idx -% pdflatex askinclude.dtx -% -% Installation: -% TDS:tex/latex/oberdiek/askinclude.sty -% TDS:doc/latex/oberdiek/askinclude.pdf -% TDS:source/latex/oberdiek/askinclude.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: askinclude 2018/11/01 v2.4 Interactive asking of included files} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: askinclude -Version: 2018/11/01 v2.4 - -Copyright (C) - 1991-1994 Pablo A. Straub - 2007, 2008, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -This work consists of the main source file askinclude.dtx -and the derived files - askinclude.sty, askinclude.pdf, askinclude.ins, askinclude.drv, - askinclude.bib, askinclude-a.tex, askinclude-b.tex, - askinclude-c.tex, askinclude-test1.tex, - askinclude-test2.tex, askinclude-test3.tex, - askinclude-test4.tex, askinclude-test5.tex, - askinclude-test6.tex, askinclude-test7.tex, - askinclude-test8.tex, askinclude-test9.tex, - askinclude-test10.tex, askinclude-test11.tex, - askinclude-test12.tex, askinclude-test13.tex, - askinclude-test14.tex, askinclude-test15.tex, - askinclude-test16.tex, askinclude-test17.tex, - askinclude-test18.tex, askinclude-test19.tex, - askinclude-test20.tex, askinclude-test21.tex, - askinclude-test22.tex, askinclude-test23.tex, - askinclude-test24.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{askinclude.ins}{\from{askinclude.dtx}{install}}% - \file{askinclude.drv}{\from{askinclude.dtx}{driver}}% - \nopreamble - \nopostamble - \file{askinclude.bib}{\from{askinclude.dtx}{bib}}% - \usepreamble\defaultpreamble - \usepostamble\defaultpostamble - \usedir{tex/latex/oberdiek}% - \file{askinclude.sty}{\from{askinclude.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% - \file{askinclude-a.tex}{\from{askinclude.dtx}{a}}% - \file{askinclude-b.tex}{\from{askinclude.dtx}{b}}% - \file{askinclude-c.tex}{\from{askinclude.dtx}{c}}% -% \file{askinclude-test1.tex}{\from{askinclude.dtx}{test0,test1}}% -% \file{askinclude-test2.tex}{\from{askinclude.dtx}{test0,test2}}% -% \file{askinclude-test3.tex}{\from{askinclude.dtx}{test0,test3}}% -% \file{askinclude-test4.tex}{\from{askinclude.dtx}{test0,test4}}% -% \file{askinclude-test5.tex}{\from{askinclude.dtx}{test0,test5}}% -% \file{askinclude-test6.tex}{\from{askinclude.dtx}{test0,test6}}% -% \file{askinclude-test7.tex}{\from{askinclude.dtx}{test0,test7}}% -% \file{askinclude-test8.tex}{\from{askinclude.dtx}{test0,test8}}% -% \file{askinclude-test9.tex}{\from{askinclude.dtx}{test0,test9}}% -% \file{askinclude-test10.tex}{\from{askinclude.dtx}{test0,test10}}% -% \file{askinclude-test11.tex}{\from{askinclude.dtx}{test0,test11}}% -% \file{askinclude-test12.tex}{\from{askinclude.dtx}{test0,test12}}% -% \file{askinclude-test13.tex}{\from{askinclude.dtx}{test0,test13}}% -% \file{askinclude-test14.tex}{\from{askinclude.dtx}{test0,test14}}% -% \file{askinclude-test15.tex}{\from{askinclude.dtx}{test0,test15}}% -% \file{askinclude-test16.tex}{\from{askinclude.dtx}{test0,test16}}% -% \file{askinclude-test17.tex}{\from{askinclude.dtx}{test0,test17}}% -% \file{askinclude-test18.tex}{\from{askinclude.dtx}{test0,test18}}% -% \file{askinclude-test19.tex}{\from{askinclude.dtx}{test0,test19}}% -% \file{askinclude-test20.tex}{\from{askinclude.dtx}{test0,test20}}% -% \file{askinclude-test21.tex}{\from{askinclude.dtx}{test0,test21}}% -% \file{askinclude-test22.tex}{\from{askinclude.dtx}{test0,test22}}% -% \file{askinclude-test23.tex}{\from{askinclude.dtx}{test0,test23}}% -% \file{askinclude-test24.tex}{\from{askinclude.dtx}{test0,test24}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* askinclude.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `askinclude.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*bib> -@online{texlive, - author={Fairbairns, Robin}, - title={[tex-live] licence on includeonly.sty}, - date={2007-10-13}, - url={https://www.tug.org/pipermail/tex-live/2007-October/014928.html}, - urldate={2011-12-02}, -} -@online{newsthread, - author={Vo{\ss}, Herbert}, - title={askinclude.sty}, - note={Thread in newsgroup {\xnewsgroup{comp.text.tex}}; - Message-ID: {\texttt{fev72m\$b35\$02\$2@news.t-online.com}}}, - date={2007-10-15}, - url={https://groups.google.com/group/comp.text.tex/browse_thread/thread/728a3e73c04c6789/349e31865c40d00c}, - urldate={2011-12-02}, -} -@manual{makematch, - author={Kastrup, David}, - title={makematch.sty: Pattern matching with wildcards}, - date={2007-02-23}, - version={1.7925}, - url={https://ctan.org/pkg/qstest}, - urldate={2011-12-02}, -} -@manual{excludeonly, - author={Luecking, Daniel H. and Arseneau, Donald}, - title={The excludeonly package}, - date={2003-03-14}, - url={https://ctan.org/pkg/excludeonly}, - urldate={2011-12-02}, -} -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{askinclude.drv}% - [2018/11/01 v2.4 Interactive asking of included files]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\usepackage{ifluatex} -\ifluatex -\else - \usepackage[T1]{fontenc}% - \usepackage{lmodern}% -\fi -\usepackage{csquotes} -\usepackage[ - backend=bibtex, - bibencoding=ascii, - alldates=iso,seconds=true, -]{biblatex}[2011/11/13] -\bibliography{oberdiek-source} -\bibliography{askinclude} -\begin{document} - \DocInput{askinclude.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{askinclude.drv} -% -% \title{The \xpackage{askinclude} package} -% \date{2018/11/01 v2.4} -% \author{ -% Pablo A. Straub\\[1ex] -% Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% -% \maketitle -% -% \begin{abstract} -% This package replaces \cs{includeonly} by an interactive user -% interface. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% \subsection{User interface} -% -% The \cs{include} feature of \LaTeX\ allows the division of -% the text body in separate compilation units. It is page -% based and stores counter settings in additional auxiliary -% files. \cs{includeonly} limits the actually included files -% to the ones, listed in its argument. -% -% Example: -%\begin{quote} -%\begin{verbatim} -%\documentclass{report} -% -%\usepackage{askinclude} -% -% % Don't use \include in the preamble. -% % Instead \input can be used or make a package -% -%\begin{document} -%\include{title} -%\include{introduction} -%\include{summary} -%\include{index} -%\end{document} -%\end{verbatim} -%\end{quote} -% -% Package \xpackage{askinclude} adds an interactive user interface. -% The user is asked which files he want to include and sets -% \cs{includeonly} accordingly. -% -% The first time the package is used the question looks like: -%\begin{quote} -%\begin{verbatim} -%*********************************** -%*** Package askinclude Question *** -%*********************************** -% -%Previous answer (noregexp): -% [*] -% -%Regular expressions: -% --> [noregexp] disabled -% [makematch] enabled, using package `makematch' -% [pdfmatch] enabled, using pdfTeX's \pdfmatch -% -%Which files do you want to include? -% [foo,bar] comma separated file or pattern list -% [*] all files -% [-] no files -% [?] ask for each file -% [] use the previous answer -% -%\answer=chapter2,summary -%\end{verbatim} -%\end{quote} -% Square brackets are used as quotation symbols, -% they are not part of the answer. -% The answer by the user follows in the last line after |\answer=|. -% \begin{description} -% \def\Item[#1]{\item[{[\texttt{#1}]:}]} -% \Item[foo,bar] -% A comma separated file list (also one file only) is passed -% to macro \cs{includeonly} directly. If regular expression support -% is enabled, the entries in the list are interpreted as -% file name patterns that will be matched against the file names -% in \cs{include}, see \hyperref[sec:regexp]{section \ref*{sec:regexp}}. -% \Item[*] This is a shortcut for specifying \emph{all} files. -% \Item[-] This means \emph{none} of the files is included. -% \Item[?] The switches in single asking mode. -% The user will be asked at each \cs{include}. -% See section \hyperref[sec:single]{section \ref*{sec:single}}. -% \Item[] Just pressing return (empty string) uses the default -% answer, that was stored in the auxiliary file (\xfile{.aux}) -% of the previous \LaTeX run with package \xpackage{askinclude}. -% Without previous runs the default is [|*|] for all files. -% \Item[noregexp] Turns regular expression support off. -% \Item[makematch] Enables regular expression support -% package \xpackage{makematch} provides. -% \Item[pdfmatch] It is shown, if \pdfTeX~1.30 or later is used. -% It relies on an undocumented feature \cs{pdfmatch} that may -% change in future versions of \pdfTeX. -% \end{description} -% Package \xpackage{askinclude} remembers the files of \cs{include} -% in the auxiliary file and the given answer. they are -% presented at the next run -% at the start of the question: -%\begin{quote} -%\begin{verbatim} -%*********************************** -%*** Package askinclude Question *** -%*********************************** -% -%Files, found by previous run in \include: -% (-) title -% (-) introduction -% (-) chapter1 -% (+) chapter2 -% (-) chapter3 -% (+) summary -% -%Previous answer (noregexp): -% [chapter2,summary] -%... -%\end{verbatim} -%\end{quote} -% |(+)| and |(-)| marks files that were and were not included in -% the previous run. The file list and marks are not always correct. -% For example, if \cs{include} statements are added or removed. -% If the method of regular expression support is different, -% then the marks only reflects the mode of the previous answer. -% -% \subsection{Single asking mode} -% \label{sec:single} -% -% The special answer `|?|' trigger single asking mode, -% at the next \cs{include} the user is asked again: -%\begin{quote} -%\begin{verbatim} -%*********************************** -%*** Package askinclude Question *** -%*********************************** -% -%Include `title'? [y]es, [n]o, [A]ll, [N]one, [D]efault (n): -% -%\answer= -%\end{verbatim} -%\end{quote} -% Use the letter inside the square brackets as answer. -% An empty string uses the default answer, the letter in parentheses. -% The answers are: -% \begin{description} -% \def\Item[#1]{\item[{[\texttt{#1}]:}]} -% \Item[y] The file is included. -% \Item[n] The file is excluded. -% \Item[A] This file and all following files are included. -% \Item[N] This file and all following files are excluded. -% \Item[D] Use the default answer for this and all following files. -% \end{description} -% If the file is known from the previous run, then the -% default is `|y|' or `|n|' corresponding to the mark -% `|(+)|' or `|(-)|' in the list of previous files. -% Otherwise `|y|' is used as default. -% -% \subsection{Regular expressions} -% \label{sec:regexp} -% -% Three methods are available that can also set by package options: -% \begin{description} -% \def\Item[#1]{\item[\xoption{#1}:]} -% \Item[noregexp] Regular expression support is disabled. -% \Item[makematch] Use package \xpackage{makematch}. -% \Item[pdfmatch] Use \pdfTeX's \cs{pdfmatch} if available. -% \end{description} -% Without options the value remembered in the auxiliary file -% is used, otherwise the default is \xoption{noregexp}. -% -% \subsubsection{Method \xoption{makematch}} -% -% Package \xpackage{makematch} (part of \xpackage{qstest}), written -% by David Kastrup provides pattern matching based on wildcards: -% \begin{description} -% \item[{[\texttt{*}]}:] The star matches zero or more characters. -% Thus a lonely star machtes anything. -% \item[{[\texttt{!}]}:] The exclamation mark at the begin of a -% pattern negates it, thus the matching files are excluded. -% \end{description} -% The pattern list is evaluated for a file name from left to -% right. Always a file name must match the whole pattern. -% The file is included if it is matched by a pattern and -% not excluded afterwards. Examples: -% \begin{quote} -% \def\no{\textrm{$\emptyset$}} -% \begin{tabular}{>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l} -% \textrm{Pattern list} & \textrm{File names} & \textrm{Result}\\ -% \hline -% foobar & foobar,dummy & foobar\\ -% foo* & foobar,xfoobar & foobar\\ -% \relax *foo* & xfoobar & xfoobar\\ -% f*b*r & foobar & foobar\\ -% \relax * & any & any\\ -% !foobar & foobar,other & other\\ -% !foo* & xfoobar & xfoobar\\ -% in*,!*dex & intro,index & intro\\ -% !index,in* & intro,index & intro,index\\ -% \relax *,!chap2 & chap1,chap2,chap3 & chap1,chap3\\ -% \end{tabular} -% \end{quote} -% The example in the last line shows, how the behaviour of package -% \xpackage{excludeonly} \cite{excludeonly} can be simulated. -% -% The documentation of package \xpackage{makematch} tells the -% the empty pattern does not match anything. But if you answer -% the question with an empty string the answer of the previous -% run is used. Also curly braces are not reliable because the -% can get stripped during the processing of the answer. -% Using a pair of empty curly braces or the comma for two empty -% patterns currently works, but this is specific for the current -% implementation and may change in future. But the special -% answer `-' is available. -% -% \subsubsection{Method \xoption{pdfmatch}} -% -% In \pdfTeX\ 1.30 the new primitive \cs{pdfmatch} was introduced. -% It is not documented yet, because it was not decided if it remains -% and which implementation of regular expressions should be used. -% Thus the situation may change in later versions of \pdfTeX. -% Currently (1.30 until 1.40) it uses a library for POSIX 1003.2 regular -% expressions, see manual page ``regex(7)''. -% -% If a pattern in the pattern list is invalid, the package prints -% a warning and removes the pattern from the list. Actually there -% are two warnings, the other warning is generated by \pdfTeX\ itself. -% -% In opposite to \xoption{makematch} the pattern only needs to -% match the specified part of the file name. -% For matching the whole name, the symbols `|^|' and `|$|' for -% begin and end of string must be included. -% -% Additionally an initial exclamation mark `|!|' implements the -% same logic as method \xoption{makematch}. The match result is -% inverted, the matched file excluded. -% -% Examples: -% \begin{quote} -% \def\no{\textrm{$\emptyset$}} -% \begin{tabular}{>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l} -% \textrm{Pattern list} & \textrm{File names} & \textrm{Result}\\ -% \hline -% foobar & foobar,dummy & foobar\\ -% foo.* & foobar,xfoobar & foobar,xfoobar\\ -% |^|foo.* & foobar,xfoobar & foobar\\ -% foo|$| & foo,foobar & foo\\ -% fo?bar & fbar,fobar,foobar & fbar,fobar\\ -% fo+bar & fbar,fobar,foobar & fobar,foobar\\ -% fo*bar & fbar,fobar,foobar & fbar,fobar,foobar\\ -% chap3 & chap3,chap32 & chap1,chap3,chap32\\ -% chap[13] & chap1,chap2,chap3 & chap1,chap3\\ -% chap(1\string|3)|$| & chap1,chap3,chap33 & chap1,chap3\\ -% .* & any & any\\ -% !foobar & foobar,other & other\\ -% in.*,!dex & intro,index & intro\\ -% !index,in.* & intro,index & intro,index\\ -% .*,!chap2 & chap1,chap2,chap3 & chap1,chap3\\ -% .*,!bla & foo,bla,blabla & foo\\ -% .*,!|^|bla|$| & foo,bla,blabla & foo,blabla\\ -% \end{tabular} -% \end{quote} -% The example in the last line shows, how the behaviour of package -% \xpackage{excludeonly} \cite{excludeonly} can be simulated. -% As the third last line shows, that sometimes `|^|' and `|$|' can -% be omitted, but this will not work always, shown in the second -% last line. -% -% \subsection{History} -% -% Package \xpackage{askinclude} was invented by Pablo A. Straub in 1991 -% and maintained until 1994. -% ^^A Email address: pablo.straub \symbol{64} gmail.com -% -% In October 2007 it was removed from ``TeX Live'' because of -% the no-commercial license \cite{texlive}. Herbert Vo\ss\ initiated -% a search for the author in the newsgroup \xnewsgroup{comp.text.tex} -% \cite{newsthread} to ask him to change the license. -% -% It seems that the author could not be reached any more. -% Joseph Wright suggested a reimplementation that I (HO) have done -% as package \xpackage{askinc}. Soon it was enhanced by -% feature requests. -% -% Then Ulrike Fischer found email addresses of the original author -% and Jim Hefferon succeeded in contacting him. He allowed a change -% of the license to LPPL and the transfer of the maintainership -% to someone else. -% -% Thus I merged both packages as \xpackage{askinclude} in a new -% major version 2. The license is LPPL. -% -% \subsection{New features of version 2} -% -% \begin{itemize} -% \item License is now LPPL. -% \item A list of \cs{include} files that are detected by the previous -% run is printed before the question. -% \item If the special answer `|?|' is given, then the user is -% asked at each \cs{include}. -% \item Support for regular expressions. -% \item The remaining stuff in the \xfile{.aux} file does not -% cause errors, if the package is removed. -% \item The use of \cs{includeonly} before the package loading time -% is detected and respected by taking precedence. After the package -% is loaded, \cs{includeonly} is disabled and prints a warning. -% \end{itemize} -% -% \subsection{Compatibility to version 1} -% -% \begin{itemize} -% \item The user interface of version 1 with its special answers -% `|*|', `|-|', and `' remain unchanged, but it is extended by -% version 2 with the special answer `|?|' and support for -% regular expressions can be enabled. -% \item As reimplementation the internal macros have changed of course. -% \item \xfile{.aux} files that are written by version 1.x will work -% with version 2.x because \cs{@includeonly} is recognized. -% \item \LaTeX\ 2.09: The package works as \cs{documentstyle} option -% in compatibility mode of \LaTeXe. It is possible that it -% will not work in pure \LaTeX\ 2.09. -% \end{itemize} -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \subsection{Header and catcodes} -% -% \begin{macrocode} -%<*package> -\NeedsTeXFormat{LaTeX2e} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname AskInc@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2{% - \edef\AskInc@AtEnd{% - \AskInc@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{33}{12}% ! -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{40}{12}% ( -\TMP@EnsureCode{41}{12}% ) -\TMP@EnsureCode{42}{12}% * -\TMP@EnsureCode{43}{12}% + -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{45}{12}% - -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{58}{12}% : -\TMP@EnsureCode{62}{12}% > -\TMP@EnsureCode{63}{12}% ? -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{96}{12}% ` -\edef\AskInc@AtEnd{\AskInc@AtEnd\noexpand\endinput} -\ProvidesPackage{askinclude}% - [2018/11/01 v2.4 Interactive asking of included files]% -% \end{macrocode} -% -% Luatex compat -% \begin{macrocode} -\ifx\pdfextension\@undefined\else - \protected\def\pdflastobj {\numexpr\pdffeedback lastobj\relax} - \protected\def\pdfnames {\pdfextension names } - \protected\def\pdfobj {\pdfextension obj } - \let\pdfoutput \outputmode -\fi -% \end{macrocode} -% -% \subsection{Delay action after preamble} -% -% \begin{macro}{\AskInc@AtBeginDocument} -% Some actions such as \xfile{.aux} file writing cannot be -% performed in the preamble. \cs{AtBeginDocument} delays -% such action until |\begin{document}|. However \cs{AtBeginDocument} -% must not be used after that time (\cs{@onlypreamble}). -% Thus \cs{AskInc@AtBeginDocument} uses \cs{AtBeginDocument} -% in the preamble and afterwards executes the code immediately. -% \begin{macrocode} -\AtBeginDocument{% - \let\AskInc@AtBeginDocument\@firstofone -} -\providecommand*{\AskInc@AtBeginDocument}{\AtBeginDocument} -% \end{macrocode} -% \end{macro} -% -% \subsection{Write entry in \xfile{.aux} file} -% -% \begin{macro}{\AskInc@WriteAux} -% The first argument is written to the main \xfile{.aux} file -% and the second argument is executed if writing was possible. -% Remember \cs{nofiles} prevents writing to auxiliary files. -% \begin{macrocode} -\def\AskInc@WriteAux#1#2{% - \AskInc@AtBeginDocument{% - \if@filesw - \immediate\write\@mainaux{#1}% - #2% - \fi - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Remember \cs{include} files} -% -% \begin{macro}{\AskInc@CharHash} -% \begin{macrocode} -\edef\AskInc@CharHash{\string#} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AskInc@WriteDefAddList} -% \begin{macrocode} -\def\AskInc@WriteDefAddList{% - \AskInc@WriteAux{% -% \end{macrocode} -% \begin{macro}{\AskInc@AddList} -% \begin{macrocode} - \string\providecommand*\string\AskInc@AddList[2]{% - \string\ifcase\string\ifx\AskInc@CharHash1\string\@undefined - \string\else - \string\ifx\AskInc@CharHash1\string\relax - \string\else - \string\ifx\AskInc@CharHash1\string\@empty - \string\else - 1% - \string\fi - \string\fi - \string\fi - 0 % - \string\gdef\AskInc@CharHash1{\AskInc@CharHash2}% - \string\else - \string\g@addto@macro\AskInc@CharHash1{,\AskInc@CharHash2}% - \string\fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - }{% - \global\let\AskInc@WriteDefAddList\relax - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@WriteDefAddFile} -% \begin{macrocode} -\def\AskInc@WriteDefAddFile{% - \AskInc@WriteDefAddList - \AskInc@WriteAux{% -% \end{macrocode} -% \begin{macro}{\AskInc@AddFile} -% \begin{macrocode} - \string\providecommand\string\AskInc@AddFile{% - \string\AskInc@AddList\string\AskInc@Files - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - }{% - \global\let\AskInc@WriteDefAddFile\relax - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@AddFile} -% \begin{macrocode} -\AtBeginDocument{% - \global\let\AskInc@AddFile\@gobble -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@WriteAddFile} -% \begin{macrocode} -\def\AskInc@WriteAddFile#1{% - \AskInc@WriteDefAddFile - \AskInc@WriteAux{% - \string\AskInc@AddFile{#1}% - }{}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@Files} -% \begin{macrocode} -\providecommand*{\AskInc@Files}{} -% \end{macrocode} -% \end{macro} -% -% \paragraph{Summary:} -% Now \cs{AskInc@Files} is always defined -% and either empty or contains a comma separated list of -% \cs{include} files of previous run. -% -% The \cs{include} files are remembered by using -% \cs{AskInc@WriteAddFile} at each \cs{include}. -% -% \subsection{Redefine \cs{include}} -% -% \begin{macro}{\AskInc@OrgInclude} -% \begin{macrocode} -\newcommand{\AskInc@OrgInclude}{} -\let\AskInc@OrgInclude\include -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@AskFile} -% \begin{macrocode} -\let\AskInc@AskFile\@gobble -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@MatchFile} -% \begin{macrocode} -\let\AskInc@MatchFile\@gobble -% \end{macrocode} -% \end{macro} -% \begin{macro}{\include} -% \begin{macrocode} -\renewcommand*{\include}[1]{% - \AskInc@WriteAddFile{#1}% - \AskInc@AskFile{#1}% - \AskInc@MatchFile{#1}% - \AskInc@OrgInclude{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Store answer and match method in \xfile{.aux} file} -% -% \begin{macrocode} -\AtEndOfPackage{% - \AtBeginDocument{% - \@ifundefined{AskInc@Answer}{}{% - \AskInc@WriteAux{% - \string\gdef\string\AskInc@Answer{\AskInc@Answer}% - }{}% - }% - \@ifundefined{AskInc@MatchMethod}{}{% - \AskInc@WriteAux{% - \string\gdef\string\AskInc@MatchMethod{\AskInc@MatchMethod}% - }{}% - }% - }% -} -% \end{macrocode} -% -% \subsection{Support for \cs{@includeonly}} -% -% \begin{macro}{\@includeonly} -% Macro \cs{@includeonly} is defined for compatiblity reasons only, -% if the \xfile{.aux} file was written by versions before 2 of package -% \xpackage{askinclude}. -% \begin{macrocode} -\providecommand*{\@includeonly}[1]{% - \gdef\AskInc@Answer{#1}% - \ifx\AskInc@Answer\@empty - \gdef\AskInc@Answer{-}% - \fi - \global\let\AskInc@MatchMethod\@empty -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Stop if \cs{includeonly} is active} -% -% If \cs{includeonly} is used before, the questions are skipped -% and the data in the main auxiliary file is preserved. -% \begin{macrocode} -\if@partsw - \PackageWarningNoLine{askinclude}{% - Previous \string\includeonly\space detected,\MessageBreak - therefore asking for files is suppressed% - }% -% \end{macrocode} -% Dummy options. -% \begin{macrocode} - \DeclareOption{makematch}{}% - \DeclareOption{pdfmatch}{}% - \DeclareOption{noregexp}{}% - \ProcessOptions*% -% \end{macrocode} -% Preserve \cs{AskInc@MatchFiles}. -% \begin{macrocode} - \@ifundefined{AskInc@MatchFiles}{% - }{% - \ifx\AskInc@MatchMethod\@empty - \else - \AskInc@WriteAux{% - \string\gdef\string\AskInc@MatchFiles{\AskInc@MatchFiles}% - }{}% - \fi - }% - \expandafter\AskInc@AtEnd -\fi% -% \end{macrocode} -% -% \subsection{\cs{includeonly}} -% -% \begin{macro}{\AskInc@OrgIncludeOnly} -% \begin{macrocode} -\newcommand{\AskInc@OrgIncludeOnly}{}% -\let\AskInc@OrgIncludeOnly\includeonly -% \end{macrocode} -% \end{macro} -% \begin{macro}{\includeonly} -% \begin{macrocode} -\renewcommand*{\includeonly}[1]{% - \PackageWarning{askinclude}{% - \string\includeonly\space is managed by package `askinclude',% - \MessageBreak - therefore it is ignored% - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Options} -% -% \begin{macro}{\AskInc@StringNoRegExp} -% \begin{macrocode} -\def\AskInc@StringNoRegExp{noregexp} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@StringMakeMatch} -% \begin{macrocode} -\def\AskInc@StringMakeMatch{makematch} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@StringPdfMatch} -% \begin{macrocode} -\def\AskInc@StringPdfMatch{pdfmatch} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ifAskInc@PdfMatchAvailable} -% \begin{macrocode} -\newif\ifAskInc@PdfMatchAvailable -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname pdfmatch\endcsname\relax -\else - \AskInc@PdfMatchAvailabletrue -\fi -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\DeclareOption{makematch}{% - \let\AskInc@MatchOption\AskInc@StringMakeMatch -} -\ifAskInc@PdfMatchAvailable - \DeclareOption{pdfmatch}{% - \let\AskInc@MatchOption\AskInc@StringPdfMatch - }% -\else - \DeclareOption{pdfmatch}{% - \PackageWarningNoLine{askinclude}{% - Option `pdfmatch' is not available because\MessageBreak - your pdfTeX does not provide \string\pdfmatch - }% - }% -\fi -\DeclareOption{noregexp}{% - \let\AskInc@MatchOption\@empty -} -\ProcessOptions* -% \end{macrocode} -% -% \subsection{Strings} -% -% \begin{macro}{\AskInc@CharAsterisk} -% \begin{macrocode} -\def\AskInc@CharAsterisk{*} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharMinus} -% \begin{macrocode} -\def\AskInc@CharMinus{-} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharPlus} -% \begin{macrocode} -\def\AskInc@CharPlus{+} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharQuestion} -% \begin{macrocode} -\def\AskInc@CharQuestion{?} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharExclam} -% \begin{macrocode} -\def\AskInc@CharExclam{!} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharYes} -% \begin{macrocode} -\def\AskInc@CharYes{y} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharNo} -% \begin{macrocode} -\def\AskInc@CharNo{n} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharAll} -% \begin{macrocode} -\def\AskInc@CharAll{A} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharNone} -% \begin{macrocode} -\def\AskInc@CharNone{N} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CharDefault} -% \begin{macrocode} -\def\AskInc@CharDefault{D} -% \end{macrocode} -% \end{macro} -% -% \subsection{Set defaults} -% -% \begin{macro}{\AskInc@SanitizeAnswer} -% \begin{macrocode} -\def\AskInc@SanitizeAnswer#1#2{% - \begingroup - \escapechar=`\\% - \edef\[{\string\[}% - \edef\]{\string\]}% - \edef\({\string\(}% - \edef\){\string\)}% - \edef\*{\string\*}% - \edef\+{\string\+}% - \edef\?{\string\?}% - \edef\|{\string\|}% - \edef\^{\string\^}% - \edef\${\string\$}% - \edef\{{\string\{}% - \edef\}{\string\}}% - \edef\.{\string\.}% - \xdef#1{% - \expandafter\expandafter\expandafter\zap@space - \expandafter#2\space\@empty - }% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\AtBeginDocument{% - \@ifundefined{AskInc@Answer}{% - \global\let\AskInc@Answer\AskInc@CharAsterisk - }{% - \AskInc@SanitizeAnswer\AskInc@Answer\AskInc@Answer - }% - \global\let\AskInc@PreviousAnswer\AskInc@Answer - \@ifundefined{AskInc@MatchMethod}{% - \global\let\AskInc@MatchMethod\@empty - }{}% - \global\let\AskInc@PreviousMatchMethod\AskInc@MatchMethod - \@ifundefined{AskInc@MatchOption}{% - \let\AskInc@MatchOption\AskInc@MatchMethod - }{}% - \ifx\AskInc@MatchOption\AskInc@StringPdfMatch - \ifAskInc@PdfMatchAvailable - \else - \let\AskInc@MatchOption\@empty - \fi - \fi - \@ifundefined{AskInc@MatchFiles}{% - \let\AskInc@MatchFiles\@empty - }{}% -} -% \end{macrocode} -% -% \subsection{Questions} -% -% \subsubsection{Generic question header} -% -% \begin{macro}{\AskInc@QuestionHeader} -% \begin{macrocode} -\def\AskInc@QuestionHeader{% - \typeout{}% - \typeout{***********************************}% - \typeout{*** Package askinclude Question ***}% - \typeout{***********************************}% - \typeout{}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Display files} -% -% \begin{macro}{\AskInc@TypeoutFiles} -% \begin{macrocode} -\def\AskInc@TypeoutFiles{% - \global\let\AskInc@PreviousMatches\@empty - \ifx\AskInc@Files\@empty - \else - \typeout{Files, found by previous run in \string\include:}% - \@for\AskInc@File:=\AskInc@Files\do{% - \ifx\AskInc@Answer\AskInc@CharAsterisk - \let\AskInc@Mark\AskInc@CharPlus - \else - \let\AskInc@Mark\AskInc@CharMinus - \ifx\AskInc@Answer\AskInc@CharMinus - \else - \ifx\AskInc@MatchMethod\@empty - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\@for\AskInc@Temp:=\AskInc@Answer}% - {\@for\AskInc@Temp:=\AskInc@MatchFiles}% - \do{% - \ifx\AskInc@File\AskInc@Temp - \let\AskInc@Mark\AskInc@CharPlus - \fi - }% - \fi - \fi - \typeout{ \@spaces(\AskInc@Mark) \AskInc@File}% - \ifx\AskInc@Mark\AskInc@CharPlus - \ifx\AskInc@PreviousMatches\@empty - \global\let\AskInc@PreviousMatches\AskInc@File - \else - \expandafter\g@addto@macro - \expandafter\AskInc@PreviousMatches{% - \expandafter,\AskInc@File - }% - \fi - \fi - }% - \typeout{}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Previous answer} -% -% \begin{macro}{\AskInc@TypeoutPreviousAnswer} -% \begin{macrocode} -\def\AskInc@TypeoutPreviousAnswer{% - \typeout{% - Previous answer (% - \ifx\AskInc@MatchMethod\@empty - noregexp% - \else - \AskInc@MatchMethod - \fi - ):% - }% - \typeout{ \@spaces[\AskInc@Answer]}% - \typeout{}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Current regular expression support} -% -% \begin{macro}{\AskInc@TypeoutMatchMethod} -% \begin{macrocode} -\def\AskInc@TypeoutMatchMethod{% - \typeout{Regular expressions:}% - \AskInc@TypeoutMethod\@empty{noregexp}{% - \space disabled% - }% - \AskInc@TypeoutMethod\AskInc@StringMakeMatch{makematch}{% - enabled, using package `makematch'% - }% - \ifAskInc@PdfMatchAvailable - \AskInc@TypeoutMethod\AskInc@StringPdfMatch{pdfmatch}{% - \space enabled, using pdfTeX's \string\pdfmatch - }% - \fi - \typeout{}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@TypeoutMethod} -% \begin{macrocode} -\def\AskInc@TypeoutMethod#1#2#3{% - \typeout{% - \ifx#1\AskInc@MatchOption \space--> \else\@spaces\space\fi - [#2] #3% hash-ok - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Main question text} -% -% \begin{macro}{\AskInc@TypeoutMainQuestion} -% \begin{macrocode} -\def\AskInc@TypeoutMainQuestion{% - \typeout{Which files do you want to include?}% - \typeout{ \@spaces[foo,bar] \space\space - comma separated file or pattern list}% - \typeout{ \@spaces[*] \@spaces\@spaces all files}% - \typeout{ \@spaces[-] \@spaces\@spaces no files}% - \typeout{ \@spaces[?] \@spaces\@spaces ask for each file}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Main question} -% -% \begin{macro}{\AskInc@MainQuestion} -% \begin{macrocode} -\def\AskInc@MainQuestion{% - \AskInc@QuestionHeader - \AskInc@TypeoutFiles - \AskInc@TypeoutPreviousAnswer - \AskInc@TypeoutMatchMethod - \AskInc@TypeoutMainQuestion - \begingroup - \@makeother\*% - \@makeother\-% - \@makeother\?% - \@makeother\,% - \@makeother\!% - \@makeother\^% - \@makeother\$% - \@makeother\(% - \@makeother\)% - \@makeother\+% - \@makeother\[% - \@makeother\]% - \@makeother\\% - \@makeother\|% - \@makeother\:% - \@makeother\.% - \typein[\answer]% - { \@spaces[] \space\@spaces\@spaces use the previous answer}% - \typeout{}% - \AskInc@SanitizeAnswer\AskInc@@Answer\answer - \endgroup - \let\AskInc@Next\AskInc@MainQuestion - \ifx\AskInc@@Answer\AskInc@StringNoRegExp - \let\AskInc@MatchOption\@empty - \else - \ifx\AskInc@@Answer\AskInc@StringMakeMatch - \let\AskInc@MatchOption\AskInc@StringMakeMatch - \else - \ifx\AskInc@@Answer\AskInc@StringPdfMatch - \ifAskInc@PdfMatchAvailable - \let\AskInc@MatchOption\AskInc@StringPdfMatch - \else - \PackageWarning{askinclude}{% - Method `pdfmatch' is not available because\MessageBreak - your pdfTeX does not provide \string\pdfmatch - }% - \let\AskInc@MatchOption\@empty - \fi - \else - \ifx\AskInc@@Answer\@empty - \global\let\AskInc@@Answer\AskInc@Answer - \fi - \let\AskInc@Next\AskInc@MainAnswer - \fi - \fi - \fi - \AskInc@Next -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Evaluate answer of main question} -% -% \begin{macro}{\AskInc@MainAnswer} -% \begin{macrocode} -\def\AskInc@MainAnswer{% - \ifx\AskInc@@Answer\AskInc@CharQuestion - \global\let\AskInc@Answer\@empty - \global\let\AskInc@MatchMethod\@empty - \global\let\AskInc@AskFile\AskInc@DoAskFile - \AskInc@OrgIncludeOnly{}% - \else - \global\let\AskInc@Answer\AskInc@@Answer - \ifx\AskInc@@Answer\AskInc@CharAsterisk - \global\let\AskInc@MatchMethod\@empty - \else - \ifx\AskInc@@Answer\AskInc@CharMinus - \global\let\AskInc@MatchMethod\@empty - \AskInc@OrgIncludeOnly{}% - \else - \global\let\AskInc@MatchMethod\AskInc@MatchOption - \ifx\AskInc@MatchOption\@empty - \expandafter\AskInc@OrgIncludeOnly\expandafter{% - \AskInc@Answer - }% - \else - \AskInc@MatchInit - \AskInc@OrgIncludeOnly{}% - \fi - \fi - \fi - \fi - \let\AskInc@Include\AskInc@DoInclude -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AskInc@MatchInit} -% \begin{macrocode} -\def\AskInc@MatchInit{% - \RequirePackage{kvsetkeys}[2007/09/29]% - \expandafter\comma@normalize\expandafter{\AskInc@Answer}% - \global\let\AskInc@MatchList\comma@list -% \end{macrocode} -% \begin{macro}{\AskInc@MatchFile} -% \begin{macrocode} - \def\AskInc@MatchFile##1{% - \AskInc@DoMatch{##1}{% - \AskInc@WriteAddMatch{##1}% - \ifx\@partlist\@empty - \gdef\@partlist{##1}% - \else - \g@addto@macro\@partlist{,##1}% - \fi - }% - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - \ifx\AskInc@MatchMethod\AskInc@StringMakeMatch - \AskInc@MakeMatchInit - \else - \AskInc@PdfMatchInit - \fi - \let\AskInc@MatchInit\@undefined -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@MakeMatchInit} -% \begin{macrocode} -\def\AskInc@MakeMatchInit{% - \RequirePackage{makematch}% -% \end{macrocode} -% \begin{macro}{\AskInc@DoMatch} -% \begin{macrocode} - \def\AskInc@DoMatch##1{% - \def\AskInc@Temp{% - \MakeMatcher[,]\AskInc@Temp - }% - \expandafter\AskInc@Temp\expandafter{\AskInc@MatchList}% - \AskInc@Temp{{##1}}\@firstofone\@gobble - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - \let\AskInc@MakeMatchInit\@undefined -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@PdfMatchInit} -% \begin{macrocode} -\def\AskInc@PdfMatchInit{% -% \end{macrocode} -% \begin{macro}{\ifAskInc@Found} -% \begin{macrocode} - \newif\ifAskInc@Found -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@DoMatch} -% \begin{macrocode} - \def\AskInc@DoMatch##1{% - \AskInc@Foundfalse - \expandafter\comma@parse@normalized\expandafter - {\AskInc@MatchList}{\AskInc@CheckMatch{##1}}% - \ifAskInc@Found - \expandafter\@firstofone - \else - \expandafter\@gobble - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@CheckMatch} -% \begin{macrocode} - \def\AskInc@CheckMatch##1##2{% - \AskInc@@CheckMatch##2\@empty\@nil{##1}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@@CheckMatch} -% \begin{macrocode} - \def\AskInc@@CheckMatch##1##2\@nil##3{% - \def\AskInc@Temp{##1}% - \ifx\AskInc@Temp\AskInc@CharExclam - \ifcase\pdfmatch{##2}{##3}=1 % - \or - \AskInc@Foundfalse - \else - \AskInc@InvalidPattern{##2}{##1##2}% - \fi - \else - \ifcase\pdfmatch{##1##2}{##3} % - \or - \AskInc@Foundtrue - \else - \AskInc@InvalidPattern{##1##2}{##1##2}% - \fi - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@InvalidPattern} -% Prints a warning with the regular expression and -% removes it from the list to prevent further warnings -% for the same expression. -% \begin{macrocode} - \def\AskInc@InvalidPattern##1##2{% - \edef\AskInc@Temp{##1}% - \PackageWarningNoLine{askinclude}{% - Invalid pattern `\AskInc@Temp' for \string\pdfmatch - }% - \edef\AskInc@Temp{##2}% - \global\expandafter\let\expandafter\AskInc@MatchList - \expandafter\@empty - \expandafter\comma@parse@normalized\expandafter - {\AskInc@MatchList}\AskInc@FilterPattern - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@FilterPattern} -% \begin{macrocode} - \def\AskInc@FilterPattern##1{% - \edef\AskInc@Pattern{##1}% - \ifx\AskInc@Temp\AskInc@Pattern - \else - \ifx\AskInc@MatchList\@empty - \global\let\AskInc@MatchList\AskInc@Pattern - \else - \expandafter\g@addto@macro\expandafter\AskInc@MatchList{% - \expandafter,\AskInc@Pattern - }% - \fi - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - \let\AskInc@PdfMatchInit\@undefined -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AskInc@WriteDefAddMatch} -% \begin{macrocode} -\def\AskInc@WriteDefAddMatch{% - \AskInc@WriteDefAddList - \AskInc@WriteAux{% -% \end{macrocode} -% \begin{macro}{\AskInc@AddMatch} -% \begin{macrocode} - \string\providecommand\string\AskInc@AddMatch{% - \string\AskInc@AddList\string\AskInc@MatchFiles - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - }{% - \global\let\AskInc@WriteDefAddMatch\relax - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@AddMatch} -% \begin{macrocode} -\AtBeginDocument{% - \global\let\AskInc@AddMatch\@gobble -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@WriteAddMatch} -% \begin{macrocode} -\def\AskInc@WriteAddMatch#1{% - \AskInc@WriteDefAddMatch - \AskInc@WriteAux{% - \string\AskInc@AddMatch{#1}% - }{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AskInc@SaveAnswer} -% \begin{macrocode} -\def\AskInc@SaveAnswer{% - \AskInc@WriteAux{% - \string\gdef\string\AskInc@Answer{\AskInc@Answer}% - }{}% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Ask for each file} -% -% \begin{macro}{\AskInc@PreviousAnswer} -% \begin{macrocode} -\@ifundefined{AskInc@PreviousAnswer}{% - \let\AskInc@PreviousAnswer\AskInc@CharAsterisk -}{} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@PreviousMatchMethod} -% \begin{macrocode} -\@ifundefined{AskInc@PreviousMatchMethod}{% - \let\AskInc@PreviousMatchMethod\@empty -}{} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@DoAskFile} -% \begin{macrocode} -\def\AskInc@DoAskFile#1{% - \edef\AskInc@File{#1}% - \ifx\AskInc@PreviousAnswer\AskInc@CharAsterisk - \let\AskInc@Default\AskInc@CharYes - \else - \let\AskInc@Default\AskInc@CharNo - \ifx\AskInc@PreviousAnswer\AskInc@CharMinus - \else - \ifx\AskInc@PreviousMatchMethod\@empty - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\@for\AskInc@Temp:=\AskInc@PreviousAnswer}% - {\@for\AskInc@Temp:=\AskInc@MatchFiles}% - \do{% - \ifx\AskInc@Temp\AskInc@File - \let\AskInc@Default\AskInc@CharYes - \fi - }% - \fi - \ifx\AskInc@Default\AskInc@CharNo - \let\AskInc@Default\AskInc@CharYes - \@for\AskInc@Temp:=\AskInc@Files\do{% - \ifx\AskInc@Temp\AskInc@File - \let\AskInc@Default\AskInc@CharNo - \fi - }% - \fi - \fi - \let\AskInc@@QuestionHeader\AskInc@QuestionHeader - \AskInc@AskQuestion - \ifx\AskInc@AskResult\AskInc@CharYes - \ifx\AskInc@Answer\@empty - \gdef\AskInc@Answer{#1}% - \else - \g@addto@macro\AskInc@Answer{,#1}% - \fi - \AskInc@SaveAnswer - \let\@partlist\AskInc@Answer - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\AskInc@AskQuestion} -% \begin{macrocode} -\def\AskInc@AskQuestion{% - \let\AskInc@Temp\answer - \AskInc@@QuestionHeader - \let\AskInc@@QuestionHeader\relax - \typein[\answer]{% - Include `\AskInc@File'? [y]es, [n]o, [A]ll, [N]one, [D]efault % - (\AskInc@Default):% - }% - \typeout{}% - \let\AskInc@AskResult\answer - \let\answer\AskInc@Temp - \ifx\AskInc@AskResult\@empty - \let\AskInc@AskResult\AskInc@Default - \let\AskInc@Next\relax - \else - \ifx\AskInc@AskResult\AskInc@CharYes - \let\AskInc@Next\relax - \else - \ifx\AskInc@AskResult\AskInc@CharNo - \let\AskInc@Next\relax - \else - \ifx\AskInc@AskResult\AskInc@CharAll - \gdef\AskInc@AskQuestion{% - \let\AskInc@AskResult\AskInc@CharYes - }% - \else - \ifx\AskInc@AskResult\AskInc@CharNone - \gdef\AskInc@AskQuestion{% - \let\AskInc@AskResult\AskInc@CharNo - }% - \else - \ifx\AskInc@AskResult\AskInc@CharDefault - \gdef\AskInc@AskQuestion{% - \let\AskInc@AskResult\AskInc@Default - }% - \else - \PackageWarningNoLine{askinclude}{% - Invalid answer [\AskInc@AskResult].\MessageBreak - Answer must be one letter out of [ynAND]% - }% - \fi - \fi - \fi - \let\AskInc@Next\AskInc@AskQuestion - \fi - \fi - \fi - \AskInc@Next -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\AtBeginDocument{\AskInc@MainQuestion} -% \end{macrocode} -% -% \begin{macrocode} -\AskInc@AtEnd% -% -% \end{macrocode} -% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{askinclude}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/askinclude.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/askinclude.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex askinclude.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% askinclude.sty & tex/latex/oberdiek/askinclude.sty\\ -% askinclude.pdf & doc/latex/oberdiek/askinclude.pdf\\ -% askinclude.dtx & source/latex/oberdiek/askinclude.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{askinclude.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex askinclude.dtx -%bibtex askinclude.aux -%makeindex -s gind.ist askinclude.idx -%pdflatex askinclude.dtx -%makeindex -s gind.ist askinclude.idx -%pdflatex askinclude.dtx -%\end{verbatim} -% \end{quote} -% -% \section{Acknowledgement} -% -% \begin{description} -% \item[Tom Scavo] -% suggested saving the include file list -% from the previous run and a simplified user interface. -% \item[Joseph Wright] suggested questions for each \cs{include}. -% \end{description} -% -% \printbibliography[ -% heading=bibnumbered, -% ] -% -% \begin{History} - -% \begin{Version}{1991/11/05 v0.95} -% \item -% First beta-test version (asked two questions). -% \end{Version} -% \begin{Version}{1991/11/05 v0.99} -% \item -% Second beta-test version (asks one question; uses `|*|' and `|-|'). -% \end{Version} -% \begin{Version}{1991/11/07 v1.0} -% \item -% Changed prompts (sent to \xnewsgroup{comp.text.tex}): -% \URL{``\link{Interactive inclusion of files in LaTeX}''}^^A -% {https://groups.google.com/group/comp.text.tex/msg/34b770a7c277e79c} -% \end{Version} -% \begin{Version}{1991/12/13 v1.1} -% \item -% \textit{Unknown}. -% \end{Version} -% \begin{Version}{1994/11/02 v1.2e} -% \item -% Two small changes to run under LaTeX2e [RF]. -% \item -% Additional documentation [TRS]. -% \end{Version} -% \begin{Version}{2007/10/15 v1.0 (askinc)} -% \item -% Reimplementation, published as \xpackage{askinc} in -% newsgroup \xnewsgroup{comp.text.tex}:\\ -% \URL{``\link{Re: askinclude.sty}''}^^A -% {https://groups.google.com/group/comp.text.tex/msg/2d638b84a858fdc8} -% \item -% Listing of included files, collected from the previous run before -% the question. -% \item -% No error message by \xfile{.aux} file if package is removed. -% \end{Version} -% \begin{Version}{2007/10/23 v2.0} -% \item -% The next version of \xpackage{askinc} becomes -% version 2.0 of \xpackage{askinclude}. -% \item -% `|?|' added for questioning each file. -% \item -% \cs{includeonly} has precedence until package loading. -% Then it is disabled by a warning. -% \item -% Documentation rewritten/added. -% \item -% Tests added. -% \end{Version} -% \begin{Version}{2008/08/11 v2.1} -% \item -% Code is not changed. -% \item -% URLs updated. -% \end{Version} -% \begin{Version}{2011/12/02 v2.2} -% \item -% Bibliography rewritten for biblatex. -% \end{Version} -% \begin{Version}{2016/05/14 v2.3} -% \item -% Luatex compatibility -% \end{Version} -% \begin{Version}{2018/11/01 v2.4} -% \item -% Remove luatex85 package dependency -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput -% \begin{Version}{1991/11/05 v0.95} -% \item -% First beta-test version (asked two questions). -% \end{Version} -% \begin{Version}{1991/11/05 v0.99} -% \item -% Second beta-test version (asks one question; uses `|*|' and `|-|'). -% \end{Version} -% \begin{Version}{1991/11/07 v1.0} -% \item -% Changed prompts (sent to \xnewsgroup{comp.text.tex}): -% \URL{``\link{Interactive inclusion of files in LaTeX}''}^^A -% {https://groups.google.com/group/comp.text.tex/msg/34b770a7c277e79c} -% \end{Version} -% \begin{Version}{1991/12/13 v1.1} -% \item -% \textit{Unknown}. -% \end{Version} -% \begin{Version}{1994/11/02 v1.2e} -% \item -% Two small changes to run under LaTeX2e [RF]. -% \item -% Additional documentation [TRS]. -% \end{Version} -% \begin{Version}{2007/10/15 v1.0 (askinc)} -% \item -% Reimplementation, published as \xpackage{askinc} in -% newsgroup \xnewsgroup{comp.text.tex}:\\ -% \URL{``\link{Re: askinclude.sty}''}^^A -% {https://groups.google.com/group/comp.text.tex/msg/2d638b84a858fdc8} -% \item -% Listing of included files, collected from the previous run before -% the question. -% \item -% No error message by \xfile{.aux} file if package is removed. -% \end{Version} -% \begin{Version}{2007/10/23 v2.0} -% \item -% The next version of \xpackage{askinc} becomes -% version 2.0 of \xpackage{askinclude}. -% \item -% `|?|' added for questioning each file. -% \item -% \cs{includeonly} has precedence until package loading. -% Then it is disabled by a warning. -% \item -% Documentation rewritten/added. -% \item -% Tests added. -% \end{Version} -% \begin{Version}{2008/08/11 v2.1} -% \item -% Code is not changed. -% \item -% URLs updated. -% \end{Version} -% \begin{Version}{2011/12/02 v2.2} -% \item -% Bibliography rewritten for biblatex. -% \end{Version} -% \begin{Version}{2016/05/14 v2.3} -% \item -% Luatex compatibility -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/askinclude.pdf b/macros/latex/contrib/oberdiek/askinclude.pdf deleted file mode 100644 index 166088b282..0000000000 Binary files a/macros/latex/contrib/oberdiek/askinclude.pdf and /dev/null differ diff --git a/macros/latex/contrib/oberdiek/auxhook.pdf b/macros/latex/contrib/oberdiek/auxhook.pdf index c40cf1c4b9..a15cc6be14 100644 Binary files a/macros/latex/contrib/oberdiek/auxhook.pdf and b/macros/latex/contrib/oberdiek/auxhook.pdf differ diff --git a/macros/latex/contrib/oberdiek/bigintcalc.pdf b/macros/latex/contrib/oberdiek/bigintcalc.pdf index fbcbd5f2f7..a1a19b5c49 100644 Binary files a/macros/latex/contrib/oberdiek/bigintcalc.pdf and b/macros/latex/contrib/oberdiek/bigintcalc.pdf differ diff --git a/macros/latex/contrib/oberdiek/bitset.dtx b/macros/latex/contrib/oberdiek/bitset.dtx deleted file mode 100644 index dbb7c1ba2a..0000000000 --- a/macros/latex/contrib/oberdiek/bitset.dtx +++ /dev/null @@ -1,2957 +0,0 @@ -% \iffalse meta-comment -% -% File: bitset.dtx -% Version: 2016/05/16 v1.2 -% Info: Handle bit-vector datatype -% -% Copyright (C) -% 2007, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% The Base Interpreter refers to any `TeX-Format', -% because some files are installed in TDS:tex/generic//. -% -% This work consists of the main source file bitset.dtx -% and the derived files -% bitset.sty, bitset.pdf, bitset.ins, bitset.drv, bitset-test1.tex, -% bitset-test2.tex, bitset-test3.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/bitset.dtx -% CTAN:macros/latex/contrib/oberdiek/bitset.pdf -% -% Unpacking: -% (a) If bitset.ins is present: -% tex bitset.ins -% (b) Without bitset.ins: -% tex bitset.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{bitset.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If bitset.drv is present: -% latex bitset.drv -% (b) Without bitset.drv: -% latex bitset.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex bitset.dtx -% makeindex -s gind.ist bitset.idx -% pdflatex bitset.dtx -% makeindex -s gind.ist bitset.idx -% pdflatex bitset.dtx -% -% Installation: -% TDS:tex/generic/oberdiek/bitset.sty -% TDS:doc/latex/oberdiek/bitset.pdf -% TDS:source/latex/oberdiek/bitset.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: bitset -Version: 2016/05/16 v1.2 - -Copyright (C) - 2007, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -The Base Interpreter refers to any `TeX-Format', -because some files are installed in TDS:tex/generic//. - -This work consists of the main source file bitset.dtx -and the derived files - bitset.sty, bitset.pdf, bitset.ins, bitset.drv, bitset-test1.tex, - bitset-test2.tex, bitset-test3.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{bitset.ins}{\from{bitset.dtx}{install}}% - \file{bitset.drv}{\from{bitset.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% - \file{bitset.sty}{\from{bitset.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{bitset-test1.tex}{\from{bitset.dtx}{test1}}% -% \file{bitset-test2.tex}{\from{bitset.dtx}{test2,etex}}% -% \file{bitset-test3.tex}{\from{bitset.dtx}{test2,noetex}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* bitset.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `bitset.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{bitset.drv}% - [2016/05/16 v1.2 Handle bit-vector datatype (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\usepackage{amstext} -\usepackage{ifluatex} -\ifluatex -\else - \usepackage[T1]{fontenc}% - \usepackage{lmodern}% -\fi -\begin{document} - \DocInput{bitset.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{bitset.drv} -% -% \title{The \xpackage{bitset} package} -% \date{2016/05/16 v1.2} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% This package defines and implements the data type bit set, -% a vector of bits. The size of the vector may grow dynamically. -% Individual bits can be manipulated. -% \end{abstract} -% -% \tableofcontents -% -% \clearpage -% \section{Documentation} -% -% \subsection{Introduction} -% -% Annotations in the PDF format know entries whose values are -% integers. This numbers are interpreted as set of flags -% specifying properties. For example, annotation dictionaries -% can have a key |/F|. The bits of its integer value -% are interpreted the following way: -% \begin{quote} -% \begin{tabular}{@{}l|l@{}} -% Bit position & Property name\\ -% \hline -% 1 & Invisible\\ -% 2 & Hidden\\ -% 3 & Print\\ -% 4 & NoZoom\\ -% 5 & NoRotate\\ -% 6 & NoView\\ -% 7 & ReadOnly\\ -% \dots & \dots -% \end{tabular} -% \end{quote} -% Now, let's see how these values are set in package \xpackage{hyperref} -% before it uses this package (before v6.77a): -%\begin{quote} -%\begin{verbatim} -%\ifFld@hidden /F 6\else /F 4\fi -%\end{verbatim} -%\end{quote} -% Where are the other flags? The following example for key |/Ff| -% in a widget annotation -% supports at least three properties: -%\begin{quote} -%\begin{verbatim} -%\ifFld@multiline -% \ifFld@readonly /Ff 4097\else /Ff 4096\fi -%\else -% \ifFld@password -% \ifFld@readonly /Ff 8193\else /Ff 8192\fi -% \else -% \ifFld@readonly /Ff 1\fi -% \fi -%\fi -%\end{verbatim} -%\end{quote} -% But you see the point. It would be a nightmare to continue -% this way in supporting the missing flag settings. This kind -% of integers may have up to 32 bits. -% -% Therefore I wanted a data structure for setting and -% clearing individual bits. Also it should provide -% an export as decimal number. The snipsets above are -% executed in expansion contexts without \TeX's stomach -% commands. It would be convenient to have an expandable -% conversion from the data structure to the integer that -% gets written to the PDF file. -% -% This package \xpackage{bitset} implements such a data -% structure. The interface is quite close to Java's -% class |BitSet| in order not to learn to many interfaces -% for the same kind of data structure. -% -% \subsection{Glossary} -% -% \begin{description} -% \item[Bit set:] -% A bit set is a vector of bits or flags. -% The vector size is unlimited and -% grows dynamically. An undefined bit set is treated as bit -% set where all bits are cleared. -% -% Bit sets are addressed by name. A name should consists of -% letters or digits. Technically it must survive \cs{csname}, -% see \LaTeX's environment names for other names with such -% a constraint. Package \xpackage{babel}'s shorthands are -% not supported due to technical reasons. Shorthand support -% would break expandable operations. -% \item[Size:] -% A size of a bit set is the number of bits in use. -% It's the number of the highest index, incremented by one. -% Sizes are in the range |0| up to |2147483647|, the highest -% number supported by \TeX. -% \item[Index:] -% Bit positions in a bit set are addressed by an index number. -% The bit vector is zero based. The first and least significant -% bit is addressed by index |0| and the highest possible bit -% by |2147483646|. -% \item[Bit:] -% A bit is enoded as |0| for cleared/disabled or |1| for set/enabled. -% \end{description} -% -% \subsection{Design principles} -% -% \begin{description} -% \item[Name conventions:] -% To avoid conflicts with existing macro names, the operations -% are prefixed by the package name. -% \item[Zero based indexes:] The first bit is addressed by zero. -% (Convention of array indexing in C, Java, \dots) -% \item[Unlimited size:] -% There is no restriction on the size of a bit set other than -% usual memory limitations. \cs{bitsetSetDec} and \cs{bitsetGetDec} -% transparently switch to package \xpackage{bigintcalc} if the numbers -% get too large for \TeX's number limit. -% \item[Expandibility:] -% Any operation that does not change the bit set is expandable. -% And all operations that extract or calculate some result -% do this in exact two expansion steps. For example, -% a macro \cs{Macro} wants a bit set as decimal number. -% But the argument must be a plain number without macros. -% Thus you could prefix \cs{bitsetGetDec} with \cs{number}. -% However this won't work for bit sets with 31 or more bits -% because of \TeX's number limit of $2^{31}-1$. -% then just hit the operator with two \cs{expandafter}: -% \begin{quote} -% |\expandafter\expandafter\expandafter|\\ -% |\Macro\bitsetGetDec{foo}| -% \end{quote} -% |\bitsetGetDec| is hit first by the third \cs{expandafter} -% and then by the second one. -% \item[Format independence:] This package is written as \LaTeX\ package, -% but it does not depend on \LaTeX. It will also work for other formats -% such as \plainTeX. -% \item[Independence from \TeX\ engines:] -% Vanilla \TeX\ is all you need. Calculations are delegated to -% packages \xpackage{intcalc} and \xpackage{bigintcalc}. -% They don't need any special features, but they will switch -% to a little more efficient implementation if features such -% as \cs{numexpr} are available. -% \item[Numeric arguments:] Anything that is accepted by -% \cs{number}. If \eTeX\ is detected, also expressions -% for \cs{numexpr} are supported. The only exception so far -% is the number for \cs{bitsetSetDec}. The number might be too -% large for \cs{number} or \cs{numexpr}. -% \item[Error messages:] -% In expandable contexts, only a limited set of \TeX\ primitive -% commands work as expected. So called stomach commands behave -% like \cs{relax} and don't get expanded or executed. -% Unhappily also the error commands belong to this category. -% The expandable operations will throw an unknown control -% sequence instead to get \TeX's and user's attention. -% The name of these control sequences starts with -% \cs{BitSetError:} with the type of error after the colon. -% \end{description} -% -% \subsection{Operator overview} -% -% \begin{minipage}{\linewidth} -% \begin{description} -% \def\It#1#2{^^A -% \item[^^A -% {#1} ^^A -% \textmd{(\hyperref[{sec:#2}]{section \ref*{sec:#2}})}^^A -% ]^^A -% \mbox{}\\^^A -% } -% \def\op#1{^^A -% \cs{bitset}\texttt{\bfseries#1}^^A -% } -% \def\M#1{\meta{#1}} -% \def\Q{\hspace*{\fill}} -% \It{Miscellaneous}{misc} -% \op{Reset}\Q \M{BitSet}\\ -% \op{Let}\Q \M{BitSet A} \M{BitSet B} -% \It{Import}{import} -% \op{SetBin}, \op{SetOct}, \op{SetHex}\Q \M{BitSet} \M{Value}\\ -% \op{SetDec}\Q \M{BitSet} \M{Value} -% \It{Export\textsuperscript{a}}{export} -% \op{GetBin}, \op{GetOct}, \op{GetHex}\Q \M{BitSet} \M{MinSize}\\ -% \op{GetDec}\Q \M{BitSet} -% \It{Logical operators}{log} -% \op{And}, \op{AndNot}\Q \M{BitSet A} \M{BitSet B}\\ -% \op{Or}, \op{Xor}\Q \M{BitSet A} \M{BitSet B} -% \It{Shifting}{shift} -% \op{ShiftLeft}, \op{ShiftRight}\Q \M{BitSet} \M{ShiftAmount}\\ -% \It{Bit manipulation}{bitman} -% \op{Clear}, \op{Set}, \op{Flip}\Q \M{BitSet} \M{Index}\\ -% \op{SetValue}\Q \M{BitSet} \M{Index} \M{Value}\\ -% \op{ClearRange}, \op{SetRange}, \op{FlipRange}\\ -% \Q \M{BitSet} \M{IndexFrom} \M{IndexTo}\\ -% \op{SetValueRange}\Q \M{BitSet} \M{IndexFrom} \M{IndexTo} -% \It{Bit retrieval\textsuperscript{a}}{bitret} -% \op{Get}\Q \M{BitSet} \M{Index}\\ -% \op{NextClearBit}, \op{NextSetBit}\Q \M{BitSet} \M{Index}\\ -% \op{GetSetBitList}\Q \M{BitSet} -% \It{Bit set properties}{prop} -% \op{Size}, \op{Cardinality}\Q \M{BitSet} -% \It{Queries\textsuperscript{b}}{query} -% \op{IsDefined}, \op{IsEmpty}\Q \M{BitSet} \M{Then} \M{Else}\\ -% \op{Equals}, \op{Intersects}\Q \M{BitSet A} \M{BitSet B} \M{Then} \M{Else}\\ -% \op{Query}\Q \M{BitSet} \M{Index} \M{Then} \M{Else} -% \end{description} -% \footnotetext[1]{Macros are expandable, full expansion by two steps.} -% \footnotetext[2]{Macros are expandable.} -% \end{minipage} -% -% \subsection{Package loading} -% -% The package can be used as normal \LaTeX\ package: -%\begin{quote} -%|\usepackage{bitset}| -%\end{quote} -% Also \plainTeX\ is supported: -%\begin{quote} -%|\input bitset.sty\relax| -%\end{quote} -% -% \subsection{Operators} -% -% The following macros work on and with bit sets. -% A bit set \meta{BitSet} is represented by a name. -% The should consist of letters and digits. Technically -% it must survive \cs{csname}. It is the same constraint -% that must be satisfied by label or environment names -% in \LaTeX. -% -% However active characters that are shorthands -% of package \xpackage{babel} are not supported. -% Support for shorthands works by an assignment. -% But many operators -% such as \cs{bitsetGetDec} must be usable in expandable -% contexts. There assignments will not be executed in the -% best case or they will cause errors. -% -% The bits in a bit set are addressed by non-negative -% integers starting from zero. Thus negative index -% numbers cause an error message. Because index numbers -% are \TeX\ numbers. The largest index is 2147483647. -% But in practice memory limits and patience limits -% will be very likely reached much before. -% -% \subsubsection{Miscellaneous}\label{sec:misc} -% -% There isn't a separate operation for bit set creation. -% For simplicity an undefined bit set is treated as bit set -% with all bits cleared. -% -% \begin{declcs}{bitsetReset} \M{BitSet} -% \end{declcs} -% Macro \cs{bitsetReset} clears all bits. The result is an -% empty bit set. It may also be used as replacement for -% an operation ``new'', because an undefined bit set is defined -% afterwards. -% -% \begin{declcs}{bitsetLet} \M{BitSet A} \M{BitSet B} -% \end{declcs} -% Macro \cs{bitsetLet} performs a simple assignment similar -% to \TeX's \cs{let}. After the operation \meta{BitSet A} has -% the same value as \meta{BitSet B}. If \meta{BitSet B} is -% undefined, then \meta{BitSet A} will be the empty bit set. -% -% Note: If \meta{BitSet A} exists, it will be overwritten. -% -% \subsubsection{Import}\label{sec:import} -% -% \begin{declcs}{bitsetSetBin} \M{BitSet} \M{BinaryNumber}\\ -% \cs{bitsetSetOct} \M{BitSet} \M{OctalNumber}\\ -% \cs{bitsetSetHex} \M{BitSet} \M{HexadecimalNumber} -% \end{declcs} -% The numbers are interpreted as bit vectors and the flags in -% the bit \meta{BitSet} set are set accordingly. -% These numeric arguments are the only arguments where -% spaces are allowed. Then the numbers are easier to read. -% -% \begin{declcs}{bitsetSetDec} \M{BitSet} \M{DecimalNumber} -% \end{declcs} -% Macro \cs{bitsetSetDec} uses \meta{DecimalNumber} to -% set the bit set \meta{BitSet}. -% The numeric argument must expand -% to a plain number consisting of decimal digits without -% command tokens or spaces. Internally this argument is -% expanded only. It cannot be passed to \cs{number} or -% \cs{numexpr}, because the number may be too large for them. -% However \cs{number} or |\the\numexpr| may be used -% explicitely. This also helps for unexpandable number -% command tokens or registers (\cs{z@}, \cs{@ne}, \cs{count@}, \dots). -% Also \LaTeX'\ \cs{value} needs prefixing: -% \begin{quote} -% |\bitsetSetDec{foo}{\number\value{bar}}| -% \end{quote} -% -% \subsubsection{Export}\label{sec:export} -% -% \begin{declcs}{bitsetGetBin} \M{BitSet} \M{MinSize}\\ -% \cs{bitsetGetOct} \M{BitSet} \M{MinSize}\\ -% \cs{bitsetGetHex} \M{BitSet} \M{MinSize} -% \end{declcs} -% These macros returns the bit set as binary, octal or hexadecimal -% number. If the bit size is smaller than \meta{MinSize} the gap is -% filled with leading zeros. -% Example: -% \begin{quote} -% |\bitsetReset{abc}|\\ -% |\bitsetSet{abc}{2}|\\ -% |\bitsetGetBin{abc}{8}| $\rightarrow$ |00000100|\\ -% |\bitsetSet{abc}{5}\bitsetSet{abc}{7}|\\ -% |\bitsetGetHex{abc}{16}| $\rightarrow$ |00A2| -% \end{quote} -% Macro \cs{bitsetGetHex} uses the uppercase letters |A| to |F|. -% The catcode of the letters is one of 11 (letter) or 12 (other). -% -% \begin{declcs}{bitsetGetDec} \M{BitSet} -% \end{declcs} -% Macro \cs{bitsetGetDec} returns the bit set \meta{BitSet} as -% decimal number. The returned number can be larger than -% \TeX's number limit of $2^{31}-1$. -% -% \subsubsection{Logical operators}\label{sec:log} -% -% \begin{declcs}{bitsetAnd} \M{BitSet A} \M{BitSet B} -% \end{declcs} -% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} -% \mathbin{\text{and}} B \qquad (\forall\, \text{bits})$ -% -% \begin{declcs}{bitsetAndNot} \M{BitSet A} \M{BitSet B} -% \end{declcs} -% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} -% \mathbin{\text{and}} (\text{not}\,B) \qquad (\forall\, \text{bits})$ -% -% \begin{declcs}{bitsetOr} \M{BitSet A} \M{BitSet B} -% \end{declcs} -% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} -% \mathbin{\text{or}} B \qquad (\forall\, \text{bits})$ -% -% \begin{declcs}{bitsetXor} \M{BitSet A} \M{BitSet B} -% \end{declcs} -% $A_{\text{new}} \mathrel{\mathop{:}}= A_{\text{old}} -% \mathbin{\text{xor}} B \qquad (\forall\, \text{bits})$ -% -% \subsubsection{Shifting}\label{sec:shift} -% -% \begin{declcs}{bitsetShiftLeft} \M{BitSet} \M{ShiftAmount}\\ -% \cs{bitsetShiftRight} \M{BitSet} \M{ShiftAmount} -% \end{declcs} -% A left shift by one is a multiplication by two, thus left shifting -% moves the flags to higher positions. The new created low positions -% are filled by zeros. -% -% A right shift is the opposite, dividing by two, movint the bits -% to lower positions. The number will become smaller, the lowest -% bits are lost. -% -% If the \meta{ShiftAmount} is negative, it reverts the meaning of -% the shift operation. A left shift becomes a right shift. -% A \meta{ShiftAmount} of zero is ignored. -% -% \subsubsection{Bit manipulation}\label{sec:bitman} -% -% \begin{declcs}{bitsetClear} \M{BitSet} \M{Index}\\ -% \cs{bitsetSet} \M{BitSet} \M{Index}\\ -% \cs{bitsetFlip} \M{BitSet} \M{Index} -% \end{declcs} -% This macros manipulate a single bit in \meta{BitSet} addressed -% by \cs{Index}. Macro \cs{bitsetClear} disables the bit, -% \cs{bitsetSet} enables it and \cs{bitsetFlip} reverts the current -% setting of the bit. -% -% \begin{declcs}{bitsetSetValue} \M{BitSet} \M{Index} \M{Bit} -% \end{declcs} -% Macro \cs{bitsetSetValue} puts bit \meta{Bit} at position \meta{Index} -% in bit set \meta{BitSet}. \meta{Bit} must be a valid \TeX\ number -% equals to zero (disabled/cleared) or one (enabled/set). -% -% \subsubsection{Bit retrieval}\label{sec:bitret} -% -% \begin{declcs}{bitsetGet} \M{BitSet} \M{Index} -% \end{declcs} -% Macro \cs{bitsetGet} extracts the status of the bit at -% position \meta{Index} in bit set \meta{BitSet}. -% Digit |1| is returned if the bit is set/enabled. If the -% bit is cleared/disabled and in cases of an undefined bitset or -% an index number out of range the return value is |0|. -% -% \begin{declcs}{bitsetNextClearBit} \M{BitSet} \M{Index} -% \end{declcs} -% Starting at position \meta{Index} (inclusive) the bits -% are inspected. The first position without a set bit is returned. -% Possible results are decimal numbers: \meta{Index}, \meta{Index} + 1, -% \dots, ($\infty$) -% -% \begin{declcs}{bitsetNextSetBit} \M{BitSet} \M{Index} -% \end{declcs} -% Starting at position \meta{Index} (inclusive) the bits are -% inspected and the index position of the first found set bit -% is returned. If there isn't such a bit, then the result is -% |-1|. In summary possible results are decimal numbers: -% |-1|, \meta{Index}, \meta{Index} + 1, \dots, ($\infty$) -% -% \begin{declcs}{bitsetGetSetBitList} \M{BitSet} -% \end{declcs} -% Macro \cs{bitsetGetSetBitList} is an application for -% \cs{bitsetNextSetBit}. The set bits are iterated and -% returned as comma separated list of index positions -% in increasing order. The list is empty in case of -% an empty bit set. -% -% \subsubsection{Bit set properties}\label{sec:prop} -% -% \begin{declcs}{bitsetSize} \M{BitSet} -% \end{declcs} -% Macro \cs{bitsetSize} returns number of bits in use. -% It is the same as the index number of the highest set/enabled bit -% incremented by one. -% -% \begin{declcs}{bitsetCardinality} \M{BitSet} -% \end{declcs} -% Macro \cs{bitsetCardinality} counts the number of set/enabled bits. -% -% \subsubsection{Queries}\label{sec:query} -% -% Also the query procedures are expandable. They ask for a piece -% of information about a bit set and execute code depending -% on the answer. -% -% \begin{declcs}{bitsetIsDefined} \M{BitSet} \M{Then} \M{Else} -% \end{declcs} -% If the bit set with the name \meta{BitSet} exists the code -% given in \meta{Then} is executed, otherwise \meta{Else} is used. -% -% \begin{declcs}{bitsetIsEmpty} \M{BitSet} \M{Then} \M{Else} -% \end{declcs} -% If the bit set \meta{BitSet} exists and at least one bit -% is set/enabled, the code in \meta{Then} is executed, -% \meta{Else} otherwise. -% -% \begin{declcs}{bitsetEquals} \M{BitSet A} \M{BitSet B} \M{Then} \M{Else} -% \end{declcs} -% Both bit sets are equal if and only if either both are undefined -% or both are defined and represents the same bit values at the -% same positions. Thus this definition is reflexive, symmeric, -% and transitive, enough for an equivalent relation. -% -% \begin{declcs}{bitsetIntersects} \M{BitSet A} \M{BitSet B} \M{Then} \M{Else} -% \end{declcs} -% If and only if \meta{BitSet A} and \meta{BitSet B} have -% at least one bit at the same position that is set, then -% code part \meta{Then} is executed. -% -% \begin{declcs}{bitsetQuery} \M{BitSet} \M{Index} \M{Then} \M{Else} -% \end{declcs} -% It's just a wrapper for \cs{bitsetGet}. If the bit at position -% \meta{Index} is enabled, code \meta{Then} is called. -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% The internal format of a bit set is quite simple, a sequence -% of digits |0| and |1|. The least significant bit is left. -% A bit set without any flag set is encoded by |0|. Also -% undefined bit sets are treated that way. After the -% highest bit that is set there are no further zeroes. -% A regular expression of valid bit sets values: -% \begin{quote} -% |0|\string||[01]*1| -% \end{quote} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{Reload check and package identification} -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode58=12 % : - \catcode64=11 % @ - \catcode123=1 % { - \catcode125=2 % } - \expandafter\let\expandafter\x\csname ver@bitset.sty\endcsname - \ifx\x\relax % plain-TeX, first loading - \else - \def\empty{}% - \ifx\x\empty % LaTeX, first loading, - % variable is initialized, but \ProvidesPackage not yet seen - \else - \expandafter\ifx\csname PackageInfo\endcsname\relax - \def\x#1#2{% - \immediate\write-1{Package #1 Info: #2.}% - }% - \else - \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% - \fi - \x{bitset}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode47=12 % / - \catcode58=12 % : - \catcode64=11 % @ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode123=1 % { - \catcode125=2 % } - \expandafter\ifx\csname ProvidesPackage\endcsname\relax - \def\x#1#2#3[#4]{\endgroup - \immediate\write-1{Package: #3 #4}% - \xdef#1{#4}% - }% - \else - \def\x#1#2[#3]{\endgroup - #2[{#3}]% - \ifx#1\@undefined - \xdef#1{#3}% - \fi - \ifx#1\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@bitset.sty\endcsname -\ProvidesPackage{bitset}% - [2016/05/16 v1.2 Handle bit-vector datatype (HO)]% -% \end{macrocode} -% -% \subsection{Catcodes} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname BitSet@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2{% - \edef\BitSet@AtEnd{% - \BitSet@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{33}{12}% ! -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{40}{12}% ( -\TMP@EnsureCode{41}{12}% ) -\TMP@EnsureCode{42}{12}% * -\TMP@EnsureCode{43}{12}% + -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{45}{12}% - -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{58}{11}% : (letter!) -\TMP@EnsureCode{60}{12}% < -\TMP@EnsureCode{62}{12}% > -\TMP@EnsureCode{63}{14}% ? (comment!) -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{96}{12}% ` -\edef\BitSet@AtEnd{\BitSet@AtEnd\noexpand\endinput} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname BitSet@TestMode\endcsname\relax -\else - \catcode63=9 % ? (ignore) -\fi -? \let\BitSet@@TestMode\BitSet@TestMode -% \end{macrocode} -% -% \subsection{Package loading} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \def\TMP@RequirePackage#1[#2]{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname ver@#1.sty\endcsname\relax - \input #1.sty\relax - \fi - }% - \TMP@RequirePackage{infwarerr}[2007/09/09]% - \TMP@RequirePackage{intcalc}[2007/09/27]% - \TMP@RequirePackage{bigintcalc}[2007/09/27]% -\else - \RequirePackage{infwarerr}[2007/09/09]% - \RequirePackage{intcalc}[2007/09/27]% - \RequirePackage{bigintcalc}[2007/09/27]% -\fi -% \end{macrocode} -% -% \subsection{Help macros} -% -% \subsubsection{Number constant} -% -% \begin{macro}{\BitSet@MaxSize} -% \begin{macrocode} -\def\BitSet@MaxSize{2147483647}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{General basic macros} -% -% \begin{macro}{\BitSet@Empty} -% \begin{macrocode} -\def\BitSet@Empty{} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@FirstOfOne} -% \begin{macrocode} -\def\BitSet@FirstOfOne#1{#1} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Gobble} -% \begin{macrocode} -\def\BitSet@Gobble#1{} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@FirstOfTwo} -% \begin{macrocode} -\def\BitSet@FirstOfTwo#1#2{#1} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SecondOfTwo} -% \begin{macrocode} -\def\BitSet@SecondOfTwo#1#2{#2} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@Space} -% \begin{macrocode} -\def\BitSet@Space{ } -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@ZapSpace} -% \begin{macrocode} -\def\BitSet@ZapSpace#1 #2{% - #1% - \ifx\BitSet@Empty#2% - \else - \expandafter\BitSet@ZapSpace - \fi - #2% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Tail recursion} -% -% \begin{macro}{\BitSet@Fi} -% \begin{macrocode} -\let\BitSet@Fi\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@AfterFi} -% \begin{macrocode} -\def\BitSet@AfterFi#1#2\BitSet@Fi{\fi#1} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@AfterFiFi} -% \begin{macrocode} -\def\BitSet@AfterFiFi#1#2\BitSet@Fi{\fi\fi#1}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@AfterFiFiFi} -% \begin{macrocode} -\def\BitSet@AfterFiFiFi#1#2\BitSet@Fi{\fi\fi\fi#1}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Check macros} -% -% \begin{macro}{\BitSet@IfUndefined} -% \begin{macrocode} -\def\BitSet@IfUndefined#1{% - \expandafter\ifx\csname BS@#1\endcsname\relax - \expandafter\BitSet@FirstOfTwo - \else - \expandafter\BitSet@SecondOfTwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@CheckIndex} -% |#1|: continuation code\\ -% |#2|: BitSet\\ -% |#3|: Index -% \begin{macrocode} -\def\BitSet@CheckIndex#1#2#3{% - \BitSet@IfUndefined{#2}{\bitsetReset{#2}}{}% - \expandafter\expandafter\expandafter\BitSet@@CheckIndex - \intcalcNum{#3}!% - {#2}{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@CheckIndex} -% |#1|: plain Index\\ -% |#2|: BitSet\\ -% |#3|: continuation code -% \begin{macrocode} -\def\BitSet@@CheckIndex#1!#2#3{% - \ifnum#1<0 % - \BitSet@AfterFi{% - \@PackageError{bitset}{% - Invalid negative index (#1)% - }\@ehc - }% - \else - \BitSet@AfterFi{% - #3{#2}{#1}% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Miscellaneous}\label{src:misc} -% -% \begin{macro}{\bitsetReset} -% \begin{macrocode} -\def\bitsetReset#1{% - \expandafter\def\csname BS@#1\endcsname{0}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bitsetLet} -% \begin{macrocode} -\def\bitsetLet#1#2{% - \BitSet@IfUndefined{#2}{% - \bitsetReset{#1}% - }{% - \expandafter\let\csname BS@#1\expandafter\endcsname - \csname BS@#2\endcsname - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Import}\label{src:import} -% -% \subsubsection{From binary number} -% -% \begin{macro}{\bitsetSetBin} -% \begin{macrocode} -\def\bitsetSetBin#1#2{% - \edef\BitSet@Temp{#2}% - \edef\BitSet@Temp{% - \expandafter\expandafter\expandafter\BitSet@ZapSpace - \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty - }% - \edef\BitSet@Temp{% - \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty - }% - \ifx\BitSet@Temp\BitSet@Empty - \expandafter\let\csname BS@#1\endcsname\BitSet@Zero - \else - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\BitSet@Reverse\BitSet@Temp!% - }% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@KillZeros} -% \begin{macrocode} -\def\BitSet@KillZeros#1{% - \ifx#10% - \expandafter\BitSet@KillZeros - \else - #1% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Reverse} -% \begin{macrocode} -\def\BitSet@Reverse#1#2!{% - \ifx\\#2\\% - #1% - \else - \BitSet@AfterFi{% - \BitSet@Reverse#2!#1% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{From octal/hex number} -% -% \begin{macro}{\bitsetSetOct} -% \begin{macrocode} -\def\bitsetSetOct{% - \BitSet@SetOctHex\BitSet@FromFirstOct -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetSetHex} -% \begin{macrocode} -\def\bitsetSetHex{% - \BitSet@SetOctHex\BitSet@FromFirstHex -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SetOctHex} -% \begin{macrocode} -\def\BitSet@SetOctHex#1#2#3{% - \edef\BitSet@Temp{#3}% - \edef\BitSet@Temp{% - \expandafter\expandafter\expandafter\BitSet@ZapSpace - \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty - }% - \edef\BitSet@Temp{% - \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty - }% - \ifx\BitSet@Temp\BitSet@Empty - \expandafter\let\csname BS@#2\endcsname\BitSet@Zero - \else - \edef\BitSet@Temp{% - \expandafter#1\BitSet@Temp!% - }% - \ifx\BitSet@Temp\BitSet@Empty - \expandafter\let\csname BS@#2\endcsname\BitSet@Zero - \else - \expandafter\edef\csname BS@#2\endcsname{% - \expandafter\BitSet@Reverse\BitSet@Temp!% - }% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@FromFirstOct} -% \begin{macrocode} -\def\BitSet@FromFirstOct#1{% - \ifx#1!% - \else - \ifcase#1 \BitSet@AfterFiFi\BitSet@FromFirstOct - \or 1% - \or 10% - \or 11% - \or 100% - \or 101% - \or 110% - \or 111% - \else \BitSetError:WrongOctalDigit% - \fi - \expandafter\BitSet@FromOct - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@FromOct} -% \begin{macrocode} -\def\BitSet@FromOct#1{% - \ifx#1!% - \else - \ifcase#1 000% - \or 001% - \or 010% - \or 011% - \or 100% - \or 101% - \or 110% - \or 111% - \else \BitSetError:WrongOctalDigit% - \fi - \expandafter\BitSet@FromOct - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@FromFirstHex} -% \begin{macrocode} -\def\BitSet@FromFirstHex#1{% - \ifx#1!% - \else - \ifx#10% - \BitSet@AfterFiFi\BitSet@FromFirstHex - \fi - \expandafter\ifx\csname BitSet@Hex#1\endcsname\relax - \BitSetError:InvalidHexDigit% - \else - \expandafter\expandafter\expandafter\BitSet@KillZeros - \csname BitSet@Hex#1\endcsname - \fi - \expandafter\BitSet@FromHex - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@FromHex} -% \begin{macrocode} -\def\BitSet@FromHex#1{% - \ifx#1!% - \else - \expandafter\ifx\csname BitSet@Hex#1\endcsname\relax - \BitSetError:InvalidHexDigit% - \else - \csname BitSet@Hex#1\endcsname - \fi - \expandafter\BitSet@FromHex - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Hex[0..F]} -% \begin{macrocode} -\def\BitSet@Temp#1{% - \expandafter\def\csname BitSet@Hex#1\endcsname -} -\BitSet@Temp 0{0000}% -\BitSet@Temp 1{0001}% -\BitSet@Temp 2{0010}% -\BitSet@Temp 3{0011}% -\BitSet@Temp 4{0100}% -\BitSet@Temp 5{0101}% -\BitSet@Temp 6{0110}% -\BitSet@Temp 7{0111}% -\BitSet@Temp 8{1000}% -\BitSet@Temp 9{1001}% -\BitSet@Temp A{1010}% -\BitSet@Temp B{1011}% -\BitSet@Temp C{1100}% -\BitSet@Temp D{1101}% -\BitSet@Temp E{1110}% -\BitSet@Temp F{1111}% -\BitSet@Temp a{1010}% -\BitSet@Temp b{1011}% -\BitSet@Temp c{1100}% -\BitSet@Temp d{1101}% -\BitSet@Temp e{1110}% -\BitSet@Temp f{1111}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{From decimal number} -% -% \begin{macro}{\bitsetSetDec} -% \begin{macrocode} -\def\bitsetSetDec#1#2{% - \edef\BitSet@Temp{#2}% - \edef\BitSet@Temp{% - \expandafter\expandafter\expandafter\BitSet@ZapSpace - \expandafter\BitSet@Temp\BitSet@Space\BitSet@Empty - }% - \edef\BitSet@Temp{% - \expandafter\BitSet@KillZeros\BitSet@Temp\BitSet@Empty - }% - \ifx\BitSet@Temp\BitSet@Empty - \expandafter\let\csname BS@#1\endcsname\BitSet@Zero - \else - \ifcase\bigintcalcSgn{\BitSet@Temp} % - \expandafter\let\csname BS@#1\endcsname\BitSet@Zero - \or - \ifnum\bigintcalcCmp\BitSet@Temp\BitSet@MaxSize>0 % - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\BitSet@SetDecBig\BitSet@Temp!% - }% - \else - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\BitSet@SetDec\BitSet@Temp!% - }% - \fi - \else - \@PackageError{bitset}{% - Bit sets cannot be negative% - }\@ehc - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SetDecBig} -% \begin{macrocode} -\def\BitSet@SetDecBig#1#2#3#4#5#6#7#8#9!{% - \ifx\\#9\\% - \BitSet@SetDec#1#2#3#4#5#6#7#8!% - \else - \ifcase\BigIntCalcOdd#1#2#4#5#6#7#8#9! % - 0% - \or - 1% -? \else\BitSetError:ThisCannotHappen% - \fi - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@SetDecBig - \BigIntCalcShr#1#2#3#4#5#6#7#8#9!!% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SetDec} -% \begin{macrocode} -\def\BitSet@SetDec#1!{% - \ifcase#1 % - \or 1% - \else - \ifodd#1 % - 1% - \else - 0% - \fi - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@SetDec - \IntCalcShr#1!!% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Export}\label{src:export} -% -% \subsubsection{To binary number} -% -% \begin{macro}{\bitsetGetBin} -% \begin{macrocode} -\def\bitsetGetBin#1#2{% - \romannumeral0% - \expandafter\expandafter\expandafter\BitSet@@GetBin - \intcalcNum{#2}!{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@GetBin} -% \begin{macrocode} -\def\BitSet@@GetBin#1!#2{% - \BitSet@IfUndefined{#2}{% - \ifnum#1>1 % - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@Fill - \IntCalcDec#1!!0% - }% - \else - \BitSet@AfterFi{ 0}% - \BitSet@Fi - }{% - \expandafter\expandafter\expandafter\BitSet@NumBinRev - \expandafter\expandafter\expandafter1% - \expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!!#1!% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Fill} -% |#1|: number of leading digits |0|\\ -% |#2|: result -% \begin{macrocode} -\def\BitSet@Fill#1!{% - \ifnum#1>0 % - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@Fill - \IntCalcDec#1!!0% - }% - \else - \BitSet@AfterFi{ }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@NumBinRev} -% |#1|: bit counter (including |#2|)\\ -% |#2#3|: reverted number\\ -% |#4|: result\\ -% |#5|: min size -% \begin{macrocode} -\def\BitSet@NumBinRev#1!#2#3!{% - \ifx\\#3\\% - \BitSet@AfterFi{% - \BitSet@NumBinFill#1!#2% - }% - \else - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@NumBinRev - \IntCalcInc#1!!#3!#2% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@NumBinFill} -% \begin{macrocode} -\def\BitSet@NumBinFill#1!#2!#3!{% - \ifnum#3>#1 % - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@Fill - \IntCalcSub#3!#1!!#2% - }% - \else - \BitSet@AfterFi{ #2}% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{To octal/hexadecimal number} -% -% \begin{macro}{\bitsetGetOct} -% \begin{macrocode} -\def\bitsetGetOct#1#2{% - \romannumeral0% - \bitsetIsEmpty{#1}{% - \expandafter\expandafter\expandafter\BitSet@@GetOctHex - \intcalcNum{#2}!3!230% - }{% - \expandafter\expandafter\expandafter\BitSet@@GetOct - \expandafter\expandafter\expandafter1% - \expandafter\expandafter\expandafter!% - \expandafter\expandafter\expandafter!% - \csname BS@#1\endcsname00% - \BitSet@Empty\BitSet@Empty\BitSet@Empty!{#2}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetGetHex} -% \begin{macrocode} -\def\bitsetGetHex#1#2{% - \romannumeral0% - \bitsetIsEmpty{#1}{% - \expandafter\expandafter\expandafter\BitSet@@GetOctHex - \intcalcNum{#2}!4!340% - }{% - \expandafter\expandafter\expandafter\BitSet@@GetHex - \expandafter\expandafter\expandafter1% - \expandafter\expandafter\expandafter!% - \expandafter\expandafter\expandafter!% - \csname BS@#1\endcsname000% - \BitSet@Empty\BitSet@Empty\BitSet@Empty\BitSet@Empty!{#2}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@GetOct} -% |#1|: number of digits\\ -% |#2|: result\\ -% |#3#4#5|: bits -% \begin{macrocode} -\def\BitSet@@GetOct#1!#2!#3#4#5{% - \ifx#5\BitSet@Empty - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@GetOctHex - \IntCalcDec#1!!#2!23% - }% - \else - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@@GetOct - \number\IntCalcInc#1!\expandafter\expandafter\expandafter!% - \csname BitSet@Oct#5#4#3\endcsname#2!% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Oct[000..111]} -% \begin{macrocode} -\def\BitSet@Temp#1#2#3#4{% - \expandafter\def\csname BitSet@Oct#1#2#3\endcsname{#4}% -} -\BitSet@Temp0000% -\BitSet@Temp0011% -\BitSet@Temp0102% -\BitSet@Temp0113% -\BitSet@Temp1004% -\BitSet@Temp1015% -\BitSet@Temp1106% -\BitSet@Temp1117% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@GetHex} -% |#1|: number of digits\\ -% |#2|: result\\ -% |#3#4#5#6|: bits -% \begin{macrocode} -\def\BitSet@@GetHex#1!#2!#3#4#5#6{% - \ifx#6\BitSet@Empty - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@GetOctHex - \IntCalcDec#1!!#2!34% - }% - \else - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@@GetHex - \number\IntCalcInc#1!\expandafter\expandafter\expandafter!% - \csname BitSet@Hex#6#5#4#3\endcsname#2!% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Hex[0000..1111]} -% \begin{macrocode} -\def\BitSet@Temp#1#2#3#4#5{% - \expandafter\def\csname BitSet@Hex#1#2#3#4\endcsname{#5}% -} -\BitSet@Temp00000% -\BitSet@Temp00011% -\BitSet@Temp00102% -\BitSet@Temp00113% -\BitSet@Temp01004% -\BitSet@Temp01015% -\BitSet@Temp01106% -\BitSet@Temp01117% -\BitSet@Temp10008% -\BitSet@Temp10019% -\BitSet@Temp1010A% -\BitSet@Temp1011B% -\BitSet@Temp1100C% -\BitSet@Temp1101D% -\BitSet@Temp1110E% -\BitSet@Temp1111F% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@GetOctHex} -% Leading zeros $ (|#4| - |#1| * 3 + 2)/3 $ if $ |#4| > |#1| * 3$\\ -% |#1|: digit size\\ -% |#2|: result\\ -% |#3|: bits per digit - 1\\ -% |#4|: bits per digit -% |#5|: garbage\\ -% |#6|: min size -% \begin{macrocode} -\def\BitSet@GetOctHex#1!#2!#3#4#5!#6{% - \expandafter\BitSet@@GetOctHex - \number\intcalcNum{#6}\expandafter\expandafter\expandafter!% - \IntCalcMul#1!#4!!#3#4#2% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@GetOctHex} -% |#1|: plain min size\\ -% |#2|: digits * (bits per digit)\\ -% |#3|: bits per digit - 1\\ -% |#4|: bits per digit -% \begin{macrocode} -\def\BitSet@@GetOctHex#1!#2!#3#4{% - \ifnum#1>#2 % - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\BitSet@Fill - \expandafter\IntCalcDiv\number - \expandafter\expandafter\expandafter\IntCalcAdd - \IntCalcSub#1!#2!!#3!!#4!!% - }% - \else - \BitSet@AfterFi{ }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{To decimal number} -% -% \begin{macro}{\bitsetGetDec} -% \begin{macrocode} -\def\bitsetGetDec#1{% - \romannumeral0% - \BitSet@IfUndefined{#1}{ 0}{% - \expandafter\expandafter\expandafter\BitSet@GetDec - \csname BS@#1\endcsname!% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@GetDec} -% \begin{macrocode} -\def\BitSet@GetDec#1#2!{% - \ifx\\#2\\% - \BitSet@AfterFi{ #1}% - \else - \BitSet@AfterFi{% - \BitSet@@GetDec2!#1!#2!% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@GetDec} -% |#1|: power of two\\ -% |#2|: result\\ -% |#3#4|: number -% \begin{macrocode} -\def\BitSet@@GetDec#1!#2!#3#4!{% - \ifx\\#4\\% - \ifx#31% - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@Space - \IntCalcAdd#1!#2!% - }% - \else - \BitSet@AfterFiFi{ #2}% - \fi - \else - \ifx#31% - \BitSet@AfterFiFi{% - \csname BitSet@N#1% - \expandafter\expandafter\expandafter\endcsname - \IntCalcAdd#1!#2!!#4!% - }% - \else - \BitSet@AfterFiFi{% - \csname BitSet@N#1\endcsname#2!#4!% - }% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@N[1,2,4,...]} -% \begin{macrocode} -\def\BitSet@Temp#1#2{% - \expandafter\def\csname BitSet@N#1\endcsname{% - \BitSet@@GetDec#2!% - }% -} -\BitSet@Temp{1}{2} -\BitSet@Temp{2}{4} -\BitSet@Temp{4}{8} -\BitSet@Temp{8}{16} -\BitSet@Temp{16}{32} -\BitSet@Temp{32}{64} -\BitSet@Temp{64}{128} -\BitSet@Temp{128}{256} -\BitSet@Temp{256}{512} -\BitSet@Temp{512}{1024} -\BitSet@Temp{1024}{2048} -\BitSet@Temp{2048}{4096} -\BitSet@Temp{4096}{8192} -\BitSet@Temp{8192}{16384} -\BitSet@Temp{16384}{32768} -\BitSet@Temp{32768}{65536} -\BitSet@Temp{65536}{131072} -\BitSet@Temp{131072}{262144} -\BitSet@Temp{262144}{524288} -\BitSet@Temp{524288}{1048576} -\BitSet@Temp{1048576}{2097152} -\BitSet@Temp{2097152}{4194304} -\BitSet@Temp{4194304}{8388608} -\BitSet@Temp{8388608}{16777216} -\BitSet@Temp{16777216}{33554432} -\BitSet@Temp{33554432}{67108864} -\BitSet@Temp{67108864}{134217728} -\BitSet@Temp{134217728}{268435456} -\BitSet@Temp{268435456}{536870912} -\BitSet@Temp{536870912}{1073741824} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@N1073741824} -% \begin{macrocode} -\expandafter\def\csname BitSet@N1073741824\endcsname{% - \BitSet@GetDecBig2147483648!% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@GetDecBig} -% |#1|: current power of two\\ -% |#2|: result\\ -% |#3#4|: number -% \begin{macrocode} -\def\BitSet@GetDecBig#1!#2!#3#4!{% - \ifx\\#4\\% - \ifx#31% - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@Space - \BigIntCalcAdd#1!#2!% - }% - \else - \BitSet@AfterFiFi{ #2}% - \fi - \else - \ifx#31% - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@@GetDecBig - \BigIntCalcAdd#1!#2!!#1!#4!% - }% - \else - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@GetDecBig - \BigIntCalcShl#1!!#2!#4!% - }% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@GetDecBig} -% |#1|: result\\ -% |#2|: power of two\\ -% |#3#4|: number -% \begin{macrocode} -\def\BitSet@@GetDecBig#1!#2!{% - \expandafter\expandafter\expandafter\BitSet@GetDecBig - \BigIntCalcShl#2!!#1!% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Logical operators}\label{src:log} -% -% \subsubsection{\cs{bitsetAnd}} -% -% \begin{macro}{\bitsetAnd} -% Decision table for \cs{bitsetAnd}: -% \begin{quote} -% \begin{tabular}{l|l|l|l|} -% & undef(B) & empty(B) & cardinality(B)$>$0\\ -% \hline -% undef(A) & A := empty & A := empty & A := empty\\ -% \hline -% empty(A) & & &\\ -% \hline -% cardinality(A)$>$0 & A := empty & A := empty & A \&= B\\ -% \hline -% \end{tabular} -% \end{quote} -% \begin{macrocode} -\def\bitsetAnd#1#2{% - \bitsetIsEmpty{#1}{% - \bitsetReset{#1}% - }{% - \bitsetIsEmpty{#2}{% - \bitsetReset{#1}% - }{% - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\expandafter\expandafter\BitSet@And - \csname BS@#1\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!!% - }% - \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty - \bitsetReset{#1}% - \fi - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@And} -% \begin{macrocode} -\def\BitSet@And#1#2!#3#4!#5!{% - \ifx\\#2\\% - \ifnum#1#3=11 #51\fi - \else - \ifx\\#4\\% - \ifnum#1#3=11 #51\fi - \else - \ifnum#1#3=11 % - #51% - \BitSet@AfterFiFiFi{% - \BitSet@And#2!#4!!% - }% - \else - \BitSet@AfterFiFiFi{% - \BitSet@And#2!#4!#50!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bitsetAndNot}} -% -% \begin{macro}{\bitsetAndNot} -% Decision table for \cs{bitsetAndNot}: -% \begin{quote} -% \begin{tabular}{l|l|l|l|} -% & undef(B) & empty(B) & cardinality(B)$>$0\\ -% \hline -% undef(A) & A := empty & A := empty & A := empty\\ -% \hline -% empty(A) & & &\\ -% \hline -% cardinality(A)$>$0 & & & A \&= !B\\ -% \hline -% \end{tabular} -% \end{quote} -% \begin{macrocode} -\def\bitsetAndNot#1#2{% - \bitsetIsEmpty{#1}{% - \bitsetReset{#1}% - }{% - \bitsetIsEmpty{#2}{% - }{% - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\expandafter\expandafter\BitSet@AndNot - \csname BS@#1\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!!% - }% - \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty - \bitsetReset{#1}% - \fi - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@AndNot} -% \begin{macrocode} -\def\BitSet@AndNot#1#2!#3#4!#5!{% - \ifx\\#2\\% - \ifnum#1#3=10 #51\fi - \else - \ifx\\#4\\% - #5% - \ifnum#1#3=10 1\else 0\fi - #2% - \else - \ifnum#1#3=10 % - #51% - \BitSet@AfterFiFiFi{% - \BitSet@AndNot#2!#4!!% - }% - \else - \BitSet@AfterFiFiFi{% - \BitSet@AndNot#2!#4!#50!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bitsetOr}} -% -% \begin{macro}{\bitsetOr} -% Decision table for \cs{bitsetOr}: -% \begin{quote} -% \begin{tabular}{l|l|l|l|} -% & undef(B) & empty(B) & cardinality(B)$>$0\\ -% \hline -% undef(A) & A := empty & A := empty & A := B\\ -% \hline -% empty(A) & & & A := B\\ -% \hline -% cardinality(A)$>$0 & & & A \string|= B\\ -% \hline -% \end{tabular} -% \end{quote} -% \begin{macrocode} -\def\bitsetOr#1#2{% - \bitsetIsEmpty{#2}{% - \BitSet@IfUndefined{#1}{\bitsetReset{#1}}{}% - }{% - \bitsetIsEmpty{#1}{% - \expandafter\let\csname BS@#1\expandafter\endcsname - \csname BS@#2\endcsname - }{% - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\expandafter\expandafter\BitSet@Or - \csname BS@#1\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!% - }% - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Or} -% \begin{macrocode} -\def\BitSet@Or#1#2!#3#4!{% - \ifnum#1#3>0 1\else 0\fi - \ifx\\#2\\% - #4% - \else - \ifx\\#4\\% - #2% - \else - \BitSet@AfterFiFi{% - \BitSet@Or#2!#4!% - }% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bitsetXor}} -% -% \begin{macro}{\bitsetXor} -% Decision table for \cs{bitsetXor}: -% \begin{quote} -% \begin{tabular}{l|l|l|l|} -% & undef(B) & empty(B) & cardinality(B)$>$0\\ -% \hline -% undef(A) & A := empty & A := empty & A := B\\ -% \hline -% empty(A) & & & A := B\\ -% \hline -% cardinality(A)$>$0 & & & A \string^= B\\ -% \hline -% \end{tabular} -% \end{quote} -% \begin{macrocode} -\def\bitsetXor#1#2{% - \bitsetIsEmpty{#2}{% - \BitSet@IfUndefined{#1}{\bitsetReset{#1}}{}% - }{% - \bitsetIsEmpty{#1}{% - \expandafter\let\csname BS@#1\expandafter\endcsname - \csname BS@#2\endcsname - }{% - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\expandafter\expandafter\BitSet@Xor - \csname BS@#1\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!!% - }% - \expandafter\ifx\csname BS@#1\endcsname\BitSet@Empty - \bitsetReset{#1}% - \fi - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Xor} -% \begin{macrocode} -\def\BitSet@Xor#1#2!#3#4!#5!{% - \ifx\\#2\\% - \ifx#1#3% - \ifx\\#4\\% - \else - #50#4% - \fi - \else - #51#4% - \fi - \else - \ifx\\#4\\% - #5% - \ifx#1#30\else 1\fi - #2% - \else - \ifx#1#3% - \BitSet@AfterFiFiFi{% - \BitSet@Xor#2!#4!#50!% - }% - \else - #51% - \BitSet@AfterFiFiFi{% - \BitSet@Xor#2!#4!!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Shifting}\label{src:shift} -% -% \subsubsection{\cs{bitsetShiftLeft}} -% -% \begin{macro}{\bitsetShiftLeft} -% \begin{macrocode} -\def\bitsetShiftLeft#1#2{% - \BitSet@IfUndefined{#1}{% - \bitsetReset{#1}% - }{% - \bitsetIsEmpty{#1}{% - }{% - \expandafter\expandafter\expandafter\BitSet@ShiftLeft - \intcalcNum{#2}!{#1}% - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@ShiftLeft} -% \begin{macrocode} -\def\BitSet@ShiftLeft#1!#2{% - \ifcase\intcalcSgn{#1} % - \or - \begingroup - \uccode`m=`0 % - \uppercase\expandafter{\expandafter\endgroup - \expandafter\edef\csname BS@#2\expandafter\endcsname - \expandafter{% - \romannumeral#1000\expandafter\BitSet@Space - \csname BS@#2\endcsname - }% - }% - \else - \expandafter\BitSet@ShiftRight\BitSet@Gobble#1!{#2}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bitsetShiftRight}} -% -% \begin{macro}{\bitsetShiftRight} -% \begin{macrocode} -\def\bitsetShiftRight#1#2{% - \BitSet@IfUndefined{#1}{% - \bitsetReset{#1}% - }{% - \bitsetIsEmpty{#1}{% - }{% - \expandafter\expandafter\expandafter\BitSet@ShiftRight - \intcalcNum{#2}!{#1}% - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@ShiftRight} -% \begin{macrocode} -\def\BitSet@ShiftRight#1!#2{% - \ifcase\intcalcSgn{#1} % - \or - \expandafter\edef\csname BS@#2\endcsname{% - \expandafter\expandafter\expandafter\BitSet@Kill - \csname BS@#2\expandafter\endcsname\expandafter\BitSet@Empty - \expandafter=% - \expandafter{\expandafter}\expandafter{\expandafter}% - \romannumeral#1000!% - }% - \else - \expandafter\BitSet@ShiftLeft\BitSet@Gobble#1!{#2}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Kill} -% \begin{macrocode} -\def\BitSet@Kill#1#2=#3#4#5{% - #3#4% - \ifx#5!% - \ifx#1\BitSet@Empty - 0% - \else - #1#2% - \fi - \else - \ifx#1\BitSet@Empty - 0% - \BitSet@AfterFiFi\BitSet@Cleanup - \else - \BitSet@Kill#2=% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Bit manipulation}\label{src:bitman} -% -% \begin{macro}{\bitsetClear} -% \begin{macrocode} -\def\bitsetClear{% - \BitSet@CheckIndex\BitSet@Clear -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetSet} -% \begin{macrocode} -\def\bitsetSet{% - \BitSet@CheckIndex\BitSet@Set -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetFlip} -% \begin{macrocode} -\def\bitsetFlip{% - \BitSet@CheckIndex\BitSet@Flip -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetSetValue} -% \begin{macrocode} -\def\bitsetSetValue#1#2#3{% - \expandafter\expandafter\expandafter\BitSet@SetValue - \intcalcNum{#3}!{#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SetValue} -% |#1|: plain value\\ -% |#2|: BitSet\\ -% |#3|: Index -% \begin{macrocode} -\def\BitSet@SetValue#1!{% - \BitSet@CheckIndex{% - \ifcase#1 % - \expandafter\BitSet@Clear - \or - \expandafter\BitSet@Set - \else - \BitSet@ErrorInvalidBitValue{#1}% - \expandafter\expandafter\expandafter\BitSet@Gobble - \expandafter\BitSet@Gobble - \fi - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@ErrorInvalidBitValue} -% |#1|: Wrong bit value -% \begin{macrocode} -\def\BitSet@ErrorInvalidBitValue#1{% - \@PackageError{bitset}{% - Invalid bit value (#1) not in range 0..1% - }\@ehc -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Clear operation} -% -% \begin{macro}{\BitSet@Clear} -% |#1|: BitSet\\ -% |#2|: plain and checked index -% \begin{macrocode} -\def\BitSet@Clear#1#2{% - \edef\BitSet@Temp{% - \expandafter\expandafter\expandafter\BitSet@@Clear - \csname BS@#1\expandafter\endcsname - \expandafter\BitSet@Empty\expandafter=\expandafter!% - \romannumeral#2000!% - }% - \expandafter\let\csname BS@#1\expandafter\endcsname - \ifx\BitSet@Temp\BitSet@Empty - \BitSet@Zero - \else - \BitSet@Temp - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@Clear} -% \begin{macrocode} -\def\BitSet@@Clear#1#2=#3!#4{% - \ifx#4!% - \ifx#1\BitSet@Empty - \else - \ifx\BitSet@Empty#2% - \else - #30#2% - \fi - \fi - \else - \ifx#1\BitSet@Empty - \BitSet@AfterFiFi\BitSet@Cleanup - \else - \ifx#10% - \BitSet@AfterFiFiFi{% - \BitSet@@Clear#2=#30!% - }% - \else - #31% - \BitSet@AfterFiFiFi{% - \BitSet@@Clear#2=!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Set operation} -% -% \begin{macro}{\BitSet@Set} -% |#1|: BitSet\\ -% |#2|: plain and checked Index -% \begin{macrocode} -\def\BitSet@Set#1#2{% - \expandafter\edef\csname BS@#1\endcsname{% - \expandafter\expandafter\expandafter\BitSet@@Set - \csname BS@#1\expandafter\endcsname - \expandafter\BitSet@Empty\expandafter=% - \expandafter{\expandafter}\expandafter{\expandafter}% - \romannumeral#2000!% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@Set} -% \begin{macrocode} -\def\BitSet@@Set#1#2=#3#4#5{% - #3#4% - \ifx#5!% - 1#2% - \else - \ifx#1\BitSet@Empty - 0% - \BitSet@AfterFiFi\BitSet@@@Set - \else - #1% - \BitSet@@Set#2=% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@@Set} -% \begin{macrocode} -\def\BitSet@@@Set#1{% - \ifx#1!% - 1% - \else - 0% - \expandafter\BitSet@@@Set - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Flip operation} -% -% \begin{macro}{\BitSet@Flip} -% |#1|: BitSet\\ -% |#2|: plain and checked Index -% \begin{macrocode} -\def\BitSet@Flip#1#2{% - \edef\BitSet@Temp{% - \expandafter\expandafter\expandafter\BitSet@@Flip - \csname BS@#1\expandafter\endcsname - \expandafter\BitSet@Empty\expandafter=\expandafter!% - \romannumeral#2000!% - }% - \expandafter\let\csname BS@#1\expandafter\endcsname - \ifx\BitSet@Temp\BitSet@Empty - \BitSet@Zero - \else - \BitSet@Temp - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@Flip} -% \begin{macrocode} -\def\BitSet@@Flip#1#2=#3!#4{% - \ifx#4!% - \ifx#11% - \ifx\BitSet@Empty#2% - \else - #30#2% - \fi - \else - #31#2% - \fi - \else - \ifx#1\BitSet@Empty - #30% - \BitSet@AfterFiFi\BitSet@@@Set - \else - \ifx#10% - \BitSet@AfterFiFiFi{% - \BitSet@@Flip#2=#30!% - }% - \else - #31% - \BitSet@AfterFiFiFi{% - \BitSet@@Flip#2=!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Range operators} -% -% \begin{macro}{\bitsetClearRange} -% \begin{macrocode} -\def\bitsetClearRange{% - \BitSet@Range\BitSet@Clear -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetSetRange} -% \begin{macrocode} -\def\bitsetSetRange{% - \BitSet@Range\BitSet@Set -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetFlipRange} -% \begin{macrocode} -\def\bitsetFlipRange{% - \BitSet@Range\BitSet@Flip -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetSetValueRange} -% \begin{macrocode} -\def\bitsetSetValueRange#1#2#3#4{% - \expandafter\expandafter\expandafter\BitSet@SetValueRange - \intcalcNum{#4}!{#1}{#2}{#3}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SetValueRange} -% \begin{macrocode} -\def\BitSet@SetValueRange#1!#2#3#4{% - \ifcase#1 % - \BitSet@Range\BitSet@Clear{#2}{#3}{#4}% - \or - \BitSet@Range\BitSet@Set{#2}{#3}{#4}% - \else - \BitSet@ErrorInvalidBitValue{#1}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@Range} -% |#1|: clear/set/flip macro\\ -% |#2|: BitSet\\ -% |#3|: Index from\\ -% |#4|: Index to -% \begin{macrocode} -\def\BitSet@Range#1#2#3#4{% - \edef\BitSet@Temp{% - \noexpand\BitSet@@Range\noexpand#1{#2}% - \intcalcNum{#3}!\intcalcNum{#4}!% - }% - \BitSet@Temp -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@Range} -% |#1|: clear/set/flip macro\\ -% |#2|: BitSet\\ -% |#3|: Index from\\ -% |#4|: Index to -% \begin{macrocode} -\def\BitSet@@Range#1#2#3!#4!{% - \ifnum#3<0 % - \BitSet@NegativeIndex#1{#2}#3!#4!0!#4!% - \else - \ifnum#4<0 % - \BitSet@NegativeIndex#1{#2}#3!#4!#3!0!% - \else - \ifcase\intcalcCmp{#3}{#4} % - \or - \@PackageError{bitset}{% - Wrong index numbers in range [#3..#4]\MessageBreak% hash-ok - for clear/set/flip on bit set `#2'.\MessageBreak - The lower index exceeds the upper index.\MessageBreak - Canceling the operation as error recovery% - }\@ehc - \else - \BitSet@@@Range#3!#4!#1{#2}% - \fi - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@NegativeIndex} -% \begin{macrocode} -\def\BitSet@NegativeIndex#1#2#3!#4!#5!#6!{% - \@PackageError{bitset}{% - Negative index in range [#3..#4]\MessageBreak % hash-ok - for \string\bitset - \ifx#1\BitSet@Clear - Clear% - \else - \ifx#1\BitSet@Set - Set% - \else - Flip% - \fi - \fi - Range on bit set `#2'.\MessageBreak - Using [#5..#6] as error recovery% hash-ok - }\@ehc - \BitSet@@Range#1{#2}#5!#6!% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@Range} -% \begin{macrocode} -\def\BitSet@@@Range#1!#2!#3#4{% - \ifnum#1<#2 % - #3{#4}{#1}% - \BitSet@AfterFi{% - \expandafter\expandafter\expandafter\BitSet@@@Range - \IntCalcInc#1!!#2!#3{#4}% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Bit retrieval}\label{src:bitret} -% -% \subsubsection{\cs{bitsetGet}} -% -% \begin{macro}{\bitsetGet} -% \begin{macrocode} -\def\bitsetGet#1#2{% - \number - \expandafter\expandafter\expandafter\BitSet@Get - \intcalcNum{#2}!{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Get} -% |#1|: plain index\\ -% |#2|: BitSet -% \begin{macrocode} -\def\BitSet@Get#1!#2{% - \ifnum#1<0 % - \BitSet@AfterFi{% - 0 \BitSetError:NegativeIndex% - }% - \else - \BitSet@IfUndefined{#2}{0}{% - \expandafter\expandafter\expandafter\BitSet@@Get - \csname BS@#2\expandafter\endcsname - \expandafter!\expandafter=% - \expandafter{\expandafter}\expandafter{\expandafter}% - \romannumeral\intcalcNum{#1}000!% - }% - \expandafter\BitSet@Space - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@Get} -% \begin{macrocode} -\def\BitSet@@Get#1#2=#3#4#5{% - #3#4% - \ifx#5!% - \ifx#1!% - 0% - \else - #1% - \fi - \else - \ifx#1!% - 0% - \BitSet@AfterFiFi\BitSet@Cleanup - \else - \BitSet@@Get#2=% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bitsetNextClearBit}, \cs{bitsetNextSetBit}} -% -% \begin{macro}{\bitsetNextClearBit} -% \begin{macrocode} -\def\bitsetNextClearBit#1#2{% - \number - \expandafter\expandafter\expandafter\BitSet@NextClearBit - \intcalcNum{#2}!{#1} % -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@NextClearBit} -% |#1|: Index\\ -% |#2|: BitSet -% \begin{macrocode} -\def\BitSet@NextClearBit#1!#2{% - \ifnum#1<0 % - \BitSet@NextClearBit0!{#2}% - \BitSet@AfterFi{% - \expandafter\BitSet@Space - \expandafter\BitSetError:NegativeIndex\romannumeral0% - }% - \else - \bitsetIsEmpty{#2}{#1}{% - \expandafter\BitSet@Skip - \number#1\expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!!!!!!!!!=% - {\BitSet@@NextClearBit#1!}% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@NextClearBit} -% |#1|: index for next bit in |#2|\\ -% |#2|: next bit -% \begin{macrocode} -\def\BitSet@@NextClearBit#1!#2{% - \ifx#2!% - #1% - \else - \ifx#20% - #1% - \BitSet@AfterFiFi\BitSet@Cleanup - \else - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@@NextClearBit - \IntCalcInc#1!!% - }% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bitsetNextSetBit} -% \begin{macrocode} -\def\bitsetNextSetBit#1#2{% - \number - \expandafter\expandafter\expandafter\BitSet@NextSetBit - \intcalcNum{#2}!{#1} % -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@NextSetBit} -% |#1|: Index\\ -% |#2|: BitSet -% \begin{macrocode} -\def\BitSet@NextSetBit#1!#2{% - \ifnum#1<0 % - \BitSet@NextSetBit0!{#2}% - \BitSet@AfterFi{% - \expandafter\BitSet@Space - \expandafter\BitSetError:NegativeIndex\romannumeral0% - }% - \else - \bitsetIsEmpty{#2}{-1}{% - \expandafter\BitSet@Skip - \number#1\expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!!!!!!!!!=% - {\BitSet@@NextSetBit#1!}% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@@NextSetBit} -% |#1|: index for next bit in |#2|\\ -% |#2|: next bit -% \begin{macrocode} -\def\BitSet@@NextSetBit#1!#2{% - \ifx#2!% - -1% - \else - \ifx#21% - #1% - \BitSet@AfterFiFi\BitSet@Cleanup - \else - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@@NextSetBit - \IntCalcInc#1!!% - }% - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Cleanup} -% \begin{macrocode} -\def\BitSet@Cleanup#1!{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BitSet@Skip} -% |#1|: number of bits to skip\\ -% |#2|: bits\\ -% |#3|: continuation code -% \begin{macrocode} -\def\BitSet@Skip#1!#2{% - \ifx#2!% - \BitSet@AfterFi{% - \BitSet@SkipContinue% - }% - \else - \ifcase#1 % - \BitSet@AfterFiFi{% - \BitSet@SkipContinue#2% - }% - \or - \BitSet@AfterFiFi\BitSet@SkipContinue - \or - \BitSet@AfterFiFi{% - \expandafter\BitSet@SkipContinue\BitSet@Gobble - }% - \else - \ifnum#1>8 % - \BitSet@AfterFiFiFi{% - \expandafter\BitSet@Skip - \number\IntCalcSub#1!8!\expandafter!% - \BitSet@GobbleSeven - }% - \else - \BitSet@AfterFiFiFi{% - \expandafter\expandafter\expandafter\BitSet@Skip - \IntCalcDec#1!!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@SkipContinue} -% |#1|: remaining bits\\ -% |#2|: continuation code -% \begin{macrocode} -\def\BitSet@SkipContinue#1!#2=#3{% - #3#1!% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@GobbleSeven} -% \begin{macrocode} -\def\BitSet@GobbleSeven#1#2#3#4#5#6#7{} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bitsetGetSetBitList}} -% -% \begin{macro}{\bitsetGetSetBitList} -% It's just a wrapper for \cs{bitsetNextSetBit}. -% \begin{macrocode} -\def\bitsetGetSetBitList#1{% - \romannumeral0% - \bitsetIsEmpty{#1}{ }{% - \expandafter\BitSet@GetSetBitList - \number\BitSet@NextSetBit0!{#1}!{#1}{}!% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@GetSetBitList} -% |#1|: found index\\ -% |#2|: BitSet\\ -% |#3|: comma -% |#4|: result -% \begin{macrocode} -\def\BitSet@GetSetBitList#1!#2#3#4!{% - \ifnum#1<0 % - \BitSet@AfterFi{ #4}% - \else - \BitSet@AfterFi{% - \expandafter\BitSet@GetSetBitList\number - \expandafter\expandafter\expandafter\BitSet@NextSetBit - \IntCalcInc#1!!{#2}!{#2},#4#3#1!% - }% - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Bit set properties}\label{src:prop} -% -% \begin{macro}{\bitsetSize} -% \begin{macrocode} -\def\bitsetSize#1{% - \number - \BitSet@IfUndefined{#1}{0 }{% - \expandafter\expandafter\expandafter\BitSet@Size - \expandafter\expandafter\expandafter1% - \expandafter\expandafter\expandafter!% - \csname BS@#1\endcsname!0!% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Size} -% |#1|: counter\\ -% |#2#3|: bits\\ -% |#4|: result -% \begin{macrocode} -\def\BitSet@Size#1!#2#3!#4!{% - \ifx#21% - \ifx\\#3\\% - \BitSet@AfterFiFi{#1 }% - \else - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@Size - \IntCalcInc#1!!#3!#1!% - }% - \fi - \else - \ifx\\#3\\% - \BitSet@AfterFiFi{#4 }% - \else - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@Size - \IntCalcInc#1!!#3!#4!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bitsetCardinality} -% \begin{macrocode} -\def\bitsetCardinality#1{% - \number - \BitSet@IfUndefined{#1}{0 }{% - \expandafter\expandafter\expandafter\BitSet@Cardinality - \expandafter\expandafter\expandafter0% - \expandafter\expandafter\expandafter!% - \csname BS@#1\endcsname!% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Cardinality} -% |#1|: result\\ -% |#2#3|: bits -% \begin{macrocode} -\def\BitSet@Cardinality#1!#2#3!{% - \ifx#21% - \ifx\\#3\\% - \BitSet@AfterFiFi{\IntCalcInc#1! }% - \else - \BitSet@AfterFiFi{% - \expandafter\expandafter\expandafter\BitSet@Cardinality - \IntCalcInc#1!!#3!% - }% - \fi - \else - \ifx\\#3\\% - \BitSet@AfterFiFi{#1 }% - \else - \BitSet@AfterFiFi{% - \BitSet@Cardinality#1!#3!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Queries}\label{src:query} -% -% \begin{macro}{\bitsetIsDefined} -% \begin{macrocode} -\def\bitsetIsDefined#1{% - \BitSet@IfUndefined{#1}% - \BitSet@SecondOfTwo - \BitSet@FirstOfTwo -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\bitsetIsEmpty} -% \begin{macrocode} -\def\bitsetIsEmpty#1{% - \BitSet@IfUndefined{#1}\BitSet@FirstOfTwo{% - \expandafter\ifx\csname BS@#1\endcsname\BitSet@Zero - \expandafter\BitSet@FirstOfTwo - \else - \expandafter\BitSet@SecondOfTwo - \fi - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Zero} -% \begin{macrocode} -\def\BitSet@Zero{0} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bitsetQuery} -% \begin{macrocode} -\def\bitsetQuery#1#2{% - \ifnum\bitsetGet{#1}{#2}=1 % - \expandafter\BitSet@FirstOfTwo - \else - \expandafter\BitSet@SecondOfTwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bitsetEquals} -% \begin{macrocode} -\def\bitsetEquals#1#2{% - \BitSet@IfUndefined{#1}{% - \BitSet@IfUndefined{#2}\BitSet@FirstOfTwo\BitSet@SecondOfTwo - }{% - \BitSet@IfUndefined{#2}\BitSet@SecondOfTwo{% - \expandafter\ifx\csname BS@#1\expandafter\endcsname - \csname BS@#2\endcsname - \expandafter\BitSet@FirstOfTwo - \else - \expandafter\BitSet@SecondOfTwo - \fi - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bitsetIntersects} -% \begin{macrocode} -\def\bitsetIntersects#1#2{% - \bitsetIsEmpty{#1}\BitSet@SecondOfTwo{% - \bitsetIsEmpty{#2}\BitSet@SecondOfTwo{% - \expandafter\expandafter\expandafter\BitSet@Intersects - \csname BS@#1\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter!% - \csname BS@#2\endcsname!% - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BitSet@Intersects} -% \begin{macrocode} -\def\BitSet@Intersects#1#2!#3#4!{% - \ifnum#1#3=11 % - \BitSet@AfterFi\BitSet@FirstOfTwo - \else - \ifx\\#2\\% - \BitSet@AfterFiFi\BitSet@SecondOfTwo - \else - \ifx\\#4\\% - \BitSet@AfterFiFiFi\BitSet@SecondOfTwo - \else - \BitSet@AfterFiFiFi{% - \BitSet@Intersects#2!#4!% - }% - \fi - \fi - \BitSet@Fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\BitSet@AtEnd% -% -% \end{macrocode} -%% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{bitset}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/bitset.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/bitset.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex bitset.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% bitset.sty & tex/generic/oberdiek/bitset.sty\\ -% bitset.pdf & doc/latex/oberdiek/bitset.pdf\\ -% bitset.dtx & source/latex/oberdiek/bitset.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{bitset.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex bitset.dtx -%makeindex -s gind.ist bitset.idx -%pdflatex bitset.dtx -%makeindex -s gind.ist bitset.idx -%pdflatex bitset.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{History} -% \begin{Version}{2007/09/28 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2011/01/30 v1.1} -% \item -% Already loaded package files are not input in \hologo{plainTeX}. -% \end{Version} -% \begin{Version}{2016/05/16 v1.2} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/bmpsize.pdf b/macros/latex/contrib/oberdiek/bmpsize.pdf index d80f1cb3b8..e18c07f58d 100644 Binary files a/macros/latex/contrib/oberdiek/bmpsize.pdf and b/macros/latex/contrib/oberdiek/bmpsize.pdf differ diff --git a/macros/latex/contrib/oberdiek/catchfile.dtx b/macros/latex/contrib/oberdiek/catchfile.dtx deleted file mode 100644 index 439a7871e7..0000000000 --- a/macros/latex/contrib/oberdiek/catchfile.dtx +++ /dev/null @@ -1,777 +0,0 @@ -% \iffalse meta-comment -% -% File: catchfile.dtx -% Version: 2016/05/16 v1.7 -% Info: Catch the contents of a file -% -% Copyright (C) -% 2007, 2010, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% The Base Interpreter refers to any `TeX-Format', -% because some files are installed in TDS:tex/generic//. -% -% This work consists of the main source file catchfile.dtx -% and the derived files -% catchfile.sty, catchfile.pdf, catchfile.ins, catchfile.drv, -% catchfile-test1.tex, catchfile-test2.tex, -% catchfile-test3.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/catchfile.dtx -% CTAN:macros/latex/contrib/oberdiek/catchfile.pdf -% -% Unpacking: -% (a) If catchfile.ins is present: -% tex catchfile.ins -% (b) Without catchfile.ins: -% tex catchfile.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{catchfile.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If catchfile.drv is present: -% latex catchfile.drv -% (b) Without catchfile.drv: -% latex catchfile.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex catchfile.dtx -% makeindex -s gind.ist catchfile.idx -% pdflatex catchfile.dtx -% makeindex -s gind.ist catchfile.idx -% pdflatex catchfile.dtx -% -% Installation: -% TDS:tex/generic/oberdiek/catchfile.sty -% TDS:doc/latex/oberdiek/catchfile.pdf -% TDS:source/latex/oberdiek/catchfile.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: catchfile 2016/05/16 v1.7 Catch the contents of a file (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: catchfile -Version: 2016/05/16 v1.7 - -Copyright (C) - 2007, 2010, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -The Base Interpreter refers to any `TeX-Format', -because some files are installed in TDS:tex/generic//. - -This work consists of the main source file catchfile.dtx -and the derived files - catchfile.sty, catchfile.pdf, catchfile.ins, catchfile.drv, - catchfile-test1.tex, catchfile-test2.tex, - catchfile-test3.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{catchfile.ins}{\from{catchfile.dtx}{install}}% - \file{catchfile.drv}{\from{catchfile.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% - \file{catchfile.sty}{\from{catchfile.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{catchfile-test1.tex}{\from{catchfile.dtx}{test1}}% -% \file{catchfile-test2.tex}{\from{catchfile.dtx}{test2}}% -% \file{catchfile-test3.tex}{\from{catchfile.dtx}{test3}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* catchfile.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `catchfile.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{catchfile.drv}% - [2016/05/16 v1.7 Catch the contents of a file (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{catchfile.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{catchfile.drv} -% -% \title{The \xpackage{catchfile} package} -% \date{2016/05/16 v1.7} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% This package catches the contents of a file and puts it in a macro. -% It requires \eTeX. Both \LaTeX\ and \plainTeX\ are supported. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% The package relies on \eTeX's \cs{everyeof}. Otherwise it -% aborts with an error message. -% -% \begin{declcs}{CatchFileDef} \M{cmd} \M{file name} \M{setup}\\ -% \cs{CatchFileEdef} \M{cmd} \M{file name} \M{setup} -% \end{declcs} -% Macro \meta{cmd} is defined with the contents -% of file \meta{file name}. -% \cs{CatchFileDef} uses \cs{def}, \cs{CatchFileEdef} \cs{edef} -% for the definition. -% Additional setup code for setting -% catcodes or treatment of line ends can be given in code -% \meta{setup}. See the test files for an example. -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{Reload check and package identification} -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode58=12 % : - \catcode64=11 % @ - \catcode123=1 % { - \catcode125=2 % } - \expandafter\let\expandafter\x\csname ver@catchfile.sty\endcsname - \ifx\x\relax % plain-TeX, first loading - \else - \def\empty{}% - \ifx\x\empty % LaTeX, first loading, - % variable is initialized, but \ProvidesPackage not yet seen - \else - \expandafter\ifx\csname PackageInfo\endcsname\relax - \def\x#1#2{% - \immediate\write-1{Package #1 Info: #2.}% - }% - \else - \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% - \fi - \x{catchfile}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode47=12 % / - \catcode58=12 % : - \catcode64=11 % @ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode123=1 % { - \catcode125=2 % } - \expandafter\ifx\csname ProvidesPackage\endcsname\relax - \def\x#1#2#3[#4]{\endgroup - \immediate\write-1{Package: #3 #4}% - \xdef#1{#4}% - }% - \else - \def\x#1#2[#3]{\endgroup - #2[{#3}]% - \ifx#1\@undefined - \xdef#1{#3}% - \fi - \ifx#1\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@catchfile.sty\endcsname -\ProvidesPackage{catchfile}% - [2016/05/16 v1.7 Catch the contents of a file (HO)]% -% \end{macrocode} -% -% \subsection{Catcodes} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname CatchFile@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2{% - \edef\CatchFile@AtEnd{% - \CatchFile@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{45}{12}% - -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{96}{12}% ` -\edef\CatchFile@AtEnd{\CatchFile@AtEnd\noexpand\endinput} -% \end{macrocode} -% -% \subsection{Preparations} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \input infwarerr.sty\relax - \input ltxcmds.sty\relax -\else - \RequirePackage{infwarerr}[2007/09/09]% - \RequirePackage{ltxcmds}[2010/03/09]% -\fi -% \end{macrocode} -% -% Check for \eTeX's \cs{everyeof}. -% \begin{macrocode} -\begingroup - \escapechar=92\relax - \edef\TestString{\string\everyeof}% - \edef\TestMeaning{\meaning\everyeof}% - \ifx\TestString\TestMeaning - \else - \@PackageError{catchfile}{% - Cannot find e-TeX's \string\everyeof,\MessageBreak - package loading is aborted% - }\@ehd - \endgroup - \expandafter\CatchFile@AtEnd - \fi% -\endgroup -% \end{macrocode} -% -% \subsection{Looking for primitive \cs{input}} -% -% \begin{macro}{\CatchFile@Input} -% The package needs the expandable primitive \cs{input}. -% However there are formats that redefine it. For example, -% \LaTeX's \cs{input} is not expandable, but it stores -% the primitive in \cs{@@input}. The third possibility -% is \cs{pdfprimitive}, introduced in \pdfTeX\ 1.40.0. -% -% Thus we try to find the primitive and store it in -% \cs{CatchFile@Input}. If it is used, it must be expanded -% twice (because of the solution with \cs{pdfprimitive}). -% \begin{macrocode} -\begingroup - \def\Check#1#2#3#4\endgroup{% - \edef\TestString{\string#1}% - \edef\TestMeaning{\meaning#2}% - \ifx\TestString\TestMeaning - \endgroup - \let\CatchFile@Primitive#2% - \def\CatchFile@Input{\CatchFile@Primitive#3}% - \else - #4\endgroup - \fi - }% - \Check\input\input{}% - \Check\input\@@input{}% - \Check\pdfprimitive\pdfprimitive\input - \@PackageError{% - Cannot find primitive \string\input,\MessageBreak - package loading is aborted% - }\@ehd - \csname endgroup\endcsname - \CatchFile@AtEnd% -\endgroup -% \end{macrocode} -% \end{macro} -% -% \subsection{Input file check} -% -% \begin{macro}{\CatchFile@CheckFileExists} -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname IfFileExists\endcsname\relax - \input pdftexcmds.sty\relax - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname pdf@filesize\endcsname\relax - \def\CatchFile@CheckFileExists#1{% - \expandafter\ifx\csname @inputcheck\endcsname\relax - \csname newread\endcsname\@inputcheck - \fi - \openin\@inputcheck#1\relax - \expandafter\closein\expandafter\@inputcheck - \ifeof\@inputcheck - \let\CatchFile@File\relax - \else - \def\CatchFile@File{#1}% - \fi - }% - \else - \def\CatchFile@CheckFileExists#1{% - \expandafter\expandafter\expandafter\ifx - \expandafter\expandafter\expandafter\relax\pdf@filesize{#1}\relax - \let\CatchFile@File\relax - \else - \def\CatchFile@File{#1}% - \fi - }% - \fi -\else - \def\CatchFile@CheckFileExists#1{% - \IfFileExists{#1}{% - \expandafter\CatchFile@DefFile\@filef@und\@nil - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname @addtofilelist\endcsname\relax - \else - \@addtofilelist\CatchFile@File - \fi - }{% - \let\CatchFile@File\relax - }% - }% - \def\CatchFile@DefFile#1 \@nil{% - \def\CatchFile@File{#1}% - }% -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CatchFile@NotFound} -% \begin{macrocode} -\def\CatchFile@NotFound#1#2{% - \def#1{}% - \@PackageError{catchfile}{% - File `#2' not found% - }\@ehc -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Catch file contents} -% -% \begin{macrocode} -\ltx@IfUndefined{RequirePackage}{% - \input etexcmds.sty\relax -}{% - \RequirePackage{etexcmds}[2010/01/28]% -} -% \end{macrocode} -% -% \begin{macro}{\CatchFileEdef} -% \begin{macrocode} -\long\def\CatchFileEdef#1#2#3{% - \CatchFile@CheckFileExists{#2}% - \ifx\CatchFile@File\relax - \CatchFile@NotFound{#1}{#2}% - \else - \begingroup - \everyeof{\noexpand}% - #3% - \xdef\CatchFile@Contents{\CatchFile@Input\CatchFile@File\space}% - \endgroup - \let#1\CatchFile@Contents - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CatchFileDef} -% \begin{macrocode} -\long\def\CatchFileDef#1#2#3{% - \CatchFile@CheckFileExists{#2}% - \ifx\CatchFile@File\relax - \CatchFile@NotFound{#1}{#2}% - \else - \begingroup - \everyeof\expandafter{% - \CatchFile@EOF - \expandafter\CatchFile@Finish - \noexpand - }% - \ltx@ifundefined{etex@unexpanded}{% - \expandafter\long\expandafter\def\expandafter\CatchFile@Do - \expandafter##\expandafter1\CatchFile@EOF{% - \toks\ltx@zero{##1}% - \xdef\CatchFile@gtemp{\the\toks\ltx@zero}% - \def\CatchFile@Finish{% - \endgroup - \let#1\CatchFile@gtemp - \global\let\CatchFile@gtemp\ltx@undefined - }% - }% - }{% - \expandafter\long\expandafter\def\expandafter\CatchFile@Do - \expandafter##\expandafter1\CatchFile@EOF{% - \edef\CatchFile@Finish{% - \endgroup - \etex@unexpanded{% - \edef#1{\etex@unexpanded{##1}}% - }% - }% - }% - }% - #3\relax - \expandafter\expandafter\expandafter\CatchFile@Do - \CatchFile@Input\CatchFile@File\relax - \fi -} -% \end{macrocode} -% \cs{relax} after |#3| was added to make it more robust in -% case the user uses something like -%\begin{verbatim} -%\CatchFileDef{\content}{\jobname.tt}{\endlinechar=-1} -%\end{verbatim} -% that expands the following \cs{expandafter} after |#3| prematurely -% (contribution of Martin Scharrer). -% \end{macro} -% \begin{macro}{\CatchFile@EOF} -% If the file is read the catcode mappings are fixed. -% This means that the same character cannot occur -% inside the file with different catcodes. -% Thus we use as end of file marker the at sign -% twice with different catcodes. -% \begin{macrocode} -\begingroup - \lccode65=64 % lowercase('A') = '@' - \lccode66=64 % lowercase('B') = '@' - \catcode65=8 % catcode('A') = subscript - \catcode66=3 % catcode('B') = math shift -\lowercase{\endgroup - \def\CatchFile@EOF{AB}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\CatchFile@AtEnd% -% -% \end{macrocode} -%% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{catchfile}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/catchfile.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/catchfile.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex catchfile.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% catchfile.sty & tex/generic/oberdiek/catchfile.sty\\ -% catchfile.pdf & doc/latex/oberdiek/catchfile.pdf\\ -% catchfile.dtx & source/latex/oberdiek/catchfile.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{catchfile.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex catchfile.dtx -%makeindex -s gind.ist catchfile.idx -%pdflatex catchfile.dtx -%makeindex -s gind.ist catchfile.idx -%pdflatex catchfile.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{History} -% \begin{Version}{2007/05/30 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2007/09/09 v1.1} -% \item -% Catcode section rewritten. -% \end{Version} -% \begin{Version}{2007/11/11 v1.2} -% \item -% Use of package \xpackage{pdftexcmds} for \LuaTeX\ support. -% \end{Version} -% \begin{Version}{2010/03/01 v1.3} -% \item -% Fix for unknown \cs{@PackageErrorNoLine}. -% \end{Version} -% \begin{Version}{2010/04/08 v1.4} -% \item -% \cs{closein} also added if \cs{ifeof} is true. -% \end{Version} -% \begin{Version}{2010/04/28 v1.5} -% \item -% \cs{CatchFileDef}: Getting rid of warning `end of semi simple group -% entered at line \dots\ of -% a different file (Florent Chervet). -% \item -% \cs{CatchFileDef}: Fix for error `Illegal parameter number in -% definition of \dots' (HO) including improvement that uses -% \cs{unexpanded} if available (Florent Chervet). -% \end{Version} -% \begin{Version}{2011/03/01 v1.6} -% \item -% \cs{relax} added after the setup argument of -% \cs{CatchFileDef} to prevent premature file reading -% (Martin Scharrer). -% \end{Version} -% \begin{Version}{2016/05/16 v1.7} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/centernot.pdf b/macros/latex/contrib/oberdiek/centernot.pdf index abf3e1e0fd..e81a9f1694 100644 Binary files a/macros/latex/contrib/oberdiek/centernot.pdf and b/macros/latex/contrib/oberdiek/centernot.pdf differ diff --git a/macros/latex/contrib/oberdiek/chemarr.pdf b/macros/latex/contrib/oberdiek/chemarr.pdf index 01afbeb6f0..172148fcee 100644 Binary files a/macros/latex/contrib/oberdiek/chemarr.pdf and b/macros/latex/contrib/oberdiek/chemarr.pdf differ diff --git a/macros/latex/contrib/oberdiek/classlist.pdf b/macros/latex/contrib/oberdiek/classlist.pdf index 00d23ad196..ecca7ecf83 100644 Binary files a/macros/latex/contrib/oberdiek/classlist.pdf and b/macros/latex/contrib/oberdiek/classlist.pdf differ diff --git a/macros/latex/contrib/oberdiek/colonequals.pdf b/macros/latex/contrib/oberdiek/colonequals.pdf index 261d0c1251..e10037aed6 100644 Binary files a/macros/latex/contrib/oberdiek/colonequals.pdf and b/macros/latex/contrib/oberdiek/colonequals.pdf differ diff --git a/macros/latex/contrib/oberdiek/dvipscol.pdf b/macros/latex/contrib/oberdiek/dvipscol.pdf index b0299a1019..9bb4fbc40b 100644 Binary files a/macros/latex/contrib/oberdiek/dvipscol.pdf and b/macros/latex/contrib/oberdiek/dvipscol.pdf differ diff --git a/macros/latex/contrib/oberdiek/engord.pdf b/macros/latex/contrib/oberdiek/engord.pdf index a62c06bbfb..8eeae27be3 100644 Binary files a/macros/latex/contrib/oberdiek/engord.pdf and b/macros/latex/contrib/oberdiek/engord.pdf differ diff --git a/macros/latex/contrib/oberdiek/enparen.pdf b/macros/latex/contrib/oberdiek/enparen.pdf index 1982d8e4d4..35289c7891 100644 Binary files a/macros/latex/contrib/oberdiek/enparen.pdf and b/macros/latex/contrib/oberdiek/enparen.pdf differ diff --git a/macros/latex/contrib/oberdiek/eolgrab.pdf b/macros/latex/contrib/oberdiek/eolgrab.pdf index aa92822406..821556a722 100644 Binary files a/macros/latex/contrib/oberdiek/eolgrab.pdf and b/macros/latex/contrib/oberdiek/eolgrab.pdf differ diff --git a/macros/latex/contrib/oberdiek/etexcmds.pdf b/macros/latex/contrib/oberdiek/etexcmds.pdf index ec6137b3f2..eb9473f910 100644 Binary files a/macros/latex/contrib/oberdiek/etexcmds.pdf and b/macros/latex/contrib/oberdiek/etexcmds.pdf differ diff --git a/macros/latex/contrib/oberdiek/fibnum.pdf b/macros/latex/contrib/oberdiek/fibnum.pdf index d264ee2676..f8c79dad83 100644 Binary files a/macros/latex/contrib/oberdiek/fibnum.pdf and b/macros/latex/contrib/oberdiek/fibnum.pdf differ diff --git a/macros/latex/contrib/oberdiek/flags.pdf b/macros/latex/contrib/oberdiek/flags.pdf index f565eb626e..9f83f6937e 100644 Binary files a/macros/latex/contrib/oberdiek/flags.pdf and b/macros/latex/contrib/oberdiek/flags.pdf differ diff --git a/macros/latex/contrib/oberdiek/gettitlestring.pdf b/macros/latex/contrib/oberdiek/gettitlestring.pdf index 2e26d964f3..dfaf666d88 100644 Binary files a/macros/latex/contrib/oberdiek/gettitlestring.pdf and b/macros/latex/contrib/oberdiek/gettitlestring.pdf differ diff --git a/macros/latex/contrib/oberdiek/holtxdoc.dtx b/macros/latex/contrib/oberdiek/holtxdoc.dtx index 6c31061ccf..9ac40aa5ae 100644 --- a/macros/latex/contrib/oberdiek/holtxdoc.dtx +++ b/macros/latex/contrib/oberdiek/holtxdoc.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % % File: holtxdoc.dtx -% Version: 2019/11/12 v0.29 +% Version: 2019/12/09 v0.30 % Info: Private additional ltxdoc support % % Copyright (C) @@ -79,7 +79,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: holtxdoc 2019/11/12 v0.29 Private additional ltxdoc support (HO)} +\Msg{* Package: holtxdoc 2019/12/09 v0.30 Private additional ltxdoc support (HO)} \Msg{************************************************************************} \keepsilent @@ -91,7 +91,7 @@ This is a generated file. Project: holtxdoc -Version: 2019/11/12 v0.29 +Version: 2019/12/09 v0.30 Copyright (C) 1999-2012 Heiko Oberdiek @@ -152,7 +152,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{holtxdoc.drv}% - [2019/11/12 v0.29 Private additional ltxdoc support (HO)]% + [2019/12/09 v0.30 Private additional ltxdoc support (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] \begin{document} @@ -166,7 +166,7 @@ and the derived files % \GetFileInfo{holtxdoc.drv} % % \title{The \xpackage{holtxdoc} package} -% \date{2019/11/12 v0.29} +% \date{2019/12/09 v0.30} % \author{Heiko Oberdiek\thanks % {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} % @@ -207,7 +207,7 @@ and the derived files % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{holtxdoc}% - [2019/11/12 v0.29 Private additional ltxdoc support (HO)] + [2019/12/09 v0.30 Private additional ltxdoc support (HO)] % \end{macrocode} % % \begin{macrocode} @@ -217,7 +217,6 @@ and the derived files \RequirePackage{pdftexcmds}[2010/04/01] \RequirePackage{ltxcmds}[2010/03/09] \RequirePackage{hologo}[2011/11/22] -\RequirePackage{ifluatex}[2010/03/01] \RequirePackage{array} % \end{macrocode} % @@ -467,12 +466,12 @@ and the derived files \def\XeTeX{\hologo{XeTeX}} \def\XeLaTeX{\hologo{XeLaTeX}} \def\plainTeX{\hologo{plainTeX}} -\providecommand*{\teTeX}{te\TeX} -\providecommand*{\mikTeX}{mik\TeX} +\providecommand*{\teTeX}{\hologo{teTeX}} +\providecommand*{\mikTeX}{\hologo{MiKTeX}} \providecommand*{\MakeIndex}{\textsl{MakeIndex}} \providecommand*{\docstrip}{\textsf{docstrip}} -\providecommand*{\iniTeX}{\mbox{ini-\TeX}} -\providecommand*{\VTeX}{V\TeX} +\providecommand*{\iniTeX}{\hologo{iniTeX}} +\providecommand*{\VTeX}{\hologo{VTeX}} % \end{macrocode} % % \subsection{Setup} @@ -800,6 +799,12 @@ and the derived files % Add \verb|\bibpackage| (previously defined inline in some of the packages). % Adjust CTAN links. % \end{Version} +% \begin{Version}{2019/12/09 v0.30} +% \item +% Documentation updates. +% \item Don't use \xpackage{ifluatex} legacy package. +% \item use `\xpackage{hologo} definitions in more cases. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/macros/latex/contrib/oberdiek/holtxdoc.pdf b/macros/latex/contrib/oberdiek/holtxdoc.pdf index 42b2ff13a0..a21413b359 100644 Binary files a/macros/latex/contrib/oberdiek/holtxdoc.pdf and b/macros/latex/contrib/oberdiek/holtxdoc.pdf differ diff --git a/macros/latex/contrib/oberdiek/hopatch.pdf b/macros/latex/contrib/oberdiek/hopatch.pdf index cca48d5b2f..8dc4c73267 100644 Binary files a/macros/latex/contrib/oberdiek/hopatch.pdf and b/macros/latex/contrib/oberdiek/hopatch.pdf differ diff --git a/macros/latex/contrib/oberdiek/hycolor.pdf b/macros/latex/contrib/oberdiek/hycolor.pdf index 06d00f571b..b608d36b0e 100644 Binary files a/macros/latex/contrib/oberdiek/hycolor.pdf and b/macros/latex/contrib/oberdiek/hycolor.pdf differ diff --git a/macros/latex/contrib/oberdiek/hypbmsec.pdf b/macros/latex/contrib/oberdiek/hypbmsec.pdf index edbb170567..74f70c400e 100644 Binary files a/macros/latex/contrib/oberdiek/hypbmsec.pdf and b/macros/latex/contrib/oberdiek/hypbmsec.pdf differ diff --git a/macros/latex/contrib/oberdiek/hypcap.pdf b/macros/latex/contrib/oberdiek/hypcap.pdf index a8b46c2c1d..68c34af72f 100644 Binary files a/macros/latex/contrib/oberdiek/hypcap.pdf and b/macros/latex/contrib/oberdiek/hypcap.pdf differ diff --git a/macros/latex/contrib/oberdiek/hypdestopt.pdf b/macros/latex/contrib/oberdiek/hypdestopt.pdf index 9d5bb19945..fa890946b1 100644 Binary files a/macros/latex/contrib/oberdiek/hypdestopt.pdf and b/macros/latex/contrib/oberdiek/hypdestopt.pdf differ diff --git a/macros/latex/contrib/oberdiek/hypdoc.pdf b/macros/latex/contrib/oberdiek/hypdoc.pdf index 3186a4365a..0ce0880828 100644 Binary files a/macros/latex/contrib/oberdiek/hypdoc.pdf and b/macros/latex/contrib/oberdiek/hypdoc.pdf differ diff --git a/macros/latex/contrib/oberdiek/hypgotoe.pdf b/macros/latex/contrib/oberdiek/hypgotoe.pdf index abbdfcda07..28a110e643 100644 Binary files a/macros/latex/contrib/oberdiek/hypgotoe.pdf and b/macros/latex/contrib/oberdiek/hypgotoe.pdf differ diff --git a/macros/latex/contrib/oberdiek/hyphsubst.pdf b/macros/latex/contrib/oberdiek/hyphsubst.pdf index b237a1f4d3..c158c7221e 100644 Binary files a/macros/latex/contrib/oberdiek/hyphsubst.pdf and b/macros/latex/contrib/oberdiek/hyphsubst.pdf differ diff --git a/macros/latex/contrib/oberdiek/ifdraft.pdf b/macros/latex/contrib/oberdiek/ifdraft.pdf index bdc21344bb..1f35b1f8c9 100644 Binary files a/macros/latex/contrib/oberdiek/ifdraft.pdf and b/macros/latex/contrib/oberdiek/ifdraft.pdf differ diff --git a/macros/latex/contrib/oberdiek/iflang.pdf b/macros/latex/contrib/oberdiek/iflang.pdf index 3315aec095..4ca258cfed 100644 Binary files a/macros/latex/contrib/oberdiek/iflang.pdf and b/macros/latex/contrib/oberdiek/iflang.pdf differ diff --git a/macros/latex/contrib/oberdiek/intcalc.pdf b/macros/latex/contrib/oberdiek/intcalc.pdf index 3173e157c4..7a28f6ffb1 100644 Binary files a/macros/latex/contrib/oberdiek/intcalc.pdf and b/macros/latex/contrib/oberdiek/intcalc.pdf differ diff --git a/macros/latex/contrib/oberdiek/kvdefinekeys.pdf b/macros/latex/contrib/oberdiek/kvdefinekeys.pdf index 23422cb58e..810c2fbebc 100644 Binary files a/macros/latex/contrib/oberdiek/kvdefinekeys.pdf and b/macros/latex/contrib/oberdiek/kvdefinekeys.pdf differ diff --git a/macros/latex/contrib/oberdiek/kvsetkeys.pdf b/macros/latex/contrib/oberdiek/kvsetkeys.pdf index 06fcef8bc7..71e0f55877 100644 Binary files a/macros/latex/contrib/oberdiek/kvsetkeys.pdf and b/macros/latex/contrib/oberdiek/kvsetkeys.pdf differ diff --git a/macros/latex/contrib/oberdiek/listingsutf8.dtx b/macros/latex/contrib/oberdiek/listingsutf8.dtx deleted file mode 100644 index 4912923a88..0000000000 --- a/macros/latex/contrib/oberdiek/listingsutf8.dtx +++ /dev/null @@ -1,675 +0,0 @@ -% \iffalse meta-comment -% -% File: listingsutf8.dtx -% Version: 2016/05/16 v1.3 -% Info: Allow UTF-8 in listings input -% -% Copyright (C) -% 2007, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% This work consists of the main source file listingsutf8.dtx -% and the derived files -% listingsutf8.sty, listingsutf8.pdf, listingsutf8.ins, listingsutf8.drv, -% listingsutf8-test1.tex, listingsutf8-test2.tex, -% listingsutf8-test3.tex, listingsutf8-test4.tex, -% listingsutf8-test5.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/listingsutf8.dtx -% CTAN:macros/latex/contrib/oberdiek/listingsutf8.pdf -% -% Unpacking: -% (a) If listingsutf8.ins is present: -% tex listingsutf8.ins -% (b) Without listingsutf8.ins: -% tex listingsutf8.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{listingsutf8.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If listingsutf8.drv is present: -% latex listingsutf8.drv -% (b) Without listingsutf8.drv: -% latex listingsutf8.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex listingsutf8.dtx -% makeindex -s gind.ist listingsutf8.idx -% pdflatex listingsutf8.dtx -% makeindex -s gind.ist listingsutf8.idx -% pdflatex listingsutf8.dtx -% -% Installation: -% TDS:tex/latex/oberdiek/listingsutf8.sty -% TDS:doc/latex/oberdiek/listingsutf8.pdf -% TDS:source/latex/oberdiek/listingsutf8.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: listingsutf8 2016/05/16 v1.3 Allow UTF-8 in listings input (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: listingsutf8 -Version: 2016/05/16 v1.3 - -Copyright (C) - 2007, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -This work consists of the main source file listingsutf8.dtx -and the derived files - listingsutf8.sty, listingsutf8.pdf, listingsutf8.ins, listingsutf8.drv, - listingsutf8-test1.tex, listingsutf8-test2.tex, - listingsutf8-test3.tex, listingsutf8-test4.tex, - listingsutf8-test5.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{listingsutf8.ins}{\from{listingsutf8.dtx}{install}}% - \file{listingsutf8.drv}{\from{listingsutf8.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% - \file{listingsutf8.sty}{\from{listingsutf8.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{listingsutf8-test1.tex}{\from{listingsutf8.dtx}{test1}}% -% \file{listingsutf8-test2.tex}{\from{listingsutf8.dtx}{test2,utf8}}% -% \file{listingsutf8-test3.tex}{\from{listingsutf8.dtx}{test3,utf8x}}% -% \file{listingsutf8-test4.tex}{\from{listingsutf8.dtx}{test4,utf8,noetex}}% -% \file{listingsutf8-test5.tex}{\from{listingsutf8.dtx}{test5,utf8x,noetex}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* listingsutf8.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `listingsutf8.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{listingsutf8.drv}% - [2016/05/16 v1.3 Allow UTF-8 in listings input (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{listingsutf8.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{listingsutf8.drv} -% -% \title{The \xpackage{listingsutf8} package} -% \date{2016/05/16 v1.3} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% Package \xpackage{listings} does not support files with multi-byte -% encodings such as UTF-8. In case of \cs{lstinputlisting} a simple -% workaround is possible if an one-byte encoding exists that the file -% can be converted to. Also \eTeX\ and \pdfTeX\ regardless of its mode -% are required. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% \subsection{User interface} -% -% Load this package after or instead of package \xpackage{listings} -% \cite{listings}. -% The package does not define own options and passes given options to -% package \xpackage{listings}. -% -% The syntax of package \xpackage{listings}' key \xoption{inputencoding} -% is extended: -% \begin{quote} -% |inputencoding=utf8/|\meta{one-byte-encoding}\\ -% Example: |inputencoding=utf8/latin1| -% \end{quote} -% That means the file is encoded in UTF-8 and can -% be converted to the given \meta{one-byte-encoding}. -% The available encodings for \meta{one-byte-encoding} are -% listed in section ``1.2 Supported encodings'' of -% package \xpackage{stringenc}'s documentation \cite{stringenc}. -% Of course, the encoding must encode its characters with -% one byte exactly. This excludes the unicode encodings -% (\xoption{utf8}, \xoption{utf16}, \dots). -% -% Only \cs{lstinputlisting} is supported by the syntax extension -% of key \xoption{inputencoding}. -% -% Internally package \xpackage{listingsutf8} reads the file as binary file -% via primitives of \pdfTeX\ (\cs{pdffiledump}). Then the file -% contents is converted as string using package \xpackage{stringenc} and -% finally the string is read as virtual file by \eTeX's \cs{scantokens}. -% -% \subsection{Future} -% -% Workarounds are not provided for -% \begin{itemize} -% \item \cs{lstinline} -% \item Environment |lstlisting|. -% \item Environments defined by \cs{lstnewenvironment}. -% \end{itemize} -% Perhaps someone will find time to extend package \xpackage{listings} -% with full native support for UTF-8. Then this package would become obsolete. -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{Catcodes and identification} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123=1 % { - \catcode125=2 % } - \catcode64=11 % @ - \def\x{\endgroup - \expandafter\edef\csname lstU@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2{% - \edef\lstU@AtEnd{% - \lstU@AtEnd - \catcode#1=\the\catcode#1\relax - }% - \catcode#1=#2\relax -} -\TMP@EnsureCode{10}{12}% ^^J -\TMP@EnsureCode{33}{12}% ! -\TMP@EnsureCode{36}{3}% $ -\TMP@EnsureCode{38}{4}% & -\TMP@EnsureCode{39}{12}% ' -\TMP@EnsureCode{40}{12}% ( -\TMP@EnsureCode{41}{12}% ) -\TMP@EnsureCode{42}{12}% * -\TMP@EnsureCode{43}{12}% + -\TMP@EnsureCode{44}{12}% , -\TMP@EnsureCode{45}{12}% - -\TMP@EnsureCode{46}{12}% . -\TMP@EnsureCode{47}{12}% / -\TMP@EnsureCode{58}{12}% : -\TMP@EnsureCode{60}{12}% < -\TMP@EnsureCode{62}{12}% > -\TMP@EnsureCode{91}{12}% [ -\TMP@EnsureCode{93}{12}% ] -\TMP@EnsureCode{94}{7}% ^ (superscript) -\TMP@EnsureCode{95}{8}% _ (subscript) -\TMP@EnsureCode{96}{12}% ` -\TMP@EnsureCode{124}{12}% | -\TMP@EnsureCode{126}{13}% ~ (active) -\edef\lstU@AtEnd{\lstU@AtEnd\noexpand\endinput} -% \end{macrocode} -% -% Package identification. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{listingsutf8}% - [2016/05/16 v1.3 Allow UTF-8 in listings input (HO)] -% \end{macrocode} -% -% \subsection{Package options} -% -% Just pass options to package listings. -% -% \begin{macrocode} -\DeclareOption*{% - \PassOptionsToPackage\CurrentOption{listings}% -} -\ProcessOptions* -% \end{macrocode} -% Key \xoption{inputencoding} was introduced in version -% 2002/04/01 v1.0 of package \xpackage{listings}. -% \begin{macrocode} -\RequirePackage{listings}[2002/04/01] -% \end{macrocode} -% Ensure that \cs{inputencoding} is provided. -% \begin{macrocode} -\AtBeginDocument{% - \@ifundefined{inputencoding}{% - \RequirePackage{inputenc}% - }{}% -} -% \end{macrocode} -% -% \subsection{Check prerequisites} -% -% \begin{macrocode} -\RequirePackage{pdftexcmds}[2011/04/22] -% \end{macrocode} -% -% \begin{macrocode} -\def\lstU@temp#1#2{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname #1\endcsname\relax - \PackageWarningNoLine{listingsutf8}{% - Package loading is aborted because of missing % - \@backslashchar#1.\MessageBreak - #2% - }% - \expandafter\lstU@AtEnd - \fi -} -\lstU@temp{scantokens}{It is provided by e-TeX}% -\lstU@temp{pdf@unescapehex}{It is provided by pdfTeX >= 1.30}% -\lstU@temp{pdf@filedump}{It is provided by pdfTeX >= 1.30}% -\lstU@temp{pdf@filesize}{It is provided by pdfTeX >= 1.30}% -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{stringenc}[2010/03/01] -% \end{macrocode} -% -% \subsection{Add support for UTF-8} -% -% \begin{macro}{\iflstU@utfviii} -% \begin{macrocode} -\newif\iflstU@utfviii -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lstU@inputenc} -% \begin{macrocode} -\def\lstU@inputenc#1{% - \expandafter\lstU@@inputenc#1utf8/utf8/\@nil -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\lstU@@inputenc} -\def\lstU@@inputenc#1utf8/#2utf8/#3\@nil{% - \ifx\\#1\\% - \lstU@utfviiitrue - \def\lst@inputenc{#2}% - \else - \lstU@utfviiifalse - \fi -} -% \begin{macrocode} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\lst@Key{inputencoding}\relax{% - \def\lst@inputenc{#1}% - \lstU@inputenc{#1}% -} -% \end{macrocode} -% -% \subsubsection{Conversion} -% -% \begin{macro}{\lstU@input} -% \begin{macrocode} -\def\lstU@input#1{% - \iflstU@utfviii - \edef\lstU@text{% - \pdf@unescapehex{% - \pdf@filedump{0}{\pdf@filesize{#1}}{#1}% - }% - }% - \lstU@CRLFtoLF\lstU@text - \StringEncodingConvert\lstU@text\lstU@text{utf8}\lst@inputenc - \def\lstU@temp{% - \scantokens\expandafter{\lstU@text}% - }% - \else - \def\lstU@temp{% - \input{#1}% - }% - \fi - \lstU@temp -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Convert CR/LF pairs to LF} -% -% \begin{macro}{\lstU@CRLFtoLF} -% \begin{macrocode} -\begingroup - \endlinechar=-1 % - \@makeother\^^J % - \@makeother\^^M % - \gdef\lstU@CRLFtoLF#1{% - \edef#1{% - \expandafter\lstU@CRLFtoLF@aux#1^^M^^J\@nil - }% - }% - \gdef\lstU@CRLFtoLF@aux#1^^M^^J#2\@nil{% - #1% - \ifx\relax#2\relax - \@car - \fi - ^^J% - \lstU@CRLFtoLF@aux#2\@nil - }% -\endgroup % -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Patch \cs{lst@InputListing}} -% -% \begin{macrocode} -\def\lstU@temp#1\def\lst@next#2#3\@nil{% - \def\lst@InputListing##1{% - #1% - \def\lst@next{\lstU@input{##1}}% - #3% - }% -} -\expandafter\lstU@temp\lst@InputListing{#1}\@nil -% \end{macrocode} -% -% \begin{macrocode} -\lstU@AtEnd% -% -% \end{macrocode} -%% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{listingsutf8}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/listingsutf8.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/listingsutf8.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex listingsutf8.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% listingsutf8.sty & tex/latex/oberdiek/listingsutf8.sty\\ -% listingsutf8.pdf & doc/latex/oberdiek/listingsutf8.pdf\\ -% listingsutf8.dtx & source/latex/oberdiek/listingsutf8.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{listingsutf8.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex listingsutf8.dtx -%makeindex -s gind.ist listingsutf8.idx -%pdflatex listingsutf8.dtx -%makeindex -s gind.ist listingsutf8.idx -%pdflatex listingsutf8.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{thebibliography}{9} -% -% \bibitem{inputenc} -% Alan Jeffrey, Frank Mittelbach, -% \textit{inputenc.sty}, 2006/05/05 v1.1b. -% \CTANpkg{inputenc} -% -% \bibitem{listings} -% Carsten Heinz, Brooks Moses: -% \textit{The \xpackage{listings} package}; -% 2007/02/22;\\ -% \CTANpkg{listings}. -% -% \bibitem{stringenc} -% Heiko Oberdiek: -% \textit{The \xpackage{stringenc} package}; -% 2007/10/22;\\ -% \CTANpkg{stringenc}. -% -% \end{thebibliography} -% -% \begin{History} -% \begin{Version}{2007/10/22 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2007/11/11 v1.1} -% \item -% Use of package \xpackage{pdftexcmds}. -% \end{Version} -% \begin{Version}{2011/11/10 v1.2} -% \item -% DOS line ends CR/LF normalized to LF to avoid empty lines -% (Bug report of Thomas Benkert in de.comp.text.tex). -% \end{Version} -% \begin{Version}{2016/05/16 v1.3} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/listingsutf8.pdf b/macros/latex/contrib/oberdiek/listingsutf8.pdf deleted file mode 100644 index 3adbbf83f3..0000000000 Binary files a/macros/latex/contrib/oberdiek/listingsutf8.pdf and /dev/null differ diff --git a/macros/latex/contrib/oberdiek/ltxcmds.pdf b/macros/latex/contrib/oberdiek/ltxcmds.pdf index a6f5e44662..9efe9c4031 100644 Binary files a/macros/latex/contrib/oberdiek/ltxcmds.pdf and b/macros/latex/contrib/oberdiek/ltxcmds.pdf differ diff --git a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib index 447fce6508..c08ab94024 100644 --- a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib +++ b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib @@ -5,20 +5,6 @@ version={1.5}, url={https://ctan.org/pkg/aliascnt}, } -@manual{oberdiek:alphalph, - title={The alphalph package}, - author={Heiko Oberdiek}, - date={2016-05-16}, - version={2.5}, - url={https://ctan.org/pkg/alphalph}, -} -@manual{oberdiek:askinclude, - title={The askinclude package}, - author={Pablo A. Straub and Heiko Oberdiek}, - date={2018-11-01}, - version={2.4}, - url={https://ctan.org/pkg/askinclude}, -} @manual{oberdiek:auxhook, title={The auxhook package}, author={Heiko Oberdiek}, @@ -33,13 +19,6 @@ version={1.4}, url={https://ctan.org/pkg/bigintcalc}, } -@manual{oberdiek:bitset, - title={The bitset package}, - author={Heiko Oberdiek}, - date={2016/05/16}, - version={1.2}, - url={https://ctan.org/pkg/bitset}, -} @manual{oberdiek:bmpsize, title={The bmpsize package}, author={Heiko Oberdiek}, @@ -47,13 +26,6 @@ version={1.7}, url={https://ctan.org/pkg/bmpsize}, } -@manual{oberdiek:catchfile, - title={The catchfile package}, - author={Heiko Oberdiek}, - date={2016-05-16}, - version={1.7}, - url={https://ctan.org/pkg/catchfile}, -} @manual{oberdiek:centernot, title={The centernot package}, author={Heiko Oberdiek}, @@ -236,13 +208,6 @@ version={1.17}, url={https://ctan.org/pkg/kvsetkeys}, } -@manual{oberdiek:listingsutf8, - title={The listingsutf8 package}, - author={Heiko Oberdiek}, - date={2016-05-16}, - version={1.3}, - url={https://ctan.org/pkg/listingsutf8}, -} @manual{oberdiek:ltxcmds, title={The ltxcmds package}, author={Heiko Oberdiek}, @@ -355,13 +320,6 @@ version={1.3}, url={https://ctan.org/pkg/scrindex}, } -@manual{oberdiek:selinput, - title={The selinput package}, - author={Heiko Oberdiek}, - date={2016-05-16}, - version={1.4}, - url={https://ctan.org/pkg/selinput}, -} @manual{oberdiek:setouterhbox, title={The setouterhbox package}, author={Heiko Oberdiek}, diff --git a/macros/latex/contrib/oberdiek/oberdiek.ins b/macros/latex/contrib/oberdiek/oberdiek.ins index 304bd89a99..a0a0048ce0 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.ins +++ b/macros/latex/contrib/oberdiek/oberdiek.ins @@ -1,5 +1,5 @@ % oberdiek.ins -% 2019/12/05 +% 2019/12/09 % % Copyright (C) % 1999, 2001, 2006 Heiko Oberdiek @@ -27,13 +27,9 @@ \input docstrip \batchinput{aliascnt.dtx} -\batchinput{alphalph.dtx} -\batchinput{askinclude.dtx} \batchinput{auxhook.dtx} \batchinput{bigintcalc.dtx} -\batchinput{bitset.dtx} \batchinput{bmpsize.dtx} -\batchinput{catchfile.dtx} \batchinput{centernot.dtx} \batchinput{chemarr.dtx} \batchinput{classlist.dtx} @@ -60,7 +56,6 @@ \batchinput{intcalc.dtx} \batchinput{kvdefinekeys.dtx} \batchinput{kvsetkeys.dtx} -\batchinput{listingsutf8.dtx} \batchinput{ltxcmds.dtx} \batchinput{pagegrid.dtx} \batchinput{pagesel.dtx} @@ -69,15 +64,12 @@ \batchinput{pdfcolparallel.dtx} \batchinput{pdfcolparcolumns.dtx} \batchinput{pdfcrypt.dtx} -\batchinput{pdfescape.dtx} \batchinput{pdfrender.dtx} -\batchinput{picture.dtx} \batchinput{protecteddef.dtx} \batchinput{refcount.dtx} \batchinput{resizegather.dtx} \batchinput{rotchiffre.dtx} \batchinput{scrindex.dtx} -\batchinput{selinput.dtx} \batchinput{setouterhbox.dtx} \batchinput{settobox.dtx} \batchinput{soulutf8.dtx} diff --git a/macros/latex/contrib/oberdiek/oberdiek.pdf b/macros/latex/contrib/oberdiek/oberdiek.pdf index d497116d51..c664986df5 100644 Binary files a/macros/latex/contrib/oberdiek/oberdiek.pdf and b/macros/latex/contrib/oberdiek/oberdiek.pdf differ diff --git a/macros/latex/contrib/oberdiek/oberdiek.tex b/macros/latex/contrib/oberdiek/oberdiek.tex index 2597af8c6f..676c3ab28c 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.tex +++ b/macros/latex/contrib/oberdiek/oberdiek.tex @@ -10,7 +10,7 @@ \newcommand*{\Author}{Heiko Oberdiek} \newcommand*{\Email}{ho-tex at tug.org} -\newcommand*{\Date}{2019/12/05} +\newcommand*{\Date}{2019/12/09} % Copyright (C) 2006-2016 by % Heiko Oberdiek @@ -176,22 +176,14 @@ \begin{overview} \entry{aliascnt}{Alias counters}% [\entrysep] -\entry{alphalph}{Convert numbers to letters}% -[\entrysep] -\entry{askinclude}{Interactive asking of included files}% -[\entrysep] \entry{atveryend}{Hooks at the very end of document}% [\entrysep] \entry{auxhook}{Hooks for auxiliary files}% [\entrysep] \entry{bigintcalc}{Expandable calculations on big integers}% [\entrysep] -\entry{bitset}{Handle bit-vector datatype}% -[\entrysep] \entry{bmpsize}{Extract size/resolution from bitmap files}% [\entrysep] -\entry{catchfile}{Catch the contents of a file}% -[\entrysep] \entry{centernot}{Centers the not symbol horizontally}% [\entrysep] \entry{chemarr}{Arrows for chemical reactions}% @@ -244,8 +236,6 @@ [\entrysep] \entry{kvsetkeys}{Key value parser}% [\entrysep] -\entry{listingsutf8}{Allow UTF-8 in listings input}% -[\entrysep] \entry{ltxcmds}{\hologo{LaTeX} kernel commands for general use}% [\entrysep] \entry{pagegrid}{Print page grid in background}% @@ -262,12 +252,8 @@ [\entrysep] \entry{pdfcrypt}{Allows the setting of PDF encryption}% [\entrysep] -\entry{pdfescape}{Implements \hologo{pdfTeX}'s escape features}% -[\entrysep] \entry{pdfrender}{Access to some PDF graphics parameters}% [\entrysep] -\entry{picture}{Dimens for picture macros}% -[\entrysep] \entry{protecteddef}{Define protected commands}% [\entrysep] \entry{refcount}{Data extraction from label references}% @@ -314,24 +300,6 @@ share the same counter register and clear list. \end{abstract} \tocinclude{aliascnt} -\newpage -\subsection{\pkgsectformat{alphalph}} -\label{alphalph} -\begin{abstract} -The package provides methods to represent numbers with a limited -set of symbols. Both \hologo{LaTeX} and \hologo{plainTeX} are supported. -\end{abstract} -\tocinclude{alphalph} - -\newpage -\subsection{\pkgsectformat{askinclude}} -\label{askinclude} -\begin{abstract} -This package replaces \cs{includeonly} by an interactive user -interface. -\end{abstract} -\tocinclude{askinclude} - \newpage \subsection{\pkgsectformat{auxhook}} \label{auxhook} @@ -350,16 +318,6 @@ with big integers that can exceed \TeX's number limits. \end{abstract} \tocinclude{bigintcalc} -\newpage -\subsection{\pkgsectformat{bitset}} -\label{bitset} -\begin{abstract} -This package defines and implements the data type bit set, -a vector of bits. The size of the vector may grow dynamically. -Individual bits can be manipulated. -\end{abstract} -\tocinclude{bitset} - \newpage \subsection{\pkgsectformat{bmpsize}} \label{bmpsize} @@ -373,15 +331,6 @@ options \xoption{viewport}, \xoption{trim} and \xoption{clip}. \end{abstract} \tocinclude{bmpsize} -\newpage -\subsection{\pkgsectformat{catchfile}} -\label{catchfile} -\begin{abstract} -This package catches the contents of a file and puts it in a macro. -It requires \eTeX. Both \LaTeX\ and \plainTeX\ are supported. -\end{abstract} -\tocinclude{catchfile} - \newpage \subsection{\pkgsectformat{centernot}} \label{centernot} @@ -649,18 +598,6 @@ only one level of curly braces is removed from the values. \end{abstract} \tocinclude{kvsetkeys} -\newpage -\subsection{\pkgsectformat{listingsutf8}} -\label{listingsutf8} -\begin{abstract} -Package \xpackage{listings} does not support files with multi-byte -encodings such as UTF-8. In case of \cs{lstinputlisting} a simple -workaround is possible if an one-byte encoding exists that the file -can be converted to. Also \eTeX\ and \pdfTeX\ regardless of its mode -are required. -\end{abstract} -\tocinclude{listingsutf8} - \newpage \subsection{\pkgsectformat{ltxcmds}} \label{ltxcmds} @@ -738,16 +675,6 @@ for \VTeX\ and some older versions of \pdfTeX. \end{abstract} \tocinclude{pdfcrypt} -\newpage -\subsection{\pkgsectformat{pdfescape}} -\label{pdfescape} -\begin{abstract} -This package implements \pdfTeX's escape features -(\cs{pdfescapehex}, \cs{pdfunescapehex}, \cs{pdfescapename}, -\cs{pdfescapestring}) using \TeX\ or \eTeX. -\end{abstract} -\tocinclude{pdfescape} - \newpage \subsection{\pkgsectformat{pdfrender}} \label{pdfrender} @@ -759,17 +686,6 @@ provides an interface for setting these parameters. \tocinclude{pdfrender} -\newpage -\subsection{\pkgsectformat{picture}} -\label{picture} -\begin{abstract} -There are macro and environment arguments that expect numbers -that will internally be multiplicated with \cs{unitlength}. -This package extends the syntax of these arguments that -dimens with calculation support can be added for these arguments. -\end{abstract} -\tocinclude{picture} - \newpage \subsection{\pkgsectformat{protecteddef}} \label{protecteddef} @@ -828,15 +744,6 @@ is supported. Index preambles can be given either by means of package \end{abstract} \tocinclude{scrindex} -\newpage -\subsection{\pkgsectformat{selinput}} -\label{selinput} -\begin{abstract} -This package selects the input encoding by specifying between -input characters and their glyph names. -\end{abstract} -\tocinclude{selinput} - \newpage \subsection{\pkgsectformat{setouterhbox}} \label{setouterhbox} diff --git a/macros/latex/contrib/oberdiek/pagegrid.pdf b/macros/latex/contrib/oberdiek/pagegrid.pdf index df8217c5f5..cf9f9072ec 100644 Binary files a/macros/latex/contrib/oberdiek/pagegrid.pdf and b/macros/latex/contrib/oberdiek/pagegrid.pdf differ diff --git a/macros/latex/contrib/oberdiek/pagesel.pdf b/macros/latex/contrib/oberdiek/pagesel.pdf index f1b6ff3f2b..a8ad281ae5 100644 Binary files a/macros/latex/contrib/oberdiek/pagesel.pdf and b/macros/latex/contrib/oberdiek/pagesel.pdf differ diff --git a/macros/latex/contrib/oberdiek/pdfcol.pdf b/macros/latex/contrib/oberdiek/pdfcol.pdf index b06d916ed8..758cccf4c2 100644 Binary files a/macros/latex/contrib/oberdiek/pdfcol.pdf and b/macros/latex/contrib/oberdiek/pdfcol.pdf differ diff --git a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf index d436446f13..c9c70c032c 100644 Binary files a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf and b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf differ diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf index f009b264e1..c93a4f537f 100644 Binary files a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf and b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf differ diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf index d011accb92..acc877258f 100644 Binary files a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf and b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf differ diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.pdf b/macros/latex/contrib/oberdiek/pdfcrypt.pdf index f1a7bda7d7..922be507ea 100644 Binary files a/macros/latex/contrib/oberdiek/pdfcrypt.pdf and b/macros/latex/contrib/oberdiek/pdfcrypt.pdf differ diff --git a/macros/latex/contrib/oberdiek/pdfescape.dtx b/macros/latex/contrib/oberdiek/pdfescape.dtx deleted file mode 100644 index b405d7f7e1..0000000000 --- a/macros/latex/contrib/oberdiek/pdfescape.dtx +++ /dev/null @@ -1,1533 +0,0 @@ -% \iffalse meta-comment -% -% File: pdfescape.dtx -% Version: 2016/05/16 v1.14 -% Info: Implements pdfTeX's escape features -% -% Copyright (C) -% 2007, 2010, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% The Base Interpreter refers to any `TeX-Format', -% because some files are installed in TDS:tex/generic//. -% -% This work consists of the main source file pdfescape.dtx -% and the derived files -% pdfescape.sty, pdfescape.pdf, pdfescape.ins, pdfescape.drv, -% pdfescape-test1.tex, pdfescape-test2.tex, -% pdfescape-test3.tex, pdfescape-test4.tex, -% pdfescape-test5.tex, pdfescape-test6.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/pdfescape.dtx -% CTAN:macros/latex/contrib/oberdiek/pdfescape.pdf -% -% Unpacking: -% (a) If pdfescape.ins is present: -% tex pdfescape.ins -% (b) Without pdfescape.ins: -% tex pdfescape.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{pdfescape.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If pdfescape.drv is present: -% latex pdfescape.drv -% (b) Without pdfescape.drv: -% latex pdfescape.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex pdfescape.dtx -% makeindex -s gind.ist pdfescape.idx -% pdflatex pdfescape.dtx -% makeindex -s gind.ist pdfescape.idx -% pdflatex pdfescape.dtx -% -% Installation: -% TDS:tex/generic/oberdiek/pdfescape.sty -% TDS:doc/latex/oberdiek/pdfescape.pdf -% TDS:source/latex/oberdiek/pdfescape.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: pdfescape -Version: 2016/05/16 v1.14 - -Copyright (C) - 2007, 2010, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -The Base Interpreter refers to any `TeX-Format', -because some files are installed in TDS:tex/generic//. - -This work consists of the main source file pdfescape.dtx -and the derived files - pdfescape.sty, pdfescape.pdf, pdfescape.ins, pdfescape.drv, - pdfescape-test1.tex, pdfescape-test2.tex, - pdfescape-test3.tex, pdfescape-test4.tex, - pdfescape-test5.tex, pdfescape-test6.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{pdfescape.ins}{\from{pdfescape.dtx}{install}}% - \file{pdfescape.drv}{\from{pdfescape.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% - \file{pdfescape.sty}{\from{pdfescape.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{pdfescape-test1.tex}{\from{pdfescape.dtx}{test1}}% -% \file{pdfescape-test2.tex}{\from{pdfescape.dtx}{test2}}% -% \file{pdfescape-test3.tex}{\from{pdfescape.dtx}{test3}}% -% \file{pdfescape-test4.tex}{\from{pdfescape.dtx}{test4}}% -% \file{pdfescape-test5.tex}{\from{pdfescape.dtx}{test5}}% -% \file{pdfescape-test6.tex}{\from{pdfescape.dtx}{test6}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* pdfescape.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `pdfescape.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{pdfescape.drv}% - [2016/05/16 v1.14 Implements pdfTeX's escape features (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{pdfescape.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{pdfescape.drv} -% -% \title{The \xpackage{pdfescape} package} -% \date{2016/05/16 v1.14} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% This package implements \pdfTeX's escape features -% (\cs{pdfescapehex}, \cs{pdfunescapehex}, \cs{pdfescapename}, -% \cs{pdfescapestring}) using \TeX\ or \eTeX. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% \begin{declcs}{EdefEscapeHex} \M{cmd} \M{string}\\ -% \cs{EdefUnescapeHex} \M{cmd} \M{string}\\ -% \cs{EdefEscapeName} \M{cmd} \M{string}\\ -% \cs{EdefEscapeString} \M{cmd} \M{string} -% \end{declcs} -% These commands converts \meta{string} and stores the result -% in macro \meta{cmd}. The conversion result is the same -% as the conversion of the corresponding \pdfTeX's primitives. -% Note that the argument \meta{string} is expanded before -% the conversion. -% -% For example, if \pdfTeX\ \textgreater= 1.30 is present, -% then \cs{EdefEscapeHex} -% becomes to: -% \begin{quote} -%\begin{verbatim} -%\def\EdefEscapeHex#1#2{% -% \edef#1{\pdfescapehex{#2}}% -%} -%\end{verbatim} -% \end{quote} -% The package provides implementations for the case that \pdfTeX\ is -% not present (or too old). Even \eTeX\ can be missing, however it is -% used if it is detected. -% -% \paragraph{Babel.} -% The input strings may contain shorthand characters of package -% \xpackage{babel}. -% -% \subsection{Additional unescape macros} -% -% \begin{declcs}{EdefUnescapeName} \M{cmd} \M{string} -% \end{declcs} -% Sequences of a hash sign with two hexadecimal digits are -% converted to the corresponding character (PDF-1.2). -% A hash sign that is not followed by two hexadecimal digits -% is left unchanged. The catcodes in the result string follow -% TeX's conventions. The space has catcode 10 (space) and -% the other characters have catcode 12 (other). -% -% \begin{declcs}{EdefUnescapeString} \M{cmd} \M{string} -% \end{declcs} -% Macro \meta{cmd} stores the unescaped string in \meta{string}. -% All the rules for literal strings are implemented, see -% PDF specification. -% The catcodes in the result string follow TeX's conventions. -% -% \subsection{Sanitizing macro} -% -% \begin{declcs}{EdefSanitize} \M{cmd} \M{string} -% \end{declcs} -% Argument \meta{string} is expanded, converted to a string -% of tokens with catcode 12 (other) and space tokens, and -% stored in macro \meta{cmd}. -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{Reload check and package identification} -% Reload check, especially if the package is not used with \LaTeX. -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode58=12 % : - \catcode64=11 % @ - \catcode123=1 % { - \catcode125=2 % } - \expandafter\let\expandafter\x\csname ver@pdfescape.sty\endcsname - \ifx\x\relax % plain-TeX, first loading - \else - \def\empty{}% - \ifx\x\empty % LaTeX, first loading, - % variable is initialized, but \ProvidesPackage not yet seen - \else - \expandafter\ifx\csname PackageInfo\endcsname\relax - \def\x#1#2{% - \immediate\write-1{Package #1 Info: #2.}% - }% - \else - \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% - \fi - \x{pdfescape}{The package is already loaded}% - \aftergroup\endinput - \fi - \fi -\endgroup% -% \end{macrocode} -% Package identification: -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode35=6 % # - \catcode39=12 % ' - \catcode40=12 % ( - \catcode41=12 % ) - \catcode44=12 % , - \catcode45=12 % - - \catcode46=12 % . - \catcode47=12 % / - \catcode58=12 % : - \catcode64=11 % @ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode123=1 % { - \catcode125=2 % } - \expandafter\ifx\csname ProvidesPackage\endcsname\relax - \def\x#1#2#3[#4]{\endgroup - \immediate\write-1{Package: #3 #4}% - \xdef#1{#4}% - }% - \else - \def\x#1#2[#3]{\endgroup - #2[{#3}]% - \ifx#1\@undefined - \xdef#1{#3}% - \fi - \ifx#1\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@pdfescape.sty\endcsname -\ProvidesPackage{pdfescape}% - [2016/05/16 v1.14 Implements pdfTeX's escape features (HO)]% -% \end{macrocode} -% -% \subsection{Catcodes} -% -% \begin{macrocode} -\begingroup\catcode61\catcode48\catcode32=10\relax% - \catcode13=5 % ^^M - \endlinechar=13 % - \catcode123 1 % { - \catcode125 2 % } - \catcode64 11 % - \def\x{\endgroup - \expandafter\edef\csname PE@AtEnd\endcsname{% - \endlinechar=\the\endlinechar\relax - \catcode13=\the\catcode13\relax - \catcode32=\the\catcode32\relax - \catcode35=\the\catcode35\relax - \catcode61=\the\catcode61\relax - \catcode64=\the\catcode64\relax - \catcode123=\the\catcode123\relax - \catcode125=\the\catcode125\relax - }% - }% -\x\catcode61\catcode48\catcode32=10\relax% -\catcode13=5 % ^^M -\endlinechar=13 % -\catcode35=6 % # -\catcode64=11 % @ -\catcode123=1 % { -\catcode125=2 % } -\def\TMP@EnsureCode#1#2#3{% - \edef\PE@AtEnd{% - \PE@AtEnd - #1#2=\the#1#2\relax - }% - #1#2=#3\relax -} -\TMP@EnsureCode\catcode{0}{12}% ^^@ -\TMP@EnsureCode\catcode{34}{12}% " -\TMP@EnsureCode\catcode{36}{3}% $ -\TMP@EnsureCode\catcode{38}{4}% & -\TMP@EnsureCode\catcode{39}{12}% ' -\TMP@EnsureCode\catcode{42}{12}% * -\TMP@EnsureCode\catcode{45}{12}% - -\TMP@EnsureCode\catcode{46}{12}% . -\TMP@EnsureCode\catcode{47}{12}% / -\TMP@EnsureCode\catcode{60}{12}% < -\TMP@EnsureCode\catcode{62}{12}% > -\TMP@EnsureCode\catcode{91}{12}% [ -\TMP@EnsureCode\catcode{93}{12}% ] -\TMP@EnsureCode\catcode{94}{7}% ^ -\TMP@EnsureCode\catcode{96}{12}% ` -\TMP@EnsureCode\uccode{34}{0}% " -\TMP@EnsureCode\uccode{48}{0}% 0 -\TMP@EnsureCode\uccode{61}{0}% = -\edef\PE@AtEnd{\PE@AtEnd\noexpand\endinput} -% \end{macrocode} -% -% \subsection{Load package} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \def\TMP@RequirePackage#1[#2]{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname ver@#1.sty\endcsname\relax - \input #1.sty\relax - \fi - }% - \TMP@RequirePackage{ltxcmds}[2010/04/08]% -\else - \RequirePackage{ltxcmds}[2010/04/08]% -\fi -% \end{macrocode} -% -% \subsection{Sanitizing} -% -% \begin{macro}{\EdefSanitize} -% Macro \cs{EdefSanitize} takes |#2|, entirely converts -% it to token with catcode 12 (other) and stores the -% result in macro |#1|. -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname detokenize\endcsname\relax - \long\def\EdefSanitize#1#2{% - \begingroup - \csname @safe@activestrue\endcsname - \edef#1{#2}% - \PE@onelevel@sanitize#1% - \expandafter\endgroup - \expandafter\def\expandafter#1\expandafter{#1}% - }% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname @onelevel@sanitize\endcsname\relax - \def\PE@onelevel@sanitize#1{% - \edef#1{\expandafter\PE@strip@prefix\meaning#1}% - }% - \def\PE@strip@prefix#1>{}% - \else - \let\PE@onelevel@sanitize\@onelevel@sanitize - \fi -\else - \long\def\EdefSanitize#1#2{% - \begingroup - \csname @safe@activestrue\endcsname - \edef#1{#2}% - \expandafter\endgroup - \expandafter\def\expandafter#1\expandafter{% - \detokenize\expandafter{#1}% - }% - }% - \def\PE@onelevel@sanitize#1{% - \edef#1{\detokenize\expandafter{#1}}% - }% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@sanitize} -% Macro \cs{PE@sanitize} is only defined for -% compatibility with version 1.4. Its use is deprecated. -% \begin{macrocode} -\let\PE@sanitize\EdefSanitize -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Space characters} -% -% \begin{macro}{\PE@space@other} -% \begin{macrocode} -\begingroup - \catcode`\ =12\relax% -\def\x{\endgroup\def\PE@space@other{ }}\x\relax -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@space@space} -% \begin{macrocode} -\def\PE@space@space{ } -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Space normalization} -% -% \begin{macro}{\PE@SanitizeSpaceOther} -% \begin{macrocode} -\def\PE@SanitizeSpaceOther#1{% - \edef#1{\expandafter\PE@SpaceToOther#1 \relax}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PE@SpaceToOther} -% \begin{macrocode} -\def\PE@SpaceToOther#1 #2\relax{% - #1% - \ifx\\#2\\% - \else - \PE@space@other - \ltx@ReturnAfterFi{% - \PE@SpaceToOther#2\relax - }% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{\cs{EdefUnescapeName}} -% -% \begin{macro}{\EdefUnescapeName} -% \begin{macrocode} -\def\EdefUnescapeName#1#2{% - \EdefSanitize#1{#2}% - \PE@SanitizeSpaceOther#1% - \PE@UnescapeName#1% - \PE@onelevel@sanitize#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PE@UnescapeName} -% \begin{macrocode} -\begingroup - \catcode`\$=6 % hash - \catcode`\#=12 % other - \gdef\PE@UnescapeName$1{% - \begingroup - \PE@InitUccodeHexDigit - \def\PE@result{}% - \expandafter\PE@DeName$1#\relax\relax - \expandafter\endgroup - \expandafter\def\expandafter$1\expandafter{\PE@result}% - }% - \gdef\PE@DeName$1#$2$3{% - \ifx\relax$2% - \edef\PE@result{\PE@result$1}% - \let\PE@next\relax - \else - \ifx\relax$3% - % wrong escape sequence in input - \edef\PE@result{\PE@result$1#}% - \let\PE@next\relax - \else - \uppercase{% - \def\PE@testA{$2}% - \def\PE@testB{$3}% - }% - \ifcase\ifcase\expandafter\PE@TestUcHexDigit\PE@testA - \ifcase\expandafter\PE@TestUcHexDigit\PE@testB - \ltx@zero - \else - \ltx@one - \fi - \else - \ltx@one - \fi - \uccode\ltx@zero="\PE@testA\PE@testB\relax - \uppercase{% - \def\PE@temp{^^@}% - }% - \uccode\ltx@zero=\ltx@zero - \edef\PE@result{\PE@result$1\PE@temp}% - \let\PE@next\PE@DeName - \else - % wrong escape sequence in input - \edef\PE@result{\PE@result$1#}% - \def\PE@next{\PE@DeName$2$3}% - \fi - \fi - \fi - \PE@next - }% -\endgroup -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PE@InitUccodeHexDigit} -% \begin{macrocode} -\def\PE@InitUccodeHexDigit{% - \uccode`a=`A\relax - \uccode`b=`B\relax - \uccode`c=`C\relax - \uccode`d=`D\relax - \uccode`e=`E\relax - \uccode`f=`F\relax - \uccode`A=\ltx@zero - \uccode`B=\ltx@zero - \uccode`C=\ltx@zero - \uccode`D=\ltx@zero - \uccode`E=\ltx@zero - \uccode`F=\ltx@zero - \uccode`0=\ltx@zero - \uccode`1=\ltx@zero - \uccode`2=\ltx@zero - \uccode`3=\ltx@zero - \uccode`4=\ltx@zero - \uccode`5=\ltx@zero - \uccode`6=\ltx@zero - \uccode`7=\ltx@zero - \uccode`8=\ltx@zero - \uccode`9=\ltx@zero -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PE@TestUcHexDigit} -% \begin{macrocode} -\def\PE@TestUcHexDigit#1{% - \ifnum`#1<48 % 0 - \ltx@one - \else - \ifnum`#1>70 % F - \ltx@one - \else - \ifnum`#1>57 % 9 - \ifnum`#1<65 % A - \ltx@one - \else - \ltx@zero - \fi - \else - \ltx@zero - \fi - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{\cs{EdefUnescapeString}} -% -% \begin{macro}{\EdefUnescapeString} -% \begin{macrocode} -\def\EdefUnescapeString#1#2{% - \EdefSanitize#1{#2}% - \PE@SanitizeSpaceOther#1% - \PE@NormalizeLineEnd#1% - \PE@UnescapeString#1% - \PE@onelevel@sanitize#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\begingroup - \uccode`\8=10 % lf - \uccode`\9=13 % cr -\def\x#1#2{\endgroup -% \end{macrocode} -% \begin{macro}{\PE@NormalizeLineEnd} -% \begin{macrocode} - \def\PE@NormalizeLineEnd##1{% - \def\PE@result{}% - \expandafter\PE@@NormalizeLineEnd##1#2\relax - \let##1\PE@result - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@@NormalizeLineEnd} -% \begin{macrocode} - \def\PE@@NormalizeLineEnd##1#2##2{% - \ifx\relax##2% - \edef\PE@result{\PE@result##1}% - \let\PE@next\relax - \else - \edef\PE@result{\PE@result##1#1}% - \ifx#1##2% lf - \let\PE@next\PE@@NormalizeLineEnd - \else - \def\PE@next{\PE@@NormalizeLineEnd##2}% - \fi - \fi - \PE@next - }% -}% -\uppercase{% - \x 89% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\begingroup - \catcode`\|=0 % - \catcode`\\=12 % -% \end{macrocode} -% \begin{macro}{\PE@UnescapeString} -% \begin{macrocode} - |gdef|PE@UnescapeString#1{% - |begingroup - |def|PE@result{}% - |expandafter|PE@DeString#1\|relax - |expandafter|endgroup - |expandafter|def|expandafter#1|expandafter{|PE@result}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@DeString} -% \begin{macrocode} - |gdef|PE@DeString#1\#2{% - |ifx|relax#2% - |edef|PE@result{|PE@result#1}% - |let|PE@next|relax - |else - |if n#2% - |uccode|ltx@zero=10 % - |else|if r#2% - |uccode|ltx@zero=13 % - |else|if t#2% - |uccode|ltx@zero=9 % - |else|if b#2% - |uccode|ltx@zero=8 % - |else|if f#2% - |uccode|ltx@zero=12 % - |else - |uccode|ltx@zero=|ltx@zero - |fi|fi|fi|fi|fi - |ifnum|uccode|ltx@zero>|ltx@zero - |uppercase{% - |edef|PE@temp{^^@}% - }% - |edef|PE@result{|PE@result#1|PE@temp}% - |let|PE@next|PE@DeString - |else - |if\#2% backslash - |edef|PE@result{|PE@result#1}% - |let|PE@next|PE@CheckEndBackslash - |else - |ifnum`#2=10 % linefeed - |edef|PE@result{|PE@result#1}% - |let|PE@next|PE@DeString - |else - |ifcase|PE@TestOctDigit#2% - |edef|PE@result{|PE@result#1}% - |def|PE@next{|PE@OctI#2}% - |else - |edef|PE@result{|PE@result#1#2}% - |let|PE@next|PE@DeString - |fi - |fi - |fi - |fi - |fi - |PE@next - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@CheckEndBackslash} -% \begin{macrocode} - |gdef|PE@CheckEndBackslash#1{% - |ifx|relax#1% - |else - |edef|PE@result{|PE@result\}% - |expandafter|PE@DeString|expandafter#1% - |fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -|endgroup -% \end{macrocode} -% \begin{macro}{\PE@TestOctDigit} -% \begin{macrocode} -\def\PE@TestOctDigit#1{% - \ifnum`#1<48 % 0 - \ltx@one - \else - \ifnum`#1>55 % 7 - \ltx@one - \else - \ltx@zero - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@OctI} -% \begin{macrocode} -\def\PE@OctI#1#2{% - \ifcase\PE@TestOctDigit#2% - \def\PE@next{\PE@OctII{#1#2}}% - \else - \def\PE@next{\PE@OctAll#1#2}% - \fi - \PE@next -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@OctII} -% \begin{macrocode} -\def\PE@OctII#1#2{% - \ifcase\PE@TestOctDigit#2% - \def\PE@next{\PE@OctIII#1#2}% - \else - \def\PE@next{\PE@OctAll{#1}#2}% - \fi - \PE@next -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\ltx@IfUndefined{numexpr}{% - \catcode`\$=9 % - \catcode`\&=14 % -}{% - \catcode`\$=14 % - \catcode`\&=9 % -} -% \end{macrocode} -% \begin{macro}{\PE@OctIII} -% \begin{macrocode} -\def\PE@OctIII#1#2#3{% - \ifnum#1<4 % - \def\PE@next{\PE@OctAll{#1#2#3}}% - \else -$ \count\ltx@cclv#1 % -$ \advance\count\ltx@cclv -4 % - \edef\PE@next{% - \noexpand\PE@OctAll{% -$ \the\count\ltx@cclv -& \the\numexpr#1-4\relax - #2#3% - }% - }% - \fi - \PE@next -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@OctAll} -% \begin{macrocode} -\def\PE@OctAll#1{% - \uccode\ltx@zero='#1\relax - \uppercase{% - \edef\PE@result{\PE@result^^@}% - }% - \PE@DeString -} -% \end{macrocode} -% \end{macro} -% -% \subsection{User macros (\pdfTeX\space analogues)} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname RequirePackage\endcsname\relax - \def\TMP@RequirePackage#1[#2]{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname ver@#1.sty\endcsname\relax - \input #1.sty\relax - \fi - }% - \TMP@RequirePackage{pdftexcmds}[2007/11/11]% -\else - \RequirePackage{pdftexcmds}[2007/11/11]% -\fi -% \end{macrocode} -% -% \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname pdf@escapehex\endcsname\relax -% \end{macrocode} -% -% \begin{macro}{\EdefEscapeHex} -% \begin{macrocode} - \long\def\EdefEscapeHex#1#2{% - \EdefSanitize#1{#2}% - \PE@SanitizeSpaceOther#1% - \PE@EscapeHex#1% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EdefUnescapeHex} -% \begin{macrocode} - \def\EdefUnescapeHex#1#2{% - \EdefSanitize#1{#2}% - \PE@UnescapeHex#1% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EdefEscapeName} -% \begin{macrocode} - \long\def\EdefEscapeName#1#2{% - \EdefSanitize#1{#2}% - \PE@SanitizeSpaceOther#1% - \PE@EscapeName#1% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EdefEscapeString} -% \begin{macrocode} - \long\def\EdefEscapeString#1#2{% - \EdefSanitize#1{#2}% - \PE@SanitizeSpaceOther#1% - \PE@EscapeString#1% - }% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\else -% \end{macrocode} -% -% \begin{macro}{\PE@edefbabel} -% Help macro that adds support for \xpackage{babel}'s shorthand -% characters. -% \begin{macrocode} - \long\def\PE@edefbabel#1#2#3{% - \begingroup - \csname @save@activestrue\endcsname - \edef#1{#2{#3}}% - \expandafter\endgroup - \expandafter\def\expandafter#1\expandafter{#1}% - }% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EdefEscapeHex} -% \begin{macrocode} - \long\def\EdefEscapeHex#1#2{% - \PE@edefbabel#1\pdf@escapehex{#2}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EdefUnescapeHex} -% \begin{macrocode} - \def\EdefUnescapeHex#1#2{% - \PE@edefbabel#1\pdf@unescapehex{#2}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EdefEscapeName} -% \begin{macrocode} - \long\def\EdefEscapeName#1#2{% - \PE@edefbabel#1\pdf@escapename{#2}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EdefEscapeString} -% \begin{macrocode} - \long\def\EdefEscapeString#1#2{% - \PE@edefbabel#1\pdf@escapestring{#2}% - }% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} - \expandafter\PE@AtEnd -\fi% -% \end{macrocode} -% -% \subsection{Help macros} -% -% \subsubsection{Characters} -% -% Special characters with catcode 12 (other) are created and -% stored in macros. -% \begin{macro}{\PE@hash} -% \begin{macrocode} -\edef\PE@hash{\string#} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@backslash} -% \begin{macrocode} -\begingroup - \escapechar=-1 % -\edef\x{\endgroup - \def\noexpand\PE@backslash{\string\\}% -} -\x -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Switch for \eTeX} -% -% \begin{macrocode} -\ltx@newif\ifPE@etex -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname numexpr\endcsname\relax -\else - \PE@etextrue -\fi -% \end{macrocode} -% -% \subsection{Conversions} -% -% \subsubsection{Conversion to hex string} -% -% \begin{macro}{\PE@EscapeHex} -% \begin{macrocode} -\ifPE@etex - \def\PE@EscapeHex#1{% - \edef#1{\expandafter\PE@ToHex#1\relax}% - }% -\else - \def\PE@EscapeHex#1{% - \def\PE@result{}% - \expandafter\PE@ToHex#1\relax - \let#1\PE@result - }% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@ToHex} -% \begin{macrocode} -\def\PE@ToHex#1{% - \ifx\relax#1% - \else - \PE@HexChar{#1}% - \expandafter\PE@ToHex - \fi -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@HexChar} -% \begin{macrocode} -\ifPE@etex - \def\PE@HexChar#1{% - \PE@HexDigit{\numexpr\dimexpr.0625\dimexpr`#1sp\relax\relax\relax}% - \PE@HexDigit{% - \numexpr`#1-16*\dimexpr.0625\dimexpr`#1sp\relax\relax\relax - }% - }% -\else - \def\PE@HexChar#1{% - \dimen0=`#1sp% - \dimen2=.0625\dimen0 % - \advance\dimen0-16\dimen2 % - \edef\PE@result{% - \PE@result - \PE@HexDigit{\dimen2 }% - \PE@HexDigit{\dimen0 }% - }% - }% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@HexDigit} -% \begin{macrocode} -\def\PE@HexDigit#1{% - \expandafter\string - \ifcase#1% - 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or - A\or B\or C\or D\or E\or F% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Character code to octal number} -% -% \begin{macro}{\PE@OctChar} -% \begin{macrocode} -\ifPE@etex - \def\PE@OctChar#1{% - \expandafter\PE@@OctChar - \the\numexpr\dimexpr.015625\dimexpr`#1sp\relax\relax - \expandafter\relax - \expandafter\relax - \the\numexpr\dimexpr.125\dimexpr`#1sp\relax\relax\relax - \relax - #1% - }% - \def\PE@@OctChar#1\relax#2\relax#3{% - \PE@backslash - #1% - \the\numexpr#2-8*#1\relax - \the\numexpr\dimexpr`#3sp\relax-8*#2\relax - }% -\else - \def\PE@OctChar#1{% - \dimen0=`#1sp% - \dimen2=.125\dimen0 % - \dimen4=.125\dimen2 % - \advance\dimen0-8\dimen2 % - \advance\dimen2-8\dimen4 % - \edef\PE@result{% - \PE@result - \PE@backslash - \number\dimen4 % - \number\dimen2 % - \number\dimen0 % - }% - }% -\fi -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Unpack hex string} -% -% \begin{macro}{\PE@UnescapeHex} -% \begin{macrocode} -\def\PE@UnescapeHex#1{% - \begingroup - \PE@InitUccodeHexDigit - \def\PE@result{}% - \expandafter\PE@DeHex#1\relax\relax - \expandafter\endgroup - \expandafter\def\expandafter#1\expandafter{\PE@result}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@DeHex} -% \begin{macrocode} -\def\PE@DeHex#1#2{% - \ifx#2\relax - \ifx#1\relax - \let\PE@next\relax - \else - \uppercase{% - \def\PE@testA{#1}% - }% - \ifcase\expandafter\PE@TestUcHexDigit\PE@testA - \def\PE@next{% - \PE@DeHex#10\relax\relax - }% - \else - \let\PE@next\relax - \fi - \fi - \else - \uppercase{% - \def\PE@testA{#1}% - \def\PE@testB{#2}% - }% - \ifcase\expandafter\PE@TestUcHexDigit\PE@testA - \ifcase\expandafter\PE@TestUcHexDigit\PE@testB - \uccode\ltx@zero="\PE@testA\PE@testB\relax - \ifnum\uccode\ltx@zero=32 % - \let\PE@temp\PE@space@space - \else - \uppercase{% - \def\PE@temp{^^@}% - }% - \fi - \edef\PE@result{\PE@result\PE@temp}% - \let\PE@next\PE@DeHex - \else - % invalid input sequence - \def\PE@next{% - \PE@DeHex#1% - }% - \fi - \else - % invalid input sequence - \def\PE@next{\PE@DeHex#2}% - \fi - \fi - \PE@next -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Conversion to PDF name} -% -% \begin{macro}{\PE@EscapeName} -% \begin{macrocode} -\ifPE@etex - \def\PE@EscapeName#1{% - \edef#1{\expandafter\PE@EscapeNameTokens#1\relax}% - }% -\else - \def\PE@EscapeName#1{% - \def\PE@result{}% - \expandafter\PE@EscapeNameTokens#1\relax - \let#1\PE@result - }% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@EscapeNameTokens} -% \begin{macrocode} -\def\PE@EscapeNameTokens#1{% - \ifx\relax#1% - \else - \ifnum`#1<33 % - \ifcase`#1 % - % drop illegal zero - \else - \PE@EscapeNameAdd\PE@hash - \PE@HexChar#1% - \fi - \else - \ifnum`#1>126 % - \PE@EscapeNameAdd\PE@hash - \PE@HexChar#1% - \else \ifnum`#1=35 \PE@EscapeNameHashChar 23% # - \else\ifnum`#1=37 \PE@EscapeNameHashChar 25% % - \else\ifnum`#1=40 \PE@EscapeNameHashChar 28% ( - \else\ifnum`#1=41 \PE@EscapeNameHashChar 29% ) - \else\ifnum`#1=47 \PE@EscapeNameHashChar 2F% / - \else\ifnum`#1=60 \PE@EscapeNameHashChar 3C% < - \else\ifnum`#1=62 \PE@EscapeNameHashChar 3E% > - \else\ifnum`#1=91 \PE@EscapeNameHashChar 5B% [ - \else\ifnum`#1=93 \PE@EscapeNameHashChar 5D% ] - \else\ifnum`#1=123 \PE@EscapeNameHashChar 7B% { - \else\ifnum`#1=125 \PE@EscapeNameHashChar 7D% } - \else - \PE@EscapeNameAdd{#1}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi - \fi - \expandafter\PE@EscapeNameTokens - \fi -}% -\def\PE@EscapeNameHashChar#1#2{% - \PE@EscapeNameAdd{\PE@hash\string#1\string#2}% -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@EscapeNameAdd} -% \begin{macrocode} -\ifPE@etex - \def\PE@EscapeNameAdd#1{#1}% -\else - \def\PE@EscapeNameAdd#1{% - \edef\PE@result{% - \PE@result - #1% - }% - }% -\fi -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Conversion to PDF string} -% -% \begin{macro}{\PE@EscapeString} -% \begin{macrocode} -\ifPE@etex - \def\PE@EscapeString#1{% - \edef#1{\expandafter\PE@EscapeStringTokens#1\relax}% - }% -\else - \def\PE@EscapeString#1{% - \begingroup - \def\PE@result{}% - \expandafter\PE@EscapeStringTokens#1\relax - \expandafter\endgroup - \expandafter\def\expandafter#1\expandafter{\PE@result}% - }% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@EscapeStringTokens} -% \begin{macrocode} -\def\PE@EscapeStringTokens#1{% - \ifx\relax#1% - \else - \ifnum`#1<33 % - \PE@OctChar#1% - \else - \ifnum`#1>126 % - \PE@OctChar#1% - \else \ifnum`#1=40 \PE@EscapeStringAdd{\string\(}% ( - \else\ifnum`#1=41 \PE@EscapeStringAdd{\string\)}% ) - \else\ifnum`#1=92 \PE@EscapeStringAdd{\string\\}% \ - \else - \PE@EscapeStringAdd{#1}% - \fi\fi\fi - \fi - \fi - \expandafter\PE@EscapeStringTokens - \fi -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\PE@EscapeStringAdd} -% \begin{macrocode} -\ifPE@etex - \def\PE@EscapeStringAdd#1{#1}% -\else - \def\PE@EscapeStringAdd#1{% - \edef\PE@result{% - \PE@result - #1% - }% - }% -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\PE@AtEnd% -% \end{macrocode} -% -% \begin{macrocode} -% -% \end{macrocode} -%% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{pdfescape}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/pdfescape.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/pdfescape.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex pdfescape.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% pdfescape.sty & tex/generic/oberdiek/pdfescape.sty\\ -% pdfescape.pdf & doc/latex/oberdiek/pdfescape.pdf\\ -% pdfescape.dtx & source/latex/oberdiek/pdfescape.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{pdfescape.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex pdfescape.dtx -%makeindex -s gind.ist pdfescape.idx -%pdflatex pdfescape.dtx -%makeindex -s gind.ist pdfescape.idx -%pdflatex pdfescape.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{History} -% \begin{Version}{2007/02/21 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2007/02/25 v1.1} -% \item -% Test files added. -% \item -% \cs{EdefUnescapeHex} supports lowercase letters. -% \item -% Fix: \verb|\EdefEscapeName{^^@}| -% \item -% Fix: \verb|\EdefEscapeName{\string#}| -% \item -% Fix for \cs{EdefUnescapeHex} in case of incomplete hex string. -% \item -% Fix: \cs{EdefUnescapeHex} generates space tokens with catcode -% 10 (space) in all cases. -% \item -% Fix: \cs{EdefEscapeHex} and \cs{EdefEscapeName} now generate -% tokens with catcode 12 (other) only. -% \end{Version} -% \begin{Version}{2007/03/20 v1.2} -% \item -% Fix: Wrong year in \cs{ProvidesPackage}. -% \end{Version} -% \begin{Version}{2007/04/11 v1.3} -% \item -% Line ends sanitized. -% \end{Version} -% \begin{Version}{2007/04/21 v1.4} -% \item -% \cs{EdefUnescapeName} and \cs{EdefUnescapeString} added. -% \end{Version} -% \begin{Version}{2007/08/27 v1.5} -% \item -% \cs{EdefSanitize} added (replaces \cs{PE@sanitize}). -% \end{Version} -% \begin{Version}{2007/09/09 v1.6} -% \item -% Fix in catcode setup. -% \end{Version} -% \begin{Version}{2007/10/27 v1.7} -% \item -% More efficient \cs{EdefSanitize}. -% \end{Version} -% \begin{Version}{2007/11/11 v1.8} -% \item -% Use of package \xpackage{pdftexcmds} for \hologo{LuaTeX} support. -% \end{Version} -% \begin{Version}{2010/03/01 v1.9} -% \item -% Compatibility with \hologo{iniTeX}. -% \end{Version} -% \begin{Version}{2010/11/12 v1.10} -% \item -% Use of package \xpackage{ltxcmds}. -% \item -% Fix for compatibility with \hologo{iniTeX}. -% \end{Version} -% \begin{Version}{2011/01/30 v1.11} -% \item -% Already loaded package files are not input in \hologo{plainTeX}. -% \end{Version} -% \begin{Version}{2011/04/04 v1.12} -% \item -% Further fixes for compatibility for \hologo{iniTeX}. -% \item -% Test file for \hologo{iniTeX} added. -% \end{Version} -% \begin{Version}{2011/11/25 v1.13} -% \item -% Higher order bit of octal sequences in \cs{EdefUnescapeString} -% ignored according to the PDF specification -% (Bug found by Bruno Le Floch). -% \end{Version} -% \begin{Version}{2016/05/16 v1.14} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/pdfrender.pdf b/macros/latex/contrib/oberdiek/pdfrender.pdf index 7dbd6c2540..1f121b5bcc 100644 Binary files a/macros/latex/contrib/oberdiek/pdfrender.pdf and b/macros/latex/contrib/oberdiek/pdfrender.pdf differ diff --git a/macros/latex/contrib/oberdiek/picture.dtx b/macros/latex/contrib/oberdiek/picture.dtx deleted file mode 100644 index ba4121a603..0000000000 --- a/macros/latex/contrib/oberdiek/picture.dtx +++ /dev/null @@ -1,768 +0,0 @@ -% \iffalse meta-comment -% -% File: picture.dtx -% Version: 2016/05/16 v1.4 -% Info: Dimens for picture macros -% -% Copyright (C) -% 2006-2009 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% This work consists of the main source file picture.dtx -% and the derived files -% picture.sty, picture.pdf, picture.ins, picture.drv, -% picture-example.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/picture.dtx -% CTAN:macros/latex/contrib/oberdiek/picture.pdf -% -% Unpacking: -% (a) If picture.ins is present: -% tex picture.ins -% (b) Without picture.ins: -% tex picture.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{picture.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If picture.drv is present: -% latex picture.drv -% (b) Without picture.drv: -% latex picture.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex picture.dtx -% makeindex -s gind.ist picture.idx -% pdflatex picture.dtx -% makeindex -s gind.ist picture.idx -% pdflatex picture.dtx -% -% Installation: -% TDS:tex/latex/oberdiek/picture.sty -% TDS:doc/latex/oberdiek/picture.pdf -% TDS:doc/latex/oberdiek/picture-example.tex -% TDS:source/latex/oberdiek/picture.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: picture 2016/05/16 v1.4 Dimens for picture macros (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: picture -Version: 2016/05/16 v1.4 - -Copyright (C) - 2006-2009 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -This work consists of the main source file picture.dtx -and the derived files - picture.sty, picture.pdf, picture.ins, picture.drv, - picture-example.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{picture.ins}{\from{picture.dtx}{install}}% - \file{picture.drv}{\from{picture.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% - \file{picture.sty}{\from{picture.dtx}{package}}% - \usedir{doc/latex/oberdiek}% - \file{picture-example.tex}{\from{picture.dtx}{example}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* picture.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `picture.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{picture.drv}% - [2016/05/16 v1.4 Dimens for picture macros (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{picture.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{picture.drv} -% -% \title{The \xpackage{picture} package} -% \date{2016/05/16 v1.4} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% There are macro and environment arguments that expect numbers -% that will internally be multiplicated with \cs{unitlength}. -% This package extends the syntax of these arguments that -% dimens with calculation support can be added for these arguments. -% \end{abstract} -% -% \tableofcontents -% -% \section{User interface} -% -% \subsection{Introduction} -% -% The environment |picture| and macros such as \cs{put}, \cs{line}, -% \cs{vector} and other macros have arguments that expect numbers -% that are used as factor for \cs{unitlength}. -% This package redefines such macros and adds code that detects -% whether such an argument is given as number or as length. -% In the latter case, the length is used directly without multiplying -% with \cs{unitlength}. -% -% \subsection{Options} -% -% Depending on the available features, also length expressions -% can be given. Option \xoption{calc} loads package \xpackage{calc}. -% Then expressions of these package may be used. -% Otherwise \xoption{etex} wraps the length argument inside -% \cs{dimexpr}\dots\cs{relax}, if \eTeX\ is available. Otherwise -% option \xoption{plain} uses plain assignments without calculation -% support. -% -% The default is \xoption{calc} if package \xpackage{calc} -% is loaded before package \xoption{picture}. If you specify -% option \xoption{calc} the loading of \xpackage{calc} is ensured. -% Otherwise package \xpackage{picture} looks whether \cs{dimexpr} -% is available and uses then option \xoption{etex} as default. -% If \eTeX\ also could not be found, then \xoption{plain} is used. -% -% \subsection{Example} -% -% \begin{macrocode} -%<*example> -\documentclass{article} - -\usepackage[calc]{picture} - -\begin{document} - -\setlength{\unitlength}{1pt} - -\begin{picture}(\widthof{Hello World}, 10mm) - \put(0, 0){\makebox(0,0)[lb]{Hello World}}% - \put(0, \heightof{Hello World} + \fboxsep){% - \line(1, 0){\widthof{Hello World}}% - }% - \put(\widthof{Hello World}, 10mm){% - \line(0, -1){10mm}% - }% -\end{picture} - -\end{document} -% -% \end{macrocode} -% -% \subsection{Supported packages} -% -% Packages \xpackage{pspicture} and \xpackage{pict2e} are supported, -% but they must be loaded before package \xpackage{picture}. -% -% New macros can be supported by \cs{picture@redefine}. -% The first argument is the macro which contains the arguments -% in its parameter text that you want to support by package \xpackage{picture}. -% The second argument contains the parameter text. Change \# to \& for -% the arguments in question. -% Examples (already used by package \xpackage{picture}): -% \begin{quote} -% |\picture@redefine\put{(&1,&2)}|\\ -% |\picture@redefine\line{(#1,#2)&3}| -% \end{quote} -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \subsection{Identification} -% -% \begin{macrocode} -%<*package> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{picture}% - [2016/05/16 v1.4 Dimens for picture macros (HO)]% -% \end{macrocode} -% -% \subsection{Options} -% -% \begin{macrocode} -\def\Pc@calcname{calc} -\def\Pc@etexname{etex} -\def\Pc@plainname{plain} -% \end{macrocode} -% \begin{macro}{\Pc@method} -% Macro \cs{Pc@method} stores the method to use for calculations. -% Check which features are available and set the default for \cs{Pc@method}. -% \begin{macrocode} -\@ifpackageloaded{calc}{% - \let\Pc@method\Pc@calcname -}{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname dimexpr\endcsname\relax - \let\Pc@method\Pc@plainname - \else - \let\Pc@method\Pc@etexname - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\DeclareOption{plain}{% - \let\Pc@method\Pc@plainname -} -\DeclareOption{etex}{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname dimexpr\endcsname\relax - \PackageError{picture}{% - e-TeX is not available% - }\@ehc - \else - \let\Pc@method\Pc@etexname - \fi -} -\DeclareOption{calc}{% - \let\Pc@method\Pc@calcname -} -\ProcessOptions* -\begingroup - \let\on@line\@empty - \PackageInfo{picture}{Calculation method: \Pc@method}% -\endgroup -% \end{macrocode} -% -% \subsection{Calculation method} -% -% \begin{macrocode} -\ifx\Pc@method\Pc@calcname - \RequirePackage{calc}% -\fi -% \end{macrocode} -% -% \subsubsection{Method \xoption{calc}} -% -% \begin{macrocode} -\ifx\Pc@method\Pc@calcname - \def\Pc@tokslength#1{% - \begingroup - \let\calc@error\Pc@calc@error - \setlength\dimen@{#1\unitlength}\Pc@next\Pc@nil{#1}% - }% - \let\PcOrg@calc@error\calc@error - \@ifpackagelater{calc}{2007/08/22}{% v4.3 - \def\Pc@calc@error#1{% - \expandafter\ifx\expandafter\unitlength\noexpand#1\relax - \def\calc@next##1!{% - \endgroup - \aftergroup\afterassignment - \aftergroup\Pc@next - }% - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {% - \calc@next{#1}% - }{% - \PcOrg@calc@error{#1}% - }% - }% - }{% - \def\Pc@calc@error#1{% - \expandafter\ifx\expandafter\unitlength\noexpand#1\relax - \def\calc@next##1!{% - \endgroup - \aftergroup\afterassignment - \aftergroup\Pc@next - }% - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {% - \PcOrg@calc@error{#1}% - }% - }% - }% -\fi -% \end{macrocode} -% -% \subsubsection{Method \xoption{etex}} -% -% \begin{macrocode} -\ifx\Pc@method\Pc@etexname - \def\Pc@tokslength#1{% - \begingroup - \afterassignment\Pc@next - \dimen@=\dimexpr#1\unitlength\Pc@nil{#1}% - }% -\fi -% \end{macrocode} -% -% \subsubsection{Method \xoption{plain}} -% -% \begin{macrocode} -\ifx\Pc@method\Pc@plainname - \def\Pc@tokslength#1{% - \begingroup - \afterassignment\Pc@next - \dimen@=#1\unitlength\Pc@nil{#1}% - }% -\fi -% \end{macrocode} -% -% \subsubsection{Help macros} -% -% \begin{macrocode} -\def\Pc@next#1\Pc@nil#2{% - \ifx\\#1\\% - \endgroup - \Pc@addtoks{{#2}}% - \else - \expandafter\endgroup - \expandafter\Pc@addtoks\expandafter{% - \expandafter{\the\dimen@\@gobble}% - }% - \fi -} -% \end{macrocode} -% \begin{macro}{\Pc@nil} -% \cs{Pc@nil} must not have the meaning of \cs{relax} because of -% \cs{dimexpr}. -% \begin{macrocode} -\let\Pc@nil\message -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@addtoks} -% \begin{macrocode} -\def\Pc@addtoks#1{% - \toks@=\expandafter{\the\toks@#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@init} -% \begin{macrocode} -\def\Pc@init#1{% - \begingroup - \toks@={#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@finish} -% \begin{macrocode} -\def\Pc@finish#1{% - \expandafter\endgroup - \expandafter#1\the\toks@ -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Redefinitions} -% -% \begin{macro}{\picture@redefine} -% \begin{tabular}[t]{@{}l@{ }l@{}} -% |#1|:& command name\\ -% |#2|:& parameter text, length parameter with \& instead of \# -% \end{tabular} -% \begin{macrocode} -\def\picture@redefine#1#2{% - \begingroup - \edef\reserved@a{% - \noexpand\noexpand - \expandafter\noexpand - \csname PcOrg@\expandafter\@gobble\string#1\endcsname - }% - \toks0{#1}% - \Pc@first#2&0% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@first} -% \begin{macrocode} -\def\Pc@first#1&{% - \toks1={#1}% - \toks2={\Pc@init{#1}}% - \Pc@scanlength -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@scanlength} -% |#1|: number of length parameter or zero -% \begin{macrocode} -\def\Pc@scanlength#1{% - \ifcase#1 % - \expandafter\Pc@last - \else - \toks1=\expandafter{\the\toks1 ###1}% - \toks2=\expandafter{\the\toks2 \Pc@tokslength{###1}}% - \expandafter\Pc@scannext - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@scannext} -% \begin{macrocode} -\def\Pc@scannext#1&{% - \ifx\\#1\\% - \else - \toks1=\expandafter{\the\toks1 #1}% - \toks2=\expandafter{\the\toks2 \Pc@addtoks{#1}}% - \fi - \Pc@scanlength -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Pc@last} -% \begin{macrocode} -\def\Pc@last{% - \edef\x{% - \endgroup - \let\reserved@a\the\toks0 % - \def\the\toks0 \the\toks1 {% - \the\toks2 % - \noexpand\Pc@finish\reserved@a - }% - }% - \x -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\LaTeX\ base macros} -% -% \begin{macrocode} -\picture@redefine\@picture{(&1,&2)(&3,&4)} -\picture@redefine\put{(&1,&2)} -\picture@redefine\multiput{(&1,&2)} -\picture@redefine\@multiput{(&1,&2)} -\picture@redefine\line{(#1,#2)&3} -\picture@redefine\vector{(#1,#2)&3} -\picture@redefine\dashbox{&1(&2,&3)} -\picture@redefine\@circle{&1} -\picture@redefine\@dot{&1} -\picture@redefine\@bezier{#1(&2,&3)(&4,&5)(&6,&7)} -\picture@redefine\@imakepicbox{(&1,&2)} -% \end{macrocode} -% -% \subsubsection{Package \xpackage{pspicture}} -% -% Package \xpackage{pspicture} changes the signature of \cs{@oval} -% by adding an optional argument. -% \begin{macrocode} -\@ifpackageloaded{pspicture}{% - \picture@redefine\@oval{[&1](&2,&3)}% - \picture@redefine\Line{(&1,&2)}% - \picture@redefine\Curve{(&1,&2)}% - \picture@redefine\Vector{(&1,&2)}% -}{% - \picture@redefine\@oval{(&1,&2)}% -} -% \end{macrocode} -% -% \subsection{Check package loading order} -% -% \begin{macro}{\PC@checkpackage} -% \begin{macrocode} -\def\Pc@checkpackage#1{% - \@ifpackageloaded{#1}{% - }{% - \AtBeginDocument{% - \@ifpackageloaded{#1}{% - \PackageWarningNoLine{picture}{% - Package `#1' is loaded after `picture'.\MessageBreak - Load package `picture' afterwards to get full support% - \MessageBreak - of its additional syntax with length specifications% - }% - }{}% - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\Pc@checkpackage{pict2e} -\Pc@checkpackage{pspicture} -% \end{macrocode} -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{picture}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/picture.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/picture.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex picture.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% picture.sty & tex/latex/oberdiek/picture.sty\\ -% picture.pdf & doc/latex/oberdiek/picture.pdf\\ -% picture-example.tex & doc/latex/oberdiek/picture-example.tex\\ -% picture.dtx & source/latex/oberdiek/picture.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{picture.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex picture.dtx -%makeindex -s gind.ist picture.idx -%pdflatex picture.dtx -%makeindex -s gind.ist picture.idx -%pdflatex picture.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{History} -% \begin{Version}{2006/08/26 v1.0} -% \item -% First released version. (First start of the project was June/July 2002.) -% \end{Version} -% \begin{Version}{2007/04/11 v1.1} -% \item -% Line ends sanitized. -% \end{Version} -% \begin{Version}{2008/11/26 v1.2} -% \item -% Package \xpackage{pict2e} added to documentation section ``Supported -% packages''. -% \item -% Package order of supported packages is checked. -% \end{Version} -% \begin{Version}{2009/10/11 v1.3} -% \item -% Fix because of new version v4.3 of package \xpackage{calc}. -% \end{Version} -% \begin{Version}{2016/05/16 v1.4} -% \item -% Documentation updates. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/protecteddef.pdf b/macros/latex/contrib/oberdiek/protecteddef.pdf index a595477f2c..64cbbdcc0c 100644 Binary files a/macros/latex/contrib/oberdiek/protecteddef.pdf and b/macros/latex/contrib/oberdiek/protecteddef.pdf differ diff --git a/macros/latex/contrib/oberdiek/refcount.pdf b/macros/latex/contrib/oberdiek/refcount.pdf index 3f8b3f4aae..d2e118959e 100644 Binary files a/macros/latex/contrib/oberdiek/refcount.pdf and b/macros/latex/contrib/oberdiek/refcount.pdf differ diff --git a/macros/latex/contrib/oberdiek/resizegather.dtx b/macros/latex/contrib/oberdiek/resizegather.dtx index 596446de2c..4a07864917 100644 --- a/macros/latex/contrib/oberdiek/resizegather.dtx +++ b/macros/latex/contrib/oberdiek/resizegather.dtx @@ -159,7 +159,7 @@ and the derived files [2016/05/16 v1.3 Resize overly large equations (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] -\usepackage{ifluatex} +\usepackage{iftex}[2019/11/07] \ifluatex \else \usepackage[T1]{fontenc}% diff --git a/macros/latex/contrib/oberdiek/resizegather.pdf b/macros/latex/contrib/oberdiek/resizegather.pdf index 3ebed4c784..140e92db20 100644 Binary files a/macros/latex/contrib/oberdiek/resizegather.pdf and b/macros/latex/contrib/oberdiek/resizegather.pdf differ diff --git a/macros/latex/contrib/oberdiek/rotchiffre.pdf b/macros/latex/contrib/oberdiek/rotchiffre.pdf index d80769cadb..6797d5b214 100644 Binary files a/macros/latex/contrib/oberdiek/rotchiffre.pdf and b/macros/latex/contrib/oberdiek/rotchiffre.pdf differ diff --git a/macros/latex/contrib/oberdiek/scrindex.pdf b/macros/latex/contrib/oberdiek/scrindex.pdf index 85f1f5ce4f..b25becaf6e 100644 Binary files a/macros/latex/contrib/oberdiek/scrindex.pdf and b/macros/latex/contrib/oberdiek/scrindex.pdf differ diff --git a/macros/latex/contrib/oberdiek/selinput.dtx b/macros/latex/contrib/oberdiek/selinput.dtx deleted file mode 100644 index 97fc336c3c..0000000000 --- a/macros/latex/contrib/oberdiek/selinput.dtx +++ /dev/null @@ -1,853 +0,0 @@ -% \iffalse meta-comment -% -% File: selinput.dtx -% Version: 2016/05/17 v1.4 -% Info: Semi-automatic input encoding detection -% -% Copyright (C) -% 2007 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% 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. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% This work consists of the main source file selinput.dtx -% and the derived files -% selinput.sty, selinput.pdf, selinput.ins, selinput.drv, -% selinput-test1.tex, selinput-test2.tex, selinput-test3.tex, -% selinput-test4.tex, selinput-test5.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/selinput.dtx -% CTAN:macros/latex/contrib/oberdiek/selinput.pdf -% -% Unpacking: -% (a) If selinput.ins is present: -% tex selinput.ins -% (b) Without selinput.ins: -% tex selinput.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{selinput.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If selinput.drv is present: -% latex selinput.drv -% (b) Without selinput.drv: -% latex selinput.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex selinput.dtx -% makeindex -s gind.ist selinput.idx -% pdflatex selinput.dtx -% makeindex -s gind.ist selinput.idx -% pdflatex selinput.dtx -% -% Installation: -% TDS:tex/latex/oberdiek/selinput.sty -% TDS:doc/latex/oberdiek/selinput.pdf -% TDS:source/latex/oberdiek/selinput.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -% -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: selinput 2016/05/17 v1.4 Semi-automatic input encoding detection (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: selinput -Version: 2016/05/17 v1.4 - -Copyright (C) - 2007 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group - -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. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -This work consists of the main source file selinput.dtx -and the derived files - selinput.sty, selinput.pdf, selinput.ins, selinput.drv, - selinput-test1.tex, selinput-test2.tex, selinput-test3.tex, - selinput-test4.tex, selinput-test5.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{selinput.ins}{\from{selinput.dtx}{install}}% - \file{selinput.drv}{\from{selinput.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% - \file{selinput.sty}{\from{selinput.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{selinput-test1.tex}{\from{selinput.dtx}{test,test1}}% -% \file{selinput-test2.tex}{\from{selinput.dtx}{test,test2}}% -% \file{selinput-test3.tex}{\from{selinput.dtx}{test,test3}}% -% \file{selinput-test4.tex}{\from{selinput.dtx}{test,test4}}% -% \file{selinput-test5.tex}{\from{selinput.dtx}{test,test5}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* file into a directory searched by TeX:} -\Msg{*} -\Msg{* selinput.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `selinput.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -% -%<*ignore> -\fi -% -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{selinput.drv}% - [2016/05/17 v1.4 Semi-automatic input encoding detection (HO)]% -\documentclass{ltxdoc} -\ifx\Umathcode\undefined -\usepackage[T1]{fontenc} -\fi -\usepackage{textcomp} -\usepackage{lmodern} -\usepackage{holtxdoc}[2011/11/22] -\usepackage{color} -\begin{document} - \DocInput{selinput.dtx}% -\end{document} -% -% \fi -% -% -% -% \GetFileInfo{selinput.drv} -% -% \title{The \xpackage{selinput} package} -% \date{2016/05/17 v1.4} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% This package selects the input encoding by specifying between -% input characters and their glyph names. -% \end{abstract} -% -% \tableofcontents -% -% \newcommand*{\EM}{\textcolor{blue}} -% \newcommand*{\ExampleText}{^^A -% Umlauts:\ \EM{\"A\"O\"U\"a\"o\"u\ss}^^A -% } -% -% \section{Documentation} -% -% \subsection{Introduction} -% -% \LaTeX\ supports the direct use of 8-bit characters by means -% of package \xpackage{inputenc}. However you must know -% and specify the encoding, e.g.: -% \begin{quote} -% \ttfamily -% |\documentclass{article}|\\ -% |\usepackage[|\EM{latin1}|]{inputenc}|\\ -% |% or \usepackage[|\EM{utf8}|]{inputenc}|\\ -% |% or \usepackage[|\EM{??}|]{inputenc}|\\ -% |\begin{document}|\\ -% | |\ExampleText\\ -% |\end{document}| -% \end{quote} -% -% If the document is transferred in an environment that -% uses a different encoding, then there are programs that -% convert the input characters. Examples for conversion -% of file \xfile{test.tex} -% from encoding latin1 (ISO-8859-1) to UTF-8: -% \begin{quote} -% \ttfamily -% |recode ISO-8859-1..UTF-8 test.tex|\\ -% |recode latin1..utf8 test.tex|\\ -% |iconv --from-code ISO-8859-1|\\ -% \hphantom{iconv}| --to-code UTF-8|\\ -% \hphantom{iconv}| --output testnew.tex|\\ -% \hphantom{iconv}| test.tex|\\ -% |iconv -f latin1 -t utf8 -o testnew.tex test.tex| -% \end{quote} -% However, the encoding name for package \xpackage{inputenc} -% must be changed: -% \begin{quote} -% |\usepackage[latin1]{inputenc}| $\rightarrow$ -% |\usepackage[utf8]{inputenc}|\kern-4pt\relax -% \end{quote} -% Of course, unless you are using some clever editor -% that knows package \xpackage{inputenc}, recodes -% the file and adjusts the option at the same time. -% But most editors can perhaps recode the file, but -% they let the option untouched. -% -% Therefore package \xpackage{selinput} chooses another way for -% specifying the input encoding. The encoding name is not needed -% at all. Some 8-bit characters are identified by their glyph -% name and the package chooses an appropriate encoding, example: -% \begin{quote} -% \ttfamily -% |\documentclass{article}|\\ -% |\usepackage{selinput}|\\ -% |\SelectInputMappings{|\\ -% | adieresis={|\EM{\"a}|}|,\\ -% | germandbls={|\EM{\ss}|}|,\\ -% | Euro={|\EM{\texteuro}|}|,\\ -% |}|\\ -% |\begin{document}|\\ -% | |\ExampleText\\ -% |\end{document}| -% \end{quote} -% -% \subsection{User interface} -% -% \begin{declcs}{SelectInputEncodingList} \M{encoding list} -% \end{declcs} -% \cs{SelectInputEncodingList} expects a comma separated list of -% encoding names. Example: -% \begin{quote} -% |\SelectInputEncodingList{utf8,ansinew,mac-roman}| -% \end{quote} -% The encodings of package \xpackage{inputenx} are used as default. -% -% \begin{declcs}{SelectInputMappings} \M{mapping pairs} -% \end{declcs} -% A mapping pair consists of a glyph name and its input -% character: -% \begin{quote} -% |\SelectInputMappings{|\\ -% | adieresis={|\EM{\"a}|}|,\\ -% | germandbls={|\EM{\ss}|}|,\\ -% | Euro={|\EM{\texteuro}|}|,\\ -% |}| -% \end{quote} -% The supported glyph names can be found in file \xfile{ix-name.def} -% of project \xpackage{inputenx} \cite{inputenx}. The names are -% basically taken from Adobe's glyphlists \cite{adobe:glyphlist,adobe:aglfn}. -% As many pairs are needed as necessary to identify the encoding. -% Example with insufficient pairs: -% \begin{quote} -% \ttfamily -% |\SelectInputEncodingSet{latin1,latin9}|\\ -% |\SelectInputMappings{|\\ -% | adieresis={|\EM{\"a}|}|,\\ -% | germandbls={|\EM{\ss}|}|,\\ -% |}|\\ -% \ExampleText| and Euro: |\EM{\textcurrency} (wrong) -% \end{quote} -% The first encoding \xoption{latin1} passes the constraints given -% by the mapping pairs. However the Euro symbol is not part of -% the encoding. Thus a mapping pair with the Euro symbol -% solves the problem. In fact the symbol alone already succeeds in selecting -% between \xoption{latin1} and \xoption{latin9}: -% \begin{quote} -% \ttfamily -% |\SelectInputEncodingSet{latin1,latin9}|\\ -% |\SelectInputMappings{|\\ -% | Euro={|\EM{\texteuro}|},|\\ -% |}|\\ -% \ExampleText| and Euro: |\EM{\texteuro} -% \end{quote} -% -% \subsection{Options} -% -% \begin{description} -% \item[\xoption{warning}:] -% The selected encoding is written -% by \cs{PackageInfo} into the \xfile{.log} file only. -% Option \xoption{warning} changes it to \cs{PackageWarning}. -% Then the selected encoding is shown on the terminal as well. -% \item[\xoption{ucs}:] -% The encoding file \xfile{utf8x} of package \cs{ucs} requires -% that the package itself is loaded before. -% If the package is not loaded, then the option \xoption{ucs} -% will load package \xpackage{ucs} if the detected encoding is -% UTF-8 (limited to the preamble, packages cannot be loaded later). -% \item[\xoption{utf8=\dots}:] -% The option allows to specify other encoding files -% for UTF-8 than \LaTeX's \xfile{utf8.def}. For example, -% |utf8=utf-8| will load \xfile{utf-8.def} instead. -% \end{description} -% -% \subsection{Encodings} -% -% Package \xpackage{stringenc} \cite{stringenc} -% is used for testing the encoding. Thus the encoding -% name must be known by this package. Then the found -% encoding is loaded by \cs{inputencoding} by package -% \xpackage{inputenc} or \cs{InputEncoding} if package -% \xpackage{inputenx} is loaded. -% -% The supported encodings are present in the encoding list, -% thus usually the encoding names do not matter. -% If the list is set by \cs{SelectInputEncodingList}, -% then you can use the names that work for package -% \xpackage{inputenc} and are known by package \xpackage{stringenc}, -% for example: \xoption{latin1}, \xoption{x-iso-8859-1}. Encoding -% file names of package \xpackage{inputenx} are prefixed with \xfile{x-}. -% The prefix can be dropped, if package \xpackage{inputenx} is loaded. -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \begin{macrocode} -%<*package> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{selinput} - [2016/05/17 v1.4 Semi-automatic input encoding detection (HO)]% -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{inputenc} -\RequirePackage{kvsetkeys}[2006/10/19] -\RequirePackage{stringenc}[2007/06/16] -\RequirePackage{kvoptions} -% \end{macrocode} -% \begin{macro}{\SelectInputEncodingList} -% \begin{macrocode} -\newcommand*{\SelectInputEncodingList}{% - \let\SIE@EncodingList\@empty - \kvsetkeys{SelInputEnc}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\SelectInputMappings} -% \begin{macrocode} -\newcommand*{\SelectInputMappings}[1]{% - \SIE@LoadNameDefs - \let\SIE@StringUnicode\@empty - \let\SIE@StringDest\@empty - \kvsetkeys{SelInputMap}{#1}% - \ifx\\SIE@StringUnicode\SIE@StringDest\\% - \PackageError{selinput}{% - No mappings specified% - }\@ehc - \else - \EdefUnescapeHex\SIE@StringUnicode\SIE@StringUnicode - \let\SIE@Encoding\@empty - \@for\SIE@EncodingTest:=\SIE@EncodingList\do{% - \ifx\SIE@Encoding\@empty - \StringEncodingConvertTest\SIE@temp\SIE@StringUnicode - {utf16be}\SIE@EncodingTest{% - \ifx\SIE@temp\SIE@StringDest - \let\SIE@Encoding\SIE@EncodingTest - \fi - }{}% - \fi - }% - \ifx\SIE@Encoding\@empty - \StringEncodingConvertTest\SIE@temp\SIE@StringDest - {ascii}{utf16be}{% - \def\SIE@Encoding{ascii}% - \SIE@Info{selinput}{% - Matching encoding not found, but input characters% - \MessageBreak - are 7-bit (possibly editor replacements).% - \MessageBreak - Hence using ascii encoding% - }% - }{}% - \fi - \ifx\SIE@Encoding\@empty - \PackageError{selinput}{% - Cannot find a matching encoding% - }\@ehd - \else - \ifx\SIE@Encoding\SIE@EncodingUTFviii - \SIE@LoadUnicodePackage - \ifx\SIE@UseUTFviii\@empty - \else - \let\SIE@Encoding\SIE@UseUTFviii - \fi - \fi - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname InputEncoding\endcsname\relax - \inputencoding\SIE@Encoding - \else - \InputEncoding\SIE@Encoding - \fi - \SIE@Info{selinput}{Encoding `\SIE@Encoding' selected}% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\SIE@LoadNameDefs} -% \begin{macrocode} -\def\SIE@LoadNameDefs{% - \begingroup - \endlinechar=\m@ne - \catcode92=0 % backslash - \catcode123=1 % left curly brace/beginning of group - \catcode125=2 % right curly brace/end of group - \catcode37=14 % percent/comment character - \@makeother\[% - \@makeother\]% - \@makeother\.% - \@makeother\(% - \@makeother\)% - \@makeother\/% - \@makeother\-% - \let\InputenxName\SelectInputDefineMapping - \InputIfFileExists{ix-name.def}{}{% - \PackageError{selinput}{% - Missing `ix-name.def' (part of package `inputenx')% - }\@ehd - }% - \global\let\SIE@LoadNameDefs\relax - \endgroup -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\SelectInputDefineMapping} -% \begin{macrocode} -\newcommand*{\SelectInputDefineMapping}[1]{% - \expandafter\gdef\csname SIE@@#1\endcsname -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\kv@set@family@handler{SelInputMap}{% - \@onelevel@sanitize\kv@key - \ifx\kv@value\relax - \PackageError{selinput}{% - Missing input character for `\kv@key'% - }\@ehc - \else - \@onelevel@sanitize\kv@value - \ifx\kv@value\@empty - \PackageError{selinput}{% - Input character got lost?\MessageBreak - Missing input character for `\kv@key'% - }\@ehc - \else - \@ifundefined{SIE@@\kv@key}{% - \PackageWarning{selinput}{% - Missing definition for `\kv@key'% - }% - }{% - \edef\SIE@StringDest{% - \SIE@StringDest - \kv@value - }% - \edef\SIE@StringUnicode{% - \SIE@StringUnicode - \csname SIE@@\kv@key\endcsname - }% - }% - \fi - \fi -} -% \end{macrocode} -% \begin{macrocode} -\kv@set@family@handler{SelInputEnc}{% - \@onelevel@sanitize\kv@key - \ifx\kv@value\relax - \ifx\SIE@EncodingList\@empty - \let\SIE@EncodingList\kv@key - \else - \edef\SIE@EncodingList{\SIE@EncodingList,\kv@key}% - \fi - \else - \@onelevel@sanitize\kv@value - \PackageError{selinput}{% - Illegal key value pair (\kv@key=\kv@value)\MessagBreak - in encoding list% - }\@ehc - \fi -} -% \end{macrocode} -% -% \begin{macro}{\SIE@LoadUnicodePackage} -% \begin{macrocode} -\def\SIE@LoadUnicodePackage{% - \@ifpackageloaded\SIE@UnicodePackage{}{% - \RequirePackage\SIE@UnicodePackage\relax - }% - \SIE@PatchUCS - \global\let\SIE@LoadUnicodePackage\relax -} -\let\SIE@show\show -\def\SIE@PatchUCS{% - \AtBeginDocument{% - \expandafter\ifx\csname ver@ucsencs.def\endcsname\relax - \else - \let\show\SIE@show - \fi - }% -} -\SIE@PatchUCS -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\AtBeginDocument{% - \let\SIE@LoadUnicodePackage\relax -} -% \end{macrocode} -% \begin{macro}{\SIE@EncodingUTFviii} -% \begin{macrocode} -\def\SIE@EncodingUTFviii{utf8} -\@onelevel@sanitize\SIE@EncodingUTFviii -% \end{macrocode} -% \end{macro} -% \begin{macro}{\SIE@EncodingUTFviiix} -% \begin{macrocode} -\def\SIE@EncodingUTFviiix{utf8x} -\@onelevel@sanitize\SIE@EncodingUTFviiix -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\let\SIE@UnicodePackage\@empty -\let\SIE@UseUTFviii\@empty -\let\SIE@Info\PackageInfo -% \end{macrocode} -% \begin{macrocode} -\SetupKeyvalOptions{% - family=SelInput,% - prefix=SelInput@% -} -\define@key{SelInput}{utf8}{% - \def\SIE@UseUTFviii{#1}% - \@onelevel@sanitize\SIE@UseUTFviii -} -\DeclareBoolOption{ucs} -\DeclareVoidOption{warning}{% - \let\SIE@Info\PackageWarning -} -\ProcessKeyvalOptions{SelInput} -\ifSelInput@ucs - \def\SIE@UnicodePackage{ucs}% - \ifx\SIE@UseUTFviii\@empty - \let\SIE@UseUTFviii\SIE@EncodingUTFviiix - \fi -\else - \ifx\SIE@UseUTFviii\@empty - \@ifpackageloaded{ucs}{% - \let\SIE@UseUTFviii\SIE@EncodingUTFviiix - }{% - \let\SIE@UseUTFviii\SIE@EncodingUTFviii - }% - \fi -\fi -% \end{macrocode} -% -% \begin{macro}{\SIE@EncodingList} -% \begin{macrocode} -\edef\SIE@EncodingList{% - utf8,% - x-iso-8859-1,% - x-iso-8859-15,% - x-cp1252,% ansinew - x-mac-roman,% - x-iso-8859-2,% - x-iso-8859-3,% - x-iso-8859-4,% - x-iso-8859-5,% - x-iso-8859-6,% - x-iso-8859-7,% - x-iso-8859-8,% - x-iso-8859-9,% - x-iso-8859-10,% - x-iso-8859-11,% - x-iso-8859-13,% - x-iso-8859-14,% - x-iso-8859-15,% - x-mac-centeuro,% - x-mac-cyrillic,% - x-koi8-r,% - x-cp1250,% - x-cp1251,% - x-cp1257,% - x-cp437,% - x-cp850,% - x-cp852,% - x-cp855,% - x-cp858,% - x-cp865,% - x-cp866,% - x-nextstep,% - x-dec-mcs% -}% -\@onelevel@sanitize\SIE@EncodingList -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -%% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{selinput}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/selinput.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/selinput.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex selinput.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% selinput.sty & tex/latex/oberdiek/selinput.sty\\ -% selinput.pdf & doc/latex/oberdiek/selinput.pdf\\ -% selinput.dtx & source/latex/oberdiek/selinput.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \TeX\,Live\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{selinput.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex selinput.dtx -%makeindex -s gind.ist selinput.idx -%pdflatex selinput.dtx -%makeindex -s gind.ist selinput.idx -%pdflatex selinput.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{thebibliography}{9} -% \bibitem{inputenx} -% Heiko Oberdiek: \textit{The \xpackage{inputenx} package}; -% 2007-04-11 v1.1; -% \CTANpkg{inputenx}. -% -% \bibitem{adobe:glyphlist} -% Adobe: \textit{Adobe Glyph List}; -% 2002-09-20 v2.0; -% \url{https://github.com/adobe-type-tools/agl-aglfn/blob/master/glyphlist.txt}. -% -% \bibitem{adobe:aglfn} -% Adobe: \textit{Adobe Glyph List For New Fonts}; -% 2005-11-18 v1.5; -% \url{https://github.com/adobe-type-tools/agl-aglfn/blob/master/aglfn.txt}. -% -% \bibitem{stringenc} -% Heiko Oberdiek: \textit{The \xpackage{stringenc} package}; -% 2007-06-16 v1.1; -% \CTANpkg{stringenc}. -% -% \end{thebibliography} -% -% \begin{History} -% \begin{Version}{2007/06/16 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2007/06/20 v1.1} -% \item -% Requested date for package \xpackage{stringenc} fixed. -% \end{Version} -% \begin{Version}{2007/09/09 v1.2} -% \item -% Line end fixed. -% \end{Version} -% \begin{Version}{2016/05/16 v1.3} -% \item -% Documentation updates. -% \end{Version} -% \begin{Version}{2016/05/17 v1.4} -% \item -% Documentation updates: Avoid T1 encoding with Unicode \TeX. -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput diff --git a/macros/latex/contrib/oberdiek/setouterhbox.pdf b/macros/latex/contrib/oberdiek/setouterhbox.pdf index 12415ccf1c..0470b00a37 100644 Binary files a/macros/latex/contrib/oberdiek/setouterhbox.pdf and b/macros/latex/contrib/oberdiek/setouterhbox.pdf differ diff --git a/macros/latex/contrib/oberdiek/settobox.pdf b/macros/latex/contrib/oberdiek/settobox.pdf index 902aa99eee..117a435aa4 100644 Binary files a/macros/latex/contrib/oberdiek/settobox.pdf and b/macros/latex/contrib/oberdiek/settobox.pdf differ diff --git a/macros/latex/contrib/oberdiek/soulutf8.pdf b/macros/latex/contrib/oberdiek/soulutf8.pdf index 8eda2ea6bd..05b4fef252 100644 Binary files a/macros/latex/contrib/oberdiek/soulutf8.pdf and b/macros/latex/contrib/oberdiek/soulutf8.pdf differ diff --git a/macros/latex/contrib/oberdiek/stackrel.pdf b/macros/latex/contrib/oberdiek/stackrel.pdf index c35d4499d3..88e47f65e6 100644 Binary files a/macros/latex/contrib/oberdiek/stackrel.pdf and b/macros/latex/contrib/oberdiek/stackrel.pdf differ diff --git a/macros/latex/contrib/oberdiek/stampinclude.pdf b/macros/latex/contrib/oberdiek/stampinclude.pdf index 5a657155a0..c3954d3d8e 100644 Binary files a/macros/latex/contrib/oberdiek/stampinclude.pdf and b/macros/latex/contrib/oberdiek/stampinclude.pdf differ diff --git a/macros/latex/contrib/oberdiek/tabularht.pdf b/macros/latex/contrib/oberdiek/tabularht.pdf index 3e22dfc27c..212e19eaea 100644 Binary files a/macros/latex/contrib/oberdiek/tabularht.pdf and b/macros/latex/contrib/oberdiek/tabularht.pdf differ diff --git a/macros/latex/contrib/oberdiek/tabularkv.pdf b/macros/latex/contrib/oberdiek/tabularkv.pdf index a51f2c8af3..99ffc78cd9 100644 Binary files a/macros/latex/contrib/oberdiek/tabularkv.pdf and b/macros/latex/contrib/oberdiek/tabularkv.pdf differ diff --git a/macros/latex/contrib/oberdiek/telprint.pdf b/macros/latex/contrib/oberdiek/telprint.pdf index 02fdbe6584..a603248f11 100644 Binary files a/macros/latex/contrib/oberdiek/telprint.pdf and b/macros/latex/contrib/oberdiek/telprint.pdf differ diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.pdf b/macros/latex/contrib/oberdiek/thepdfnumber.pdf index 328d5b543b..72c69e0657 100644 Binary files a/macros/latex/contrib/oberdiek/thepdfnumber.pdf and b/macros/latex/contrib/oberdiek/thepdfnumber.pdf differ diff --git a/macros/latex/contrib/oberdiek/twoopt.pdf b/macros/latex/contrib/oberdiek/twoopt.pdf index b339767c13..55d9590d35 100644 Binary files a/macros/latex/contrib/oberdiek/twoopt.pdf and b/macros/latex/contrib/oberdiek/twoopt.pdf differ diff --git a/macros/latex/contrib/oberdiek/uniquecounter.pdf b/macros/latex/contrib/oberdiek/uniquecounter.pdf index e8e07a91ca..722768852b 100644 Binary files a/macros/latex/contrib/oberdiek/uniquecounter.pdf and b/macros/latex/contrib/oberdiek/uniquecounter.pdf differ diff --git a/macros/latex/contrib/pdfescape/README.md b/macros/latex/contrib/pdfescape/README.md new file mode 100644 index 0000000000..7d2bbf5562 --- /dev/null +++ b/macros/latex/contrib/pdfescape/README.md @@ -0,0 +1,10 @@ +# pdfescape + +pdfescape package for LaTeX + + + +This package implements \pdfTeX's escape features +(\pdfescapehex, \pdfunescapehex, \pdfescapename, +\pdfescapestring) using TeX or eTeX. + diff --git a/macros/latex/contrib/pdfescape/pdfescape.dtx b/macros/latex/contrib/pdfescape/pdfescape.dtx new file mode 100644 index 0000000000..6666689d95 --- /dev/null +++ b/macros/latex/contrib/pdfescape/pdfescape.dtx @@ -0,0 +1,1530 @@ +% \iffalse meta-comment +% +% File: pdfescape.dtx +% Version: 2019/12/09 v1.15 +% Info: Implements pdfTeX's escape features +% +% Copyright (C) +% 2007, 2010, 2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/pdfescape/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/pdfescape/issues +% +% The Base Interpreter refers to any `TeX-Format', +% because some files are installed in TDS:tex/generic//. +% +% This work consists of the main source file pdfescape.dtx +% and the derived files +% pdfescape.sty, pdfescape.pdf, pdfescape.ins, pdfescape.drv, +% pdfescape-test1.tex, pdfescape-test2.tex, +% pdfescape-test3.tex, pdfescape-test4.tex, +% pdfescape-test5.tex, pdfescape-test6.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/pdfescape/pdfescape.dtx +% CTAN:macros/latex/contrib/pdfescape/pdfescape.pdf +% +% Unpacking: +% (a) If pdfescape.ins is present: +% tex pdfescape.ins +% (b) Without pdfescape.ins: +% tex pdfescape.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{pdfescape.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If pdfescape.drv is present: +% latex pdfescape.drv +% (b) Without pdfescape.drv: +% latex pdfescape.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex pdfescape.dtx +% makeindex -s gind.ist pdfescape.idx +% pdflatex pdfescape.dtx +% makeindex -s gind.ist pdfescape.idx +% pdflatex pdfescape.dtx +% +% Installation: +% TDS:tex/generic/pdfescape/pdfescape.sty +% TDS:doc/latex/pdfescape/pdfescape.pdf +% TDS:source/latex/pdfescape/pdfescape.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: pdfescape +Version: 2019/12/09 v1.15 + +Copyright (C) + 2007, 2010, 2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/pdfescape/issues + + +The Base Interpreter refers to any `TeX-Format', +because some files are installed in TDS:tex/generic//. + +This work consists of the main source file pdfescape.dtx +and the derived files + pdfescape.sty, pdfescape.pdf, pdfescape.ins, pdfescape.drv, + pdfescape-test1.tex, pdfescape-test2.tex, + pdfescape-test3.tex, pdfescape-test4.tex, + pdfescape-test5.tex, pdfescape-test6.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{pdfescape.ins}{\from{pdfescape.dtx}{install}}% + \file{pdfescape.drv}{\from{pdfescape.dtx}{driver}}% + \usedir{tex/generic/pdfescape}% + \file{pdfescape.sty}{\from{pdfescape.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* pdfescape.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `pdfescape.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{pdfescape.drv}% + [2019/12/09 v1.15 Implements pdfTeX's escape features (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{pdfescape.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{pdfescape.drv} +% +% \title{The \xpackage{pdfescape} package} +% \date{2019/12/09 v1.15} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/pdfescape/issues}}} +% +% \maketitle +% +% \begin{abstract} +% This package implements \pdfTeX's escape features +% (\cs{pdfescapehex}, \cs{pdfunescapehex}, \cs{pdfescapename}, +% \cs{pdfescapestring}) using \TeX\ or \eTeX. +% \end{abstract} +% +% \tableofcontents +% +% \section{Documentation} +% +% \begin{declcs}{EdefEscapeHex} \M{cmd} \M{string}\\ +% \cs{EdefUnescapeHex} \M{cmd} \M{string}\\ +% \cs{EdefEscapeName} \M{cmd} \M{string}\\ +% \cs{EdefEscapeString} \M{cmd} \M{string} +% \end{declcs} +% These commands converts \meta{string} and stores the result +% in macro \meta{cmd}. The conversion result is the same +% as the conversion of the corresponding \pdfTeX's primitives. +% Note that the argument \meta{string} is expanded before +% the conversion. +% +% For example, if \pdfTeX\ \textgreater= 1.30 is present, +% then \cs{EdefEscapeHex} +% becomes to: +% \begin{quote} +%\begin{verbatim} +%\def\EdefEscapeHex#1#2{% +% \edef#1{\pdfescapehex{#2}}% +%} +%\end{verbatim} +% \end{quote} +% The package provides implementations for the case that \pdfTeX\ is +% not present (or too old). Even \eTeX\ can be missing, however it is +% used if it is detected. +% +% \paragraph{Babel.} +% The input strings may contain shorthand characters of package +% \xpackage{babel}. +% +% \subsection{Additional unescape macros} +% +% \begin{declcs}{EdefUnescapeName} \M{cmd} \M{string} +% \end{declcs} +% Sequences of a hash sign with two hexadecimal digits are +% converted to the corresponding character (PDF-1.2). +% A hash sign that is not followed by two hexadecimal digits +% is left unchanged. The catcodes in the result string follow +% TeX's conventions. The space has catcode 10 (space) and +% the other characters have catcode 12 (other). +% +% \begin{declcs}{EdefUnescapeString} \M{cmd} \M{string} +% \end{declcs} +% Macro \meta{cmd} stores the unescaped string in \meta{string}. +% All the rules for literal strings are implemented, see +% PDF specification. +% The catcodes in the result string follow TeX's conventions. +% +% \subsection{Sanitizing macro} +% +% \begin{declcs}{EdefSanitize} \M{cmd} \M{string} +% \end{declcs} +% Argument \meta{string} is expanded, converted to a string +% of tokens with catcode 12 (other) and space tokens, and +% stored in macro \meta{cmd}. +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Reload check and package identification} +% Reload check, especially if the package is not used with \LaTeX. +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@pdfescape.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{pdfescape}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +% \end{macrocode} +% Package identification: +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@pdfescape.sty\endcsname +\ProvidesPackage{pdfescape}% + [2019/12/09 v1.15 Implements pdfTeX's escape features (HO)]% +% \end{macrocode} +% +% \subsection{Catcodes} +% +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123 1 % { + \catcode125 2 % } + \catcode64 11 % + \def\x{\endgroup + \expandafter\edef\csname PE@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2#3{% + \edef\PE@AtEnd{% + \PE@AtEnd + #1#2=\the#1#2\relax + }% + #1#2=#3\relax +} +\TMP@EnsureCode\catcode{0}{12}% ^^@ +\TMP@EnsureCode\catcode{34}{12}% " +\TMP@EnsureCode\catcode{36}{3}% $ +\TMP@EnsureCode\catcode{38}{4}% & +\TMP@EnsureCode\catcode{39}{12}% ' +\TMP@EnsureCode\catcode{42}{12}% * +\TMP@EnsureCode\catcode{45}{12}% - +\TMP@EnsureCode\catcode{46}{12}% . +\TMP@EnsureCode\catcode{47}{12}% / +\TMP@EnsureCode\catcode{60}{12}% < +\TMP@EnsureCode\catcode{62}{12}% > +\TMP@EnsureCode\catcode{91}{12}% [ +\TMP@EnsureCode\catcode{93}{12}% ] +\TMP@EnsureCode\catcode{94}{7}% ^ +\TMP@EnsureCode\catcode{96}{12}% ` +\TMP@EnsureCode\uccode{34}{0}% " +\TMP@EnsureCode\uccode{48}{0}% 0 +\TMP@EnsureCode\uccode{61}{0}% = +\edef\PE@AtEnd{\PE@AtEnd\noexpand\endinput} +% \end{macrocode} +% +% \subsection{Load package} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \def\TMP@RequirePackage#1[#2]{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname ver@#1.sty\endcsname\relax + \input #1.sty\relax + \fi + }% + \TMP@RequirePackage{ltxcmds}[2010/04/08]% +\else + \RequirePackage{ltxcmds}[2010/04/08]% +\fi +% \end{macrocode} +% +% \subsection{Sanitizing} +% +% \begin{macro}{\EdefSanitize} +% Macro \cs{EdefSanitize} takes |#2|, entirely converts +% it to token with catcode 12 (other) and stores the +% result in macro |#1|. +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname detokenize\endcsname\relax + \long\def\EdefSanitize#1#2{% + \begingroup + \csname @safe@activestrue\endcsname + \edef#1{#2}% + \PE@onelevel@sanitize#1% + \expandafter\endgroup + \expandafter\def\expandafter#1\expandafter{#1}% + }% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname @onelevel@sanitize\endcsname\relax + \def\PE@onelevel@sanitize#1{% + \edef#1{\expandafter\PE@strip@prefix\meaning#1}% + }% + \def\PE@strip@prefix#1>{}% + \else + \let\PE@onelevel@sanitize\@onelevel@sanitize + \fi +\else + \long\def\EdefSanitize#1#2{% + \begingroup + \csname @safe@activestrue\endcsname + \edef#1{#2}% + \expandafter\endgroup + \expandafter\def\expandafter#1\expandafter{% + \detokenize\expandafter{#1}% + }% + }% + \def\PE@onelevel@sanitize#1{% + \edef#1{\detokenize\expandafter{#1}}% + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@sanitize} +% Macro \cs{PE@sanitize} is only defined for +% compatibility with version 1.4. Its use is deprecated. +% \begin{macrocode} +\let\PE@sanitize\EdefSanitize +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Space characters} +% +% \begin{macro}{\PE@space@other} +% \begin{macrocode} +\begingroup + \catcode`\ =12\relax% +\def\x{\endgroup\def\PE@space@other{ }}\x\relax +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@space@space} +% \begin{macrocode} +\def\PE@space@space{ } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Space normalization} +% +% \begin{macro}{\PE@SanitizeSpaceOther} +% \begin{macrocode} +\def\PE@SanitizeSpaceOther#1{% + \edef#1{\expandafter\PE@SpaceToOther#1 \relax}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PE@SpaceToOther} +% \begin{macrocode} +\def\PE@SpaceToOther#1 #2\relax{% + #1% + \ifx\\#2\\% + \else + \PE@space@other + \ltx@ReturnAfterFi{% + \PE@SpaceToOther#2\relax + }% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{\cs{EdefUnescapeName}} +% +% \begin{macro}{\EdefUnescapeName} +% \begin{macrocode} +\def\EdefUnescapeName#1#2{% + \EdefSanitize#1{#2}% + \PE@SanitizeSpaceOther#1% + \PE@UnescapeName#1% + \PE@onelevel@sanitize#1% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PE@UnescapeName} +% \begin{macrocode} +\begingroup + \catcode`\$=6 % hash + \catcode`\#=12 % other + \gdef\PE@UnescapeName$1{% + \begingroup + \PE@InitUccodeHexDigit + \def\PE@result{}% + \expandafter\PE@DeName$1#\relax\relax + \expandafter\endgroup + \expandafter\def\expandafter$1\expandafter{\PE@result}% + }% + \gdef\PE@DeName$1#$2$3{% + \ifx\relax$2% + \edef\PE@result{\PE@result$1}% + \let\PE@next\relax + \else + \ifx\relax$3% + % wrong escape sequence in input + \edef\PE@result{\PE@result$1#}% + \let\PE@next\relax + \else + \uppercase{% + \def\PE@testA{$2}% + \def\PE@testB{$3}% + }% + \ifcase\ifcase\expandafter\PE@TestUcHexDigit\PE@testA + \ifcase\expandafter\PE@TestUcHexDigit\PE@testB + \ltx@zero + \else + \ltx@one + \fi + \else + \ltx@one + \fi + \uccode\ltx@zero="\PE@testA\PE@testB\relax + \uppercase{% + \def\PE@temp{^^@}% + }% + \uccode\ltx@zero=\ltx@zero + \edef\PE@result{\PE@result$1\PE@temp}% + \let\PE@next\PE@DeName + \else + % wrong escape sequence in input + \edef\PE@result{\PE@result$1#}% + \def\PE@next{\PE@DeName$2$3}% + \fi + \fi + \fi + \PE@next + }% +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PE@InitUccodeHexDigit} +% \begin{macrocode} +\def\PE@InitUccodeHexDigit{% + \uccode`a=`A\relax + \uccode`b=`B\relax + \uccode`c=`C\relax + \uccode`d=`D\relax + \uccode`e=`E\relax + \uccode`f=`F\relax + \uccode`A=\ltx@zero + \uccode`B=\ltx@zero + \uccode`C=\ltx@zero + \uccode`D=\ltx@zero + \uccode`E=\ltx@zero + \uccode`F=\ltx@zero + \uccode`0=\ltx@zero + \uccode`1=\ltx@zero + \uccode`2=\ltx@zero + \uccode`3=\ltx@zero + \uccode`4=\ltx@zero + \uccode`5=\ltx@zero + \uccode`6=\ltx@zero + \uccode`7=\ltx@zero + \uccode`8=\ltx@zero + \uccode`9=\ltx@zero +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PE@TestUcHexDigit} +% \begin{macrocode} +\def\PE@TestUcHexDigit#1{% + \ifnum`#1<48 % 0 + \ltx@one + \else + \ifnum`#1>70 % F + \ltx@one + \else + \ifnum`#1>57 % 9 + \ifnum`#1<65 % A + \ltx@one + \else + \ltx@zero + \fi + \else + \ltx@zero + \fi + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{\cs{EdefUnescapeString}} +% +% \begin{macro}{\EdefUnescapeString} +% \begin{macrocode} +\def\EdefUnescapeString#1#2{% + \EdefSanitize#1{#2}% + \PE@SanitizeSpaceOther#1% + \PE@NormalizeLineEnd#1% + \PE@UnescapeString#1% + \PE@onelevel@sanitize#1% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\begingroup + \uccode`\8=10 % lf + \uccode`\9=13 % cr +\def\x#1#2{\endgroup +% \end{macrocode} +% \begin{macro}{\PE@NormalizeLineEnd} +% \begin{macrocode} + \def\PE@NormalizeLineEnd##1{% + \def\PE@result{}% + \expandafter\PE@@NormalizeLineEnd##1#2\relax + \let##1\PE@result + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@@NormalizeLineEnd} +% \begin{macrocode} + \def\PE@@NormalizeLineEnd##1#2##2{% + \ifx\relax##2% + \edef\PE@result{\PE@result##1}% + \let\PE@next\relax + \else + \edef\PE@result{\PE@result##1#1}% + \ifx#1##2% lf + \let\PE@next\PE@@NormalizeLineEnd + \else + \def\PE@next{\PE@@NormalizeLineEnd##2}% + \fi + \fi + \PE@next + }% +}% +\uppercase{% + \x 89% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\begingroup + \catcode`\|=0 % + \catcode`\\=12 % +% \end{macrocode} +% \begin{macro}{\PE@UnescapeString} +% \begin{macrocode} + |gdef|PE@UnescapeString#1{% + |begingroup + |def|PE@result{}% + |expandafter|PE@DeString#1\|relax + |expandafter|endgroup + |expandafter|def|expandafter#1|expandafter{|PE@result}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@DeString} +% \begin{macrocode} + |gdef|PE@DeString#1\#2{% + |ifx|relax#2% + |edef|PE@result{|PE@result#1}% + |let|PE@next|relax + |else + |if n#2% + |uccode|ltx@zero=10 % + |else|if r#2% + |uccode|ltx@zero=13 % + |else|if t#2% + |uccode|ltx@zero=9 % + |else|if b#2% + |uccode|ltx@zero=8 % + |else|if f#2% + |uccode|ltx@zero=12 % + |else + |uccode|ltx@zero=|ltx@zero + |fi|fi|fi|fi|fi + |ifnum|uccode|ltx@zero>|ltx@zero + |uppercase{% + |edef|PE@temp{^^@}% + }% + |edef|PE@result{|PE@result#1|PE@temp}% + |let|PE@next|PE@DeString + |else + |if\#2% backslash + |edef|PE@result{|PE@result#1}% + |let|PE@next|PE@CheckEndBackslash + |else + |ifnum`#2=10 % linefeed + |edef|PE@result{|PE@result#1}% + |let|PE@next|PE@DeString + |else + |ifcase|PE@TestOctDigit#2% + |edef|PE@result{|PE@result#1}% + |def|PE@next{|PE@OctI#2}% + |else + |edef|PE@result{|PE@result#1#2}% + |let|PE@next|PE@DeString + |fi + |fi + |fi + |fi + |fi + |PE@next + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@CheckEndBackslash} +% \begin{macrocode} + |gdef|PE@CheckEndBackslash#1{% + |ifx|relax#1% + |else + |edef|PE@result{|PE@result\}% + |expandafter|PE@DeString|expandafter#1% + |fi + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +|endgroup +% \end{macrocode} +% \begin{macro}{\PE@TestOctDigit} +% \begin{macrocode} +\def\PE@TestOctDigit#1{% + \ifnum`#1<48 % 0 + \ltx@one + \else + \ifnum`#1>55 % 7 + \ltx@one + \else + \ltx@zero + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@OctI} +% \begin{macrocode} +\def\PE@OctI#1#2{% + \ifcase\PE@TestOctDigit#2% + \def\PE@next{\PE@OctII{#1#2}}% + \else + \def\PE@next{\PE@OctAll#1#2}% + \fi + \PE@next +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@OctII} +% \begin{macrocode} +\def\PE@OctII#1#2{% + \ifcase\PE@TestOctDigit#2% + \def\PE@next{\PE@OctIII#1#2}% + \else + \def\PE@next{\PE@OctAll{#1}#2}% + \fi + \PE@next +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\ltx@IfUndefined{numexpr}{% + \catcode`\$=9 % + \catcode`\&=14 % +}{% + \catcode`\$=14 % + \catcode`\&=9 % +} +% \end{macrocode} +% \begin{macro}{\PE@OctIII} +% \begin{macrocode} +\def\PE@OctIII#1#2#3{% + \ifnum#1<4 % + \def\PE@next{\PE@OctAll{#1#2#3}}% + \else +$ \count\ltx@cclv#1 % +$ \advance\count\ltx@cclv -4 % + \edef\PE@next{% + \noexpand\PE@OctAll{% +$ \the\count\ltx@cclv +& \the\numexpr#1-4\relax + #2#3% + }% + }% + \fi + \PE@next +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@OctAll} +% \begin{macrocode} +\def\PE@OctAll#1{% + \uccode\ltx@zero='#1\relax + \uppercase{% + \edef\PE@result{\PE@result^^@}% + }% + \PE@DeString +} +% \end{macrocode} +% \end{macro} +% +% \subsection{User macros (\pdfTeX\space analogues)} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \def\TMP@RequirePackage#1[#2]{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname ver@#1.sty\endcsname\relax + \input #1.sty\relax + \fi + }% + \TMP@RequirePackage{pdftexcmds}[2007/11/11]% +\else + \RequirePackage{pdftexcmds}[2007/11/11]% +\fi +% \end{macrocode} +% +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname pdf@escapehex\endcsname\relax +% \end{macrocode} +% +% \begin{macro}{\EdefEscapeHex} +% \begin{macrocode} + \long\def\EdefEscapeHex#1#2{% + \EdefSanitize#1{#2}% + \PE@SanitizeSpaceOther#1% + \PE@EscapeHex#1% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EdefUnescapeHex} +% \begin{macrocode} + \def\EdefUnescapeHex#1#2{% + \EdefSanitize#1{#2}% + \PE@UnescapeHex#1% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EdefEscapeName} +% \begin{macrocode} + \long\def\EdefEscapeName#1#2{% + \EdefSanitize#1{#2}% + \PE@SanitizeSpaceOther#1% + \PE@EscapeName#1% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EdefEscapeString} +% \begin{macrocode} + \long\def\EdefEscapeString#1#2{% + \EdefSanitize#1{#2}% + \PE@SanitizeSpaceOther#1% + \PE@EscapeString#1% + }% +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\else +% \end{macrocode} +% +% \begin{macro}{\PE@edefbabel} +% Help macro that adds support for \xpackage{babel}'s shorthand +% characters. +% \begin{macrocode} + \long\def\PE@edefbabel#1#2#3{% + \begingroup + \csname @save@activestrue\endcsname + \edef#1{#2{#3}}% + \expandafter\endgroup + \expandafter\def\expandafter#1\expandafter{#1}% + }% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EdefEscapeHex} +% \begin{macrocode} + \long\def\EdefEscapeHex#1#2{% + \PE@edefbabel#1\pdf@escapehex{#2}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EdefUnescapeHex} +% \begin{macrocode} + \def\EdefUnescapeHex#1#2{% + \PE@edefbabel#1\pdf@unescapehex{#2}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EdefEscapeName} +% \begin{macrocode} + \long\def\EdefEscapeName#1#2{% + \PE@edefbabel#1\pdf@escapename{#2}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EdefEscapeString} +% \begin{macrocode} + \long\def\EdefEscapeString#1#2{% + \PE@edefbabel#1\pdf@escapestring{#2}% + }% +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} + \expandafter\PE@AtEnd +\fi% +% \end{macrocode} +% +% \subsection{Help macros} +% +% \subsubsection{Characters} +% +% Special characters with catcode 12 (other) are created and +% stored in macros. +% \begin{macro}{\PE@hash} +% \begin{macrocode} +\edef\PE@hash{\string#} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@backslash} +% \begin{macrocode} +\begingroup + \escapechar=-1 % +\edef\x{\endgroup + \def\noexpand\PE@backslash{\string\\}% +} +\x +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Switch for \eTeX} +% +% \begin{macrocode} +\ltx@newif\ifPE@etex +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname numexpr\endcsname\relax +\else + \PE@etextrue +\fi +% \end{macrocode} +% +% \subsection{Conversions} +% +% \subsubsection{Conversion to hex string} +% +% \begin{macro}{\PE@EscapeHex} +% \begin{macrocode} +\ifPE@etex + \def\PE@EscapeHex#1{% + \edef#1{\expandafter\PE@ToHex#1\relax}% + }% +\else + \def\PE@EscapeHex#1{% + \def\PE@result{}% + \expandafter\PE@ToHex#1\relax + \let#1\PE@result + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@ToHex} +% \begin{macrocode} +\def\PE@ToHex#1{% + \ifx\relax#1% + \else + \PE@HexChar{#1}% + \expandafter\PE@ToHex + \fi +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@HexChar} +% \begin{macrocode} +\ifPE@etex + \def\PE@HexChar#1{% + \PE@HexDigit{\numexpr\dimexpr.0625\dimexpr`#1sp\relax\relax\relax}% + \PE@HexDigit{% + \numexpr`#1-16*\dimexpr.0625\dimexpr`#1sp\relax\relax\relax + }% + }% +\else + \def\PE@HexChar#1{% + \dimen0=`#1sp% + \dimen2=.0625\dimen0 % + \advance\dimen0-16\dimen2 % + \edef\PE@result{% + \PE@result + \PE@HexDigit{\dimen2 }% + \PE@HexDigit{\dimen0 }% + }% + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@HexDigit} +% \begin{macrocode} +\def\PE@HexDigit#1{% + \expandafter\string + \ifcase#1% + 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or + A\or B\or C\or D\or E\or F% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Character code to octal number} +% +% \begin{macro}{\PE@OctChar} +% \begin{macrocode} +\ifPE@etex + \def\PE@OctChar#1{% + \expandafter\PE@@OctChar + \the\numexpr\dimexpr.015625\dimexpr`#1sp\relax\relax + \expandafter\relax + \expandafter\relax + \the\numexpr\dimexpr.125\dimexpr`#1sp\relax\relax\relax + \relax + #1% + }% + \def\PE@@OctChar#1\relax#2\relax#3{% + \PE@backslash + #1% + \the\numexpr#2-8*#1\relax + \the\numexpr\dimexpr`#3sp\relax-8*#2\relax + }% +\else + \def\PE@OctChar#1{% + \dimen0=`#1sp% + \dimen2=.125\dimen0 % + \dimen4=.125\dimen2 % + \advance\dimen0-8\dimen2 % + \advance\dimen2-8\dimen4 % + \edef\PE@result{% + \PE@result + \PE@backslash + \number\dimen4 % + \number\dimen2 % + \number\dimen0 % + }% + }% +\fi +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Unpack hex string} +% +% \begin{macro}{\PE@UnescapeHex} +% \begin{macrocode} +\def\PE@UnescapeHex#1{% + \begingroup + \PE@InitUccodeHexDigit + \def\PE@result{}% + \expandafter\PE@DeHex#1\relax\relax + \expandafter\endgroup + \expandafter\def\expandafter#1\expandafter{\PE@result}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@DeHex} +% \begin{macrocode} +\def\PE@DeHex#1#2{% + \ifx#2\relax + \ifx#1\relax + \let\PE@next\relax + \else + \uppercase{% + \def\PE@testA{#1}% + }% + \ifcase\expandafter\PE@TestUcHexDigit\PE@testA + \def\PE@next{% + \PE@DeHex#10\relax\relax + }% + \else + \let\PE@next\relax + \fi + \fi + \else + \uppercase{% + \def\PE@testA{#1}% + \def\PE@testB{#2}% + }% + \ifcase\expandafter\PE@TestUcHexDigit\PE@testA + \ifcase\expandafter\PE@TestUcHexDigit\PE@testB + \uccode\ltx@zero="\PE@testA\PE@testB\relax + \ifnum\uccode\ltx@zero=32 % + \let\PE@temp\PE@space@space + \else + \uppercase{% + \def\PE@temp{^^@}% + }% + \fi + \edef\PE@result{\PE@result\PE@temp}% + \let\PE@next\PE@DeHex + \else + % invalid input sequence + \def\PE@next{% + \PE@DeHex#1% + }% + \fi + \else + % invalid input sequence + \def\PE@next{\PE@DeHex#2}% + \fi + \fi + \PE@next +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Conversion to PDF name} +% +% \begin{macro}{\PE@EscapeName} +% \begin{macrocode} +\ifPE@etex + \def\PE@EscapeName#1{% + \edef#1{\expandafter\PE@EscapeNameTokens#1\relax}% + }% +\else + \def\PE@EscapeName#1{% + \def\PE@result{}% + \expandafter\PE@EscapeNameTokens#1\relax + \let#1\PE@result + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@EscapeNameTokens} +% \begin{macrocode} +\def\PE@EscapeNameTokens#1{% + \ifx\relax#1% + \else + \ifnum`#1<33 % + \ifcase`#1 % + % drop illegal zero + \else + \PE@EscapeNameAdd\PE@hash + \PE@HexChar#1% + \fi + \else + \ifnum`#1>126 % + \PE@EscapeNameAdd\PE@hash + \PE@HexChar#1% + \else \ifnum`#1=35 \PE@EscapeNameHashChar 23% # + \else\ifnum`#1=37 \PE@EscapeNameHashChar 25% % + \else\ifnum`#1=40 \PE@EscapeNameHashChar 28% ( + \else\ifnum`#1=41 \PE@EscapeNameHashChar 29% ) + \else\ifnum`#1=47 \PE@EscapeNameHashChar 2F% / + \else\ifnum`#1=60 \PE@EscapeNameHashChar 3C% < + \else\ifnum`#1=62 \PE@EscapeNameHashChar 3E% > + \else\ifnum`#1=91 \PE@EscapeNameHashChar 5B% [ + \else\ifnum`#1=93 \PE@EscapeNameHashChar 5D% ] + \else\ifnum`#1=123 \PE@EscapeNameHashChar 7B% { + \else\ifnum`#1=125 \PE@EscapeNameHashChar 7D% } + \else + \PE@EscapeNameAdd{#1}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi + \fi + \expandafter\PE@EscapeNameTokens + \fi +}% +\def\PE@EscapeNameHashChar#1#2{% + \PE@EscapeNameAdd{\PE@hash\string#1\string#2}% +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@EscapeNameAdd} +% \begin{macrocode} +\ifPE@etex + \def\PE@EscapeNameAdd#1{#1}% +\else + \def\PE@EscapeNameAdd#1{% + \edef\PE@result{% + \PE@result + #1% + }% + }% +\fi +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Conversion to PDF string} +% +% \begin{macro}{\PE@EscapeString} +% \begin{macrocode} +\ifPE@etex + \def\PE@EscapeString#1{% + \edef#1{\expandafter\PE@EscapeStringTokens#1\relax}% + }% +\else + \def\PE@EscapeString#1{% + \begingroup + \def\PE@result{}% + \expandafter\PE@EscapeStringTokens#1\relax + \expandafter\endgroup + \expandafter\def\expandafter#1\expandafter{\PE@result}% + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@EscapeStringTokens} +% \begin{macrocode} +\def\PE@EscapeStringTokens#1{% + \ifx\relax#1% + \else + \ifnum`#1<33 % + \PE@OctChar#1% + \else + \ifnum`#1>126 % + \PE@OctChar#1% + \else \ifnum`#1=40 \PE@EscapeStringAdd{\string\(}% ( + \else\ifnum`#1=41 \PE@EscapeStringAdd{\string\)}% ) + \else\ifnum`#1=92 \PE@EscapeStringAdd{\string\\}% \ + \else + \PE@EscapeStringAdd{#1}% + \fi\fi\fi + \fi + \fi + \expandafter\PE@EscapeStringTokens + \fi +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PE@EscapeStringAdd} +% \begin{macrocode} +\ifPE@etex + \def\PE@EscapeStringAdd#1{#1}% +\else + \def\PE@EscapeStringAdd#1{% + \edef\PE@result{% + \PE@result + #1% + }% + }% +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\PE@AtEnd% +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} +%% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{pdfescape}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/pdfescape/pdfescape.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/pdfescape/pdfescape.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `pdfescape' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/pdfescape.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{pdfescape.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip pdfescape.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex pdfescape.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% pdfescape.sty & tex/generic/pdfescape/pdfescape.sty\\ +% pdfescape.pdf & doc/latex/pdfescape/pdfescape.pdf\\ +% pdfescape.dtx & source/latex/pdfescape/pdfescape.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{pdfescape.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex pdfescape.dtx +%makeindex -s gind.ist pdfescape.idx +%pdflatex pdfescape.dtx +%makeindex -s gind.ist pdfescape.idx +%pdflatex pdfescape.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{History} +% \begin{Version}{2007/02/21 v1.0} +% \item +% First version. +% \end{Version} +% \begin{Version}{2007/02/25 v1.1} +% \item +% Test files added. +% \item +% \cs{EdefUnescapeHex} supports lowercase letters. +% \item +% Fix: \verb|\EdefEscapeName{^^@}| +% \item +% Fix: \verb|\EdefEscapeName{\string#}| +% \item +% Fix for \cs{EdefUnescapeHex} in case of incomplete hex string. +% \item +% Fix: \cs{EdefUnescapeHex} generates space tokens with catcode +% 10 (space) in all cases. +% \item +% Fix: \cs{EdefEscapeHex} and \cs{EdefEscapeName} now generate +% tokens with catcode 12 (other) only. +% \end{Version} +% \begin{Version}{2007/03/20 v1.2} +% \item +% Fix: Wrong year in \cs{ProvidesPackage}. +% \end{Version} +% \begin{Version}{2007/04/11 v1.3} +% \item +% Line ends sanitized. +% \end{Version} +% \begin{Version}{2007/04/21 v1.4} +% \item +% \cs{EdefUnescapeName} and \cs{EdefUnescapeString} added. +% \end{Version} +% \begin{Version}{2007/08/27 v1.5} +% \item +% \cs{EdefSanitize} added (replaces \cs{PE@sanitize}). +% \end{Version} +% \begin{Version}{2007/09/09 v1.6} +% \item +% Fix in catcode setup. +% \end{Version} +% \begin{Version}{2007/10/27 v1.7} +% \item +% More efficient \cs{EdefSanitize}. +% \end{Version} +% \begin{Version}{2007/11/11 v1.8} +% \item +% Use of package \xpackage{pdftexcmds} for \hologo{LuaTeX} support. +% \end{Version} +% \begin{Version}{2010/03/01 v1.9} +% \item +% Compatibility with \hologo{iniTeX}. +% \end{Version} +% \begin{Version}{2010/11/12 v1.10} +% \item +% Use of package \xpackage{ltxcmds}. +% \item +% Fix for compatibility with \hologo{iniTeX}. +% \end{Version} +% \begin{Version}{2011/01/30 v1.11} +% \item +% Already loaded package files are not input in \hologo{plainTeX}. +% \end{Version} +% \begin{Version}{2011/04/04 v1.12} +% \item +% Further fixes for compatibility for \hologo{iniTeX}. +% \item +% Test file for \hologo{iniTeX} added. +% \end{Version} +% \begin{Version}{2011/11/25 v1.13} +% \item +% Higher order bit of octal sequences in \cs{EdefUnescapeString} +% ignored according to the PDF specification +% (Bug found by Bruno Le Floch). +% \end{Version} +% \begin{Version}{2016/05/16 v1.14} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2019/12/09 v1.15} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/pdfescape/pdfescape.pdf b/macros/latex/contrib/pdfescape/pdfescape.pdf new file mode 100644 index 0000000000..07fd595511 Binary files /dev/null and b/macros/latex/contrib/pdfescape/pdfescape.pdf differ diff --git a/macros/latex/contrib/picture/README.md b/macros/latex/contrib/picture/README.md new file mode 100644 index 0000000000..afbecb7f5b --- /dev/null +++ b/macros/latex/contrib/picture/README.md @@ -0,0 +1,11 @@ +# picture + +picture package for LaTeX + + +There are macro and environment arguments that expect numbers +that will internally be multiplicated with \unitlength. +This package extends the syntax of these arguments that +dimens with calculation support can be added for these arguments. + + diff --git a/macros/latex/contrib/picture/picture.dtx b/macros/latex/contrib/picture/picture.dtx new file mode 100644 index 0000000000..56cd8c8c47 --- /dev/null +++ b/macros/latex/contrib/picture/picture.dtx @@ -0,0 +1,772 @@ +% \iffalse meta-comment +% +% File: picture.dtx +% Version: 2019/12/09 v1.5 +% Info: Dimens for picture macros +% +% Copyright (C) +% 2006-2009 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/picture/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/picture/issues +% +% This work consists of the main source file picture.dtx +% and the derived files +% picture.sty, picture.pdf, picture.ins, picture.drv, +% picture-example.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/picture/picture.dtx +% CTAN:macros/latex/contrib/picture/picture.pdf +% +% Unpacking: +% (a) If picture.ins is present: +% tex picture.ins +% (b) Without picture.ins: +% tex picture.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{picture.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If picture.drv is present: +% latex picture.drv +% (b) Without picture.drv: +% latex picture.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex picture.dtx +% makeindex -s gind.ist picture.idx +% pdflatex picture.dtx +% makeindex -s gind.ist picture.idx +% pdflatex picture.dtx +% +% Installation: +% TDS:tex/latex/picture/picture.sty +% TDS:doc/latex/picture/picture.pdf +% TDS:doc/latex/picture/picture-example.tex +% TDS:source/latex/picture/picture.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: picture 2019/12/09 v1.5 Dimens for picture macros (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: picture +Version: 2019/12/09 v1.5 + +Copyright (C) + 2006-2009 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/picture/issues + + +This work consists of the main source file picture.dtx +and the derived files + picture.sty, picture.pdf, picture.ins, picture.drv, + picture-example.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{picture.ins}{\from{picture.dtx}{install}}% + \file{picture.drv}{\from{picture.dtx}{driver}}% + \usedir{tex/latex/picture}% + \file{picture.sty}{\from{picture.dtx}{package}}% + \usedir{doc/latex/picture}% + \file{picture-example.tex}{\from{picture.dtx}{example}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* picture.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `picture.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{picture.drv}% + [2019/12/09 v1.5 Dimens for picture macros (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{picture.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{picture.drv} +% +% \title{The \xpackage{picture} package} +% \date{2019/12/09 v1.5} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/picture/issues}}} +% +% \maketitle +% +% \begin{abstract} +% There are macro and environment arguments that expect numbers +% that will internally be multiplicated with \cs{unitlength}. +% This package extends the syntax of these arguments that +% dimens with calculation support can be added for these arguments. +% \end{abstract} +% +% \tableofcontents +% +% \section{User interface} +% +% \subsection{Introduction} +% +% The environment |picture| and macros such as \cs{put}, \cs{line}, +% \cs{vector} and other macros have arguments that expect numbers +% that are used as factor for \cs{unitlength}. +% This package redefines such macros and adds code that detects +% whether such an argument is given as number or as length. +% In the latter case, the length is used directly without multiplying +% with \cs{unitlength}. +% +% \subsection{Options} +% +% Depending on the available features, also length expressions +% can be given. Option \xoption{calc} loads package \xpackage{calc}. +% Then expressions of these package may be used. +% Otherwise \xoption{etex} wraps the length argument inside +% \cs{dimexpr}\dots\cs{relax}, if \eTeX\ is available. Otherwise +% option \xoption{plain} uses plain assignments without calculation +% support. +% +% The default is \xoption{calc} if package \xpackage{calc} +% is loaded before package \xoption{picture}. If you specify +% option \xoption{calc} the loading of \xpackage{calc} is ensured. +% Otherwise package \xpackage{picture} looks whether \cs{dimexpr} +% is available and uses then option \xoption{etex} as default. +% If \eTeX\ also could not be found, then \xoption{plain} is used. +% +% \subsection{Example} +% +% \begin{macrocode} +%<*example> +\documentclass{article} + +\usepackage[calc]{picture} + +\begin{document} + +\setlength{\unitlength}{1pt} + +\begin{picture}(\widthof{Hello World}, 10mm) + \put(0, 0){\makebox(0,0)[lb]{Hello World}}% + \put(0, \heightof{Hello World} + \fboxsep){% + \line(1, 0){\widthof{Hello World}}% + }% + \put(\widthof{Hello World}, 10mm){% + \line(0, -1){10mm}% + }% +\end{picture} + +\end{document} +% +% \end{macrocode} +% +% \subsection{Supported packages} +% +% Packages \xpackage{pspicture} and \xpackage{pict2e} are supported, +% but they must be loaded before package \xpackage{picture}. +% +% New macros can be supported by \cs{picture@redefine}. +% The first argument is the macro which contains the arguments +% in its parameter text that you want to support by package \xpackage{picture}. +% The second argument contains the parameter text. Change \# to \& for +% the arguments in question. +% Examples (already used by package \xpackage{picture}): +% \begin{quote} +% |\picture@redefine\put{(&1,&2)}|\\ +% |\picture@redefine\line{(#1,#2)&3}| +% \end{quote} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \subsection{Identification} +% +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{picture}% + [2019/12/09 v1.5 Dimens for picture macros (HO)]% +% \end{macrocode} +% +% \subsection{Options} +% +% \begin{macrocode} +\def\Pc@calcname{calc} +\def\Pc@etexname{etex} +\def\Pc@plainname{plain} +% \end{macrocode} +% \begin{macro}{\Pc@method} +% Macro \cs{Pc@method} stores the method to use for calculations. +% Check which features are available and set the default for \cs{Pc@method}. +% \begin{macrocode} +\@ifpackageloaded{calc}{% + \let\Pc@method\Pc@calcname +}{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname dimexpr\endcsname\relax + \let\Pc@method\Pc@plainname + \else + \let\Pc@method\Pc@etexname + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\DeclareOption{plain}{% + \let\Pc@method\Pc@plainname +} +\DeclareOption{etex}{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname dimexpr\endcsname\relax + \PackageError{picture}{% + e-TeX is not available% + }\@ehc + \else + \let\Pc@method\Pc@etexname + \fi +} +\DeclareOption{calc}{% + \let\Pc@method\Pc@calcname +} +\ProcessOptions* +\begingroup + \let\on@line\@empty + \PackageInfo{picture}{Calculation method: \Pc@method}% +\endgroup +% \end{macrocode} +% +% \subsection{Calculation method} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@calcname + \RequirePackage{calc}% +\fi +% \end{macrocode} +% +% \subsubsection{Method \xoption{calc}} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@calcname + \def\Pc@tokslength#1{% + \begingroup + \let\calc@error\Pc@calc@error + \setlength\dimen@{#1\unitlength}\Pc@next\Pc@nil{#1}% + }% + \let\PcOrg@calc@error\calc@error + \@ifpackagelater{calc}{2007/08/22}{% v4.3 + \def\Pc@calc@error#1{% + \expandafter\ifx\expandafter\unitlength\noexpand#1\relax + \def\calc@next##1!{% + \endgroup + \aftergroup\afterassignment + \aftergroup\Pc@next + }% + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {% + \calc@next{#1}% + }{% + \PcOrg@calc@error{#1}% + }% + }% + }{% + \def\Pc@calc@error#1{% + \expandafter\ifx\expandafter\unitlength\noexpand#1\relax + \def\calc@next##1!{% + \endgroup + \aftergroup\afterassignment + \aftergroup\Pc@next + }% + \expandafter\@gobble + \else + \expandafter\@firstofone + \fi + {% + \PcOrg@calc@error{#1}% + }% + }% + }% +\fi +% \end{macrocode} +% +% \subsubsection{Method \xoption{etex}} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@etexname + \def\Pc@tokslength#1{% + \begingroup + \afterassignment\Pc@next + \dimen@=\dimexpr#1\unitlength\Pc@nil{#1}% + }% +\fi +% \end{macrocode} +% +% \subsubsection{Method \xoption{plain}} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@plainname + \def\Pc@tokslength#1{% + \begingroup + \afterassignment\Pc@next + \dimen@=#1\unitlength\Pc@nil{#1}% + }% +\fi +% \end{macrocode} +% +% \subsubsection{Help macros} +% +% \begin{macrocode} +\def\Pc@next#1\Pc@nil#2{% + \ifx\\#1\\% + \endgroup + \Pc@addtoks{{#2}}% + \else + \expandafter\endgroup + \expandafter\Pc@addtoks\expandafter{% + \expandafter{\the\dimen@\@gobble}% + }% + \fi +} +% \end{macrocode} +% \begin{macro}{\Pc@nil} +% \cs{Pc@nil} must not have the meaning of \cs{relax} because of +% \cs{dimexpr}. +% \begin{macrocode} +\let\Pc@nil\message +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@addtoks} +% \begin{macrocode} +\def\Pc@addtoks#1{% + \toks@=\expandafter{\the\toks@#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@init} +% \begin{macrocode} +\def\Pc@init#1{% + \begingroup + \toks@={#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@finish} +% \begin{macrocode} +\def\Pc@finish#1{% + \expandafter\endgroup + \expandafter#1\the\toks@ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Redefinitions} +% +% \begin{macro}{\picture@redefine} +% \begin{tabular}[t]{@{}l@{ }l@{}} +% |#1|:& command name\\ +% |#2|:& parameter text, length parameter with \& instead of \# +% \end{tabular} +% \begin{macrocode} +\def\picture@redefine#1#2{% + \begingroup + \edef\reserved@a{% + \noexpand\noexpand + \expandafter\noexpand + \csname PcOrg@\expandafter\@gobble\string#1\endcsname + }% + \toks0{#1}% + \Pc@first#2&0% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@first} +% \begin{macrocode} +\def\Pc@first#1&{% + \toks1={#1}% + \toks2={\Pc@init{#1}}% + \Pc@scanlength +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@scanlength} +% |#1|: number of length parameter or zero +% \begin{macrocode} +\def\Pc@scanlength#1{% + \ifcase#1 % + \expandafter\Pc@last + \else + \toks1=\expandafter{\the\toks1 ###1}% + \toks2=\expandafter{\the\toks2 \Pc@tokslength{###1}}% + \expandafter\Pc@scannext + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@scannext} +% \begin{macrocode} +\def\Pc@scannext#1&{% + \ifx\\#1\\% + \else + \toks1=\expandafter{\the\toks1 #1}% + \toks2=\expandafter{\the\toks2 \Pc@addtoks{#1}}% + \fi + \Pc@scanlength +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@last} +% \begin{macrocode} +\def\Pc@last{% + \edef\x{% + \endgroup + \let\reserved@a\the\toks0 % + \def\the\toks0 \the\toks1 {% + \the\toks2 % + \noexpand\Pc@finish\reserved@a + }% + }% + \x +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\LaTeX\ base macros} +% +% \begin{macrocode} +\picture@redefine\@picture{(&1,&2)(&3,&4)} +\picture@redefine\put{(&1,&2)} +\picture@redefine\multiput{(&1,&2)} +\picture@redefine\@multiput{(&1,&2)} +\picture@redefine\line{(#1,#2)&3} +\picture@redefine\vector{(#1,#2)&3} +\picture@redefine\dashbox{&1(&2,&3)} +\picture@redefine\@circle{&1} +\picture@redefine\@dot{&1} +\picture@redefine\@bezier{#1(&2,&3)(&4,&5)(&6,&7)} +\picture@redefine\@imakepicbox{(&1,&2)} +% \end{macrocode} +% +% \subsubsection{Package \xpackage{pspicture}} +% +% Package \xpackage{pspicture} changes the signature of \cs{@oval} +% by adding an optional argument. +% \begin{macrocode} +\@ifpackageloaded{pspicture}{% + \picture@redefine\@oval{[&1](&2,&3)}% + \picture@redefine\Line{(&1,&2)}% + \picture@redefine\Curve{(&1,&2)}% + \picture@redefine\Vector{(&1,&2)}% +}{% + \picture@redefine\@oval{(&1,&2)}% +} +% \end{macrocode} +% +% \subsection{Check package loading order} +% +% \begin{macro}{\PC@checkpackage} +% \begin{macrocode} +\def\Pc@checkpackage#1{% + \@ifpackageloaded{#1}{% + }{% + \AtBeginDocument{% + \@ifpackageloaded{#1}{% + \PackageWarningNoLine{picture}{% + Package `#1' is loaded after `picture'.\MessageBreak + Load package `picture' afterwards to get full support% + \MessageBreak + of its additional syntax with length specifications% + }% + }{}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\Pc@checkpackage{pict2e} +\Pc@checkpackage{pspicture} +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{picture}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/picture/picture.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/picture/picture.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `picture' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/picture.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{picture.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip picture.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex picture.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% picture.sty & tex/latex/picture/picture.sty\\ +% picture.pdf & doc/latex/picture/picture.pdf\\ +% picture-example.tex & doc/latex/picture/picture-example.tex\\ +% picture.dtx & source/latex/picture/picture.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{picture.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex picture.dtx +%makeindex -s gind.ist picture.idx +%pdflatex picture.dtx +%makeindex -s gind.ist picture.idx +%pdflatex picture.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{History} +% \begin{Version}{2006/08/26 v1.0} +% \item +% First released version. (First start of the project was June/July 2002.) +% \end{Version} +% \begin{Version}{2007/04/11 v1.1} +% \item +% Line ends sanitized. +% \end{Version} +% \begin{Version}{2008/11/26 v1.2} +% \item +% Package \xpackage{pict2e} added to documentation section ``Supported +% packages''. +% \item +% Package order of supported packages is checked. +% \end{Version} +% \begin{Version}{2009/10/11 v1.3} +% \item +% Fix because of new version v4.3 of package \xpackage{calc}. +% \end{Version} +% \begin{Version}{2016/05/16 v1.4} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2019/12/09 v1.5} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/picture/picture.pdf b/macros/latex/contrib/picture/picture.pdf new file mode 100644 index 0000000000..7e500063e4 Binary files /dev/null and b/macros/latex/contrib/picture/picture.pdf differ diff --git a/macros/latex/contrib/selinput/README.md b/macros/latex/contrib/selinput/README.md new file mode 100644 index 0000000000..cf27d1d134 --- /dev/null +++ b/macros/latex/contrib/selinput/README.md @@ -0,0 +1,9 @@ +# selinput + +selinput package for LaTeX + + +This package selects the input encoding by specifying between +input characters and their glyph names. + + diff --git a/macros/latex/contrib/selinput/selinput.dtx b/macros/latex/contrib/selinput/selinput.dtx new file mode 100644 index 0000000000..80755bbc20 --- /dev/null +++ b/macros/latex/contrib/selinput/selinput.dtx @@ -0,0 +1,851 @@ +% \iffalse meta-comment +% +% File: selinput.dtx +% Version: 2019/12/09 v1.5 +% Info: Semi-automatic input encoding detection +% +% Copyright (C) +% 2007 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/selinput/issues +% +% 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. This version of this license is in +% https://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% https://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 Maintainers of this work are +% Heiko Oberdiek and the Oberdiek Package Support Group +% https://github.com/ho-tex/selinput/issues +% +% This work consists of the main source file selinput.dtx +% and the derived files +% selinput.sty, selinput.pdf, selinput.ins, selinput.drv, +% selinput-test1.tex, selinput-test2.tex, selinput-test3.tex, +% selinput-test4.tex, selinput-test5.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/selinput/selinput.dtx +% CTAN:macros/latex/contrib/selinput/selinput.pdf +% +% Unpacking: +% (a) If selinput.ins is present: +% tex selinput.ins +% (b) Without selinput.ins: +% tex selinput.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{selinput.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If selinput.drv is present: +% latex selinput.drv +% (b) Without selinput.drv: +% latex selinput.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex selinput.dtx +% makeindex -s gind.ist selinput.idx +% pdflatex selinput.dtx +% makeindex -s gind.ist selinput.idx +% pdflatex selinput.dtx +% +% Installation: +% TDS:tex/latex/selinput/selinput.sty +% TDS:doc/latex/selinput/selinput.pdf +% TDS:source/latex/selinput/selinput.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: selinput 2019/12/09 v1.5 Semi-automatic input encoding detection (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: selinput +Version: 2019/12/09 v1.5 + +Copyright (C) + 2007 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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. This version of this license is in + https://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + https://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 Maintainers of this work are +Heiko Oberdiek and the Oberdiek Package Support Group +https://github.com/ho-tex/selinput/issues + + +This work consists of the main source file selinput.dtx +and the derived files + selinput.sty, selinput.pdf, selinput.ins, selinput.drv, + selinput-test1.tex, selinput-test2.tex, selinput-test3.tex, + selinput-test4.tex, selinput-test5.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{selinput.ins}{\from{selinput.dtx}{install}}% + \file{selinput.drv}{\from{selinput.dtx}{driver}}% + \usedir{tex/latex/selinput}% + \file{selinput.sty}{\from{selinput.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* selinput.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `selinput.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{selinput.drv}% + [2019/12/09 v1.5 Semi-automatic input encoding detection (HO)]% +\documentclass{ltxdoc} +\ifx\Umathcode\undefined +\usepackage[T1]{fontenc} +\fi +\usepackage{textcomp} +\usepackage{lmodern} +\usepackage{holtxdoc}[2011/11/22] +\usepackage{color} +\begin{document} + \DocInput{selinput.dtx}% +\end{document} +% +% \fi +% +% +% +% \GetFileInfo{selinput.drv} +% +% \title{The \xpackage{selinput} package} +% \date{2019/12/09 v1.5} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/selinput/issues}}} +% +% \maketitle +% +% \begin{abstract} +% This package selects the input encoding by specifying between +% input characters and their glyph names. +% \end{abstract} +% +% \tableofcontents +% +% \newcommand*{\EM}{\textcolor{blue}} +% \newcommand*{\ExampleText}{^^A +% Umlauts:\ \EM{\"A\"O\"U\"a\"o\"u\ss}^^A +% } +% +% \section{Documentation} +% +% \subsection{Introduction} +% +% \LaTeX\ supports the direct use of 8-bit characters by means +% of package \xpackage{inputenc}. However you must know +% and specify the encoding, e.g.: +% \begin{quote} +% \ttfamily +% |\documentclass{article}|\\ +% |\usepackage[|\EM{latin1}|]{inputenc}|\\ +% |% or \usepackage[|\EM{utf8}|]{inputenc}|\\ +% |% or \usepackage[|\EM{??}|]{inputenc}|\\ +% |\begin{document}|\\ +% | |\ExampleText\\ +% |\end{document}| +% \end{quote} +% +% If the document is transferred in an environment that +% uses a different encoding, then there are programs that +% convert the input characters. Examples for conversion +% of file \xfile{test.tex} +% from encoding latin1 (ISO-8859-1) to UTF-8: +% \begin{quote} +% \ttfamily +% |recode ISO-8859-1..UTF-8 test.tex|\\ +% |recode latin1..utf8 test.tex|\\ +% |iconv --from-code ISO-8859-1|\\ +% \hphantom{iconv}| --to-code UTF-8|\\ +% \hphantom{iconv}| --output testnew.tex|\\ +% \hphantom{iconv}| test.tex|\\ +% |iconv -f latin1 -t utf8 -o testnew.tex test.tex| +% \end{quote} +% However, the encoding name for package \xpackage{inputenc} +% must be changed: +% \begin{quote} +% |\usepackage[latin1]{inputenc}| $\rightarrow$ +% |\usepackage[utf8]{inputenc}|\kern-4pt\relax +% \end{quote} +% Of course, unless you are using some clever editor +% that knows package \xpackage{inputenc}, recodes +% the file and adjusts the option at the same time. +% But most editors can perhaps recode the file, but +% they let the option untouched. +% +% Therefore package \xpackage{selinput} chooses another way for +% specifying the input encoding. The encoding name is not needed +% at all. Some 8-bit characters are identified by their glyph +% name and the package chooses an appropriate encoding, example: +% \begin{quote} +% \ttfamily +% |\documentclass{article}|\\ +% |\usepackage{selinput}|\\ +% |\SelectInputMappings{|\\ +% | adieresis={|\EM{\"a}|}|,\\ +% | germandbls={|\EM{\ss}|}|,\\ +% | Euro={|\EM{\texteuro}|}|,\\ +% |}|\\ +% |\begin{document}|\\ +% | |\ExampleText\\ +% |\end{document}| +% \end{quote} +% +% \subsection{User interface} +% +% \begin{declcs}{SelectInputEncodingList} \M{encoding list} +% \end{declcs} +% \cs{SelectInputEncodingList} expects a comma separated list of +% encoding names. Example: +% \begin{quote} +% |\SelectInputEncodingList{utf8,ansinew,mac-roman}| +% \end{quote} +% The encodings of package \xpackage{inputenx} are used as default. +% +% \begin{declcs}{SelectInputMappings} \M{mapping pairs} +% \end{declcs} +% A mapping pair consists of a glyph name and its input +% character: +% \begin{quote} +% |\SelectInputMappings{|\\ +% | adieresis={|\EM{\"a}|}|,\\ +% | germandbls={|\EM{\ss}|}|,\\ +% | Euro={|\EM{\texteuro}|}|,\\ +% |}| +% \end{quote} +% The supported glyph names can be found in file \xfile{ix-name.def} +% of project \xpackage{inputenx} \cite{inputenx}. The names are +% basically taken from Adobe's glyphlists \cite{adobe:glyphlist,adobe:aglfn}. +% As many pairs are needed as necessary to identify the encoding. +% Example with insufficient pairs: +% \begin{quote} +% \ttfamily +% |\SelectInputEncodingSet{latin1,latin9}|\\ +% |\SelectInputMappings{|\\ +% | adieresis={|\EM{\"a}|}|,\\ +% | germandbls={|\EM{\ss}|}|,\\ +% |}|\\ +% \ExampleText| and Euro: |\EM{\textcurrency} (wrong) +% \end{quote} +% The first encoding \xoption{latin1} passes the constraints given +% by the mapping pairs. However the Euro symbol is not part of +% the encoding. Thus a mapping pair with the Euro symbol +% solves the problem. In fact the symbol alone already succeeds in selecting +% between \xoption{latin1} and \xoption{latin9}: +% \begin{quote} +% \ttfamily +% |\SelectInputEncodingSet{latin1,latin9}|\\ +% |\SelectInputMappings{|\\ +% | Euro={|\EM{\texteuro}|},|\\ +% |}|\\ +% \ExampleText| and Euro: |\EM{\texteuro} +% \end{quote} +% +% \subsection{Options} +% +% \begin{description} +% \item[\xoption{warning}:] +% The selected encoding is written +% by \cs{PackageInfo} into the \xfile{.log} file only. +% Option \xoption{warning} changes it to \cs{PackageWarning}. +% Then the selected encoding is shown on the terminal as well. +% \item[\xoption{ucs}:] +% The encoding file \xfile{utf8x} of package \cs{ucs} requires +% that the package itself is loaded before. +% If the package is not loaded, then the option \xoption{ucs} +% will load package \xpackage{ucs} if the detected encoding is +% UTF-8 (limited to the preamble, packages cannot be loaded later). +% \item[\xoption{utf8=\dots}:] +% The option allows to specify other encoding files +% for UTF-8 than \LaTeX's \xfile{utf8.def}. For example, +% |utf8=utf-8| will load \xfile{utf-8.def} instead. +% \end{description} +% +% \subsection{Encodings} +% +% Package \xpackage{stringenc} \cite{stringenc} +% is used for testing the encoding. Thus the encoding +% name must be known by this package. Then the found +% encoding is loaded by \cs{inputencoding} by package +% \xpackage{inputenc} or \cs{InputEncoding} if package +% \xpackage{inputenx} is loaded. +% +% The supported encodings are present in the encoding list, +% thus usually the encoding names do not matter. +% If the list is set by \cs{SelectInputEncodingList}, +% then you can use the names that work for package +% \xpackage{inputenc} and are known by package \xpackage{stringenc}, +% for example: \xoption{latin1}, \xoption{x-iso-8859-1}. Encoding +% file names of package \xpackage{inputenx} are prefixed with \xfile{x-}. +% The prefix can be dropped, if package \xpackage{inputenx} is loaded. +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{selinput} + [2019/12/09 v1.5 Semi-automatic input encoding detection (HO)]% +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{inputenc} +\RequirePackage{kvsetkeys}[2006/10/19] +\RequirePackage{stringenc}[2007/06/16] +\RequirePackage{kvoptions} +% \end{macrocode} +% \begin{macro}{\SelectInputEncodingList} +% \begin{macrocode} +\newcommand*{\SelectInputEncodingList}{% + \let\SIE@EncodingList\@empty + \kvsetkeys{SelInputEnc}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\SelectInputMappings} +% \begin{macrocode} +\newcommand*{\SelectInputMappings}[1]{% + \SIE@LoadNameDefs + \let\SIE@StringUnicode\@empty + \let\SIE@StringDest\@empty + \kvsetkeys{SelInputMap}{#1}% + \ifx\\SIE@StringUnicode\SIE@StringDest\\% + \PackageError{selinput}{% + No mappings specified% + }\@ehc + \else + \EdefUnescapeHex\SIE@StringUnicode\SIE@StringUnicode + \let\SIE@Encoding\@empty + \@for\SIE@EncodingTest:=\SIE@EncodingList\do{% + \ifx\SIE@Encoding\@empty + \StringEncodingConvertTest\SIE@temp\SIE@StringUnicode + {utf16be}\SIE@EncodingTest{% + \ifx\SIE@temp\SIE@StringDest + \let\SIE@Encoding\SIE@EncodingTest + \fi + }{}% + \fi + }% + \ifx\SIE@Encoding\@empty + \StringEncodingConvertTest\SIE@temp\SIE@StringDest + {ascii}{utf16be}{% + \def\SIE@Encoding{ascii}% + \SIE@Info{selinput}{% + Matching encoding not found, but input characters% + \MessageBreak + are 7-bit (possibly editor replacements).% + \MessageBreak + Hence using ascii encoding% + }% + }{}% + \fi + \ifx\SIE@Encoding\@empty + \PackageError{selinput}{% + Cannot find a matching encoding% + }\@ehd + \else + \ifx\SIE@Encoding\SIE@EncodingUTFviii + \SIE@LoadUnicodePackage + \ifx\SIE@UseUTFviii\@empty + \else + \let\SIE@Encoding\SIE@UseUTFviii + \fi + \fi + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname InputEncoding\endcsname\relax + \inputencoding\SIE@Encoding + \else + \InputEncoding\SIE@Encoding + \fi + \SIE@Info{selinput}{Encoding `\SIE@Encoding' selected}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\SIE@LoadNameDefs} +% \begin{macrocode} +\def\SIE@LoadNameDefs{% + \begingroup + \endlinechar=\m@ne + \catcode92=0 % backslash + \catcode123=1 % left curly brace/beginning of group + \catcode125=2 % right curly brace/end of group + \catcode37=14 % percent/comment character + \@makeother\[% + \@makeother\]% + \@makeother\.% + \@makeother\(% + \@makeother\)% + \@makeother\/% + \@makeother\-% + \let\InputenxName\SelectInputDefineMapping + \InputIfFileExists{ix-name.def}{}{% + \PackageError{selinput}{% + Missing `ix-name.def' (part of package `inputenx')% + }\@ehd + }% + \global\let\SIE@LoadNameDefs\relax + \endgroup +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\SelectInputDefineMapping} +% \begin{macrocode} +\newcommand*{\SelectInputDefineMapping}[1]{% + \expandafter\gdef\csname SIE@@#1\endcsname +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\kv@set@family@handler{SelInputMap}{% + \@onelevel@sanitize\kv@key + \ifx\kv@value\relax + \PackageError{selinput}{% + Missing input character for `\kv@key'% + }\@ehc + \else + \@onelevel@sanitize\kv@value + \ifx\kv@value\@empty + \PackageError{selinput}{% + Input character got lost?\MessageBreak + Missing input character for `\kv@key'% + }\@ehc + \else + \@ifundefined{SIE@@\kv@key}{% + \PackageWarning{selinput}{% + Missing definition for `\kv@key'% + }% + }{% + \edef\SIE@StringDest{% + \SIE@StringDest + \kv@value + }% + \edef\SIE@StringUnicode{% + \SIE@StringUnicode + \csname SIE@@\kv@key\endcsname + }% + }% + \fi + \fi +} +% \end{macrocode} +% \begin{macrocode} +\kv@set@family@handler{SelInputEnc}{% + \@onelevel@sanitize\kv@key + \ifx\kv@value\relax + \ifx\SIE@EncodingList\@empty + \let\SIE@EncodingList\kv@key + \else + \edef\SIE@EncodingList{\SIE@EncodingList,\kv@key}% + \fi + \else + \@onelevel@sanitize\kv@value + \PackageError{selinput}{% + Illegal key value pair (\kv@key=\kv@value)\MessagBreak + in encoding list% + }\@ehc + \fi +} +% \end{macrocode} +% +% \begin{macro}{\SIE@LoadUnicodePackage} +% \begin{macrocode} +\def\SIE@LoadUnicodePackage{% + \@ifpackageloaded\SIE@UnicodePackage{}{% + \RequirePackage\SIE@UnicodePackage\relax + }% + \SIE@PatchUCS + \global\let\SIE@LoadUnicodePackage\relax +} +\let\SIE@show\show +\def\SIE@PatchUCS{% + \AtBeginDocument{% + \expandafter\ifx\csname ver@ucsencs.def\endcsname\relax + \else + \let\show\SIE@show + \fi + }% +} +\SIE@PatchUCS +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\AtBeginDocument{% + \let\SIE@LoadUnicodePackage\relax +} +% \end{macrocode} +% \begin{macro}{\SIE@EncodingUTFviii} +% \begin{macrocode} +\def\SIE@EncodingUTFviii{utf8} +\@onelevel@sanitize\SIE@EncodingUTFviii +% \end{macrocode} +% \end{macro} +% \begin{macro}{\SIE@EncodingUTFviiix} +% \begin{macrocode} +\def\SIE@EncodingUTFviiix{utf8x} +\@onelevel@sanitize\SIE@EncodingUTFviiix +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\let\SIE@UnicodePackage\@empty +\let\SIE@UseUTFviii\@empty +\let\SIE@Info\PackageInfo +% \end{macrocode} +% \begin{macrocode} +\SetupKeyvalOptions{% + family=SelInput,% + prefix=SelInput@% +} +\define@key{SelInput}{utf8}{% + \def\SIE@UseUTFviii{#1}% + \@onelevel@sanitize\SIE@UseUTFviii +} +\DeclareBoolOption{ucs} +\DeclareVoidOption{warning}{% + \let\SIE@Info\PackageWarning +} +\ProcessKeyvalOptions{SelInput} +\ifSelInput@ucs + \def\SIE@UnicodePackage{ucs}% + \ifx\SIE@UseUTFviii\@empty + \let\SIE@UseUTFviii\SIE@EncodingUTFviiix + \fi +\else + \ifx\SIE@UseUTFviii\@empty + \@ifpackageloaded{ucs}{% + \let\SIE@UseUTFviii\SIE@EncodingUTFviiix + }{% + \let\SIE@UseUTFviii\SIE@EncodingUTFviii + }% + \fi +\fi +% \end{macrocode} +% +% \begin{macro}{\SIE@EncodingList} +% \begin{macrocode} +\edef\SIE@EncodingList{% + utf8,% + x-iso-8859-1,% + x-iso-8859-15,% + x-cp1252,% ansinew + x-mac-roman,% + x-iso-8859-2,% + x-iso-8859-3,% + x-iso-8859-4,% + x-iso-8859-5,% + x-iso-8859-6,% + x-iso-8859-7,% + x-iso-8859-8,% + x-iso-8859-9,% + x-iso-8859-10,% + x-iso-8859-11,% + x-iso-8859-13,% + x-iso-8859-14,% + x-iso-8859-15,% + x-mac-centeuro,% + x-mac-cyrillic,% + x-koi8-r,% + x-cp1250,% + x-cp1251,% + x-cp1257,% + x-cp437,% + x-cp850,% + x-cp852,% + x-cp855,% + x-cp858,% + x-cp865,% + x-cp866,% + x-nextstep,% + x-dec-mcs% +}% +\@onelevel@sanitize\SIE@EncodingList +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +% +% \end{macrocode} +%% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{selinput}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/selinput/selinput.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/selinput/selinput.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `selinput' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTANinstall{install/macros/latex/contrib/selinput.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{selinput.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip selinput.tds.zip -d ~/texmf| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex selinput.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% selinput.sty & tex/latex/selinput/selinput.sty\\ +% selinput.pdf & doc/latex/selinput/selinput.pdf\\ +% selinput.dtx & source/latex/selinput/selinput.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{selinput.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex selinput.dtx +%makeindex -s gind.ist selinput.idx +%pdflatex selinput.dtx +%makeindex -s gind.ist selinput.idx +%pdflatex selinput.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{thebibliography}{9} +% \bibitem{inputenx} +% Heiko Oberdiek: \textit{The \xpackage{inputenx} package}; +% 2007-04-11 v1.1; +% \CTANpkg{inputenx}. +% +% \bibitem{adobe:glyphlist} +% Adobe: \textit{Adobe Glyph List}; +% 2002-09-20 v2.0; +% \url{https://github.com/adobe-type-tools/agl-aglfn/blob/master/glyphlist.txt}. +% +% \bibitem{adobe:aglfn} +% Adobe: \textit{Adobe Glyph List For New Fonts}; +% 2005-11-18 v1.5; +% \url{https://github.com/adobe-type-tools/agl-aglfn/blob/master/aglfn.txt}. +% +% \bibitem{stringenc} +% Heiko Oberdiek: \textit{The \xpackage{stringenc} package}; +% 2007-06-16 v1.1; +% \CTANpkg{stringenc}. +% +% \end{thebibliography} +% +% \begin{History} +% \begin{Version}{2007/06/16 v1.0} +% \item +% First version. +% \end{Version} +% \begin{Version}{2007/06/20 v1.1} +% \item +% Requested date for package \xpackage{stringenc} fixed. +% \end{Version} +% \begin{Version}{2007/09/09 v1.2} +% \item +% Line end fixed. +% \end{Version} +% \begin{Version}{2016/05/16 v1.3} +% \item +% Documentation updates. +% \end{Version} +% \begin{Version}{2016/05/17 v1.4} +% \item +% Documentation updates: Avoid T1 encoding with Unicode \TeX. +% \end{Version} +% \begin{Version}{2019/12/09 v1.5} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/macros/latex/contrib/selinput/selinput.pdf b/macros/latex/contrib/selinput/selinput.pdf new file mode 100644 index 0000000000..af1c9f731c Binary files /dev/null and b/macros/latex/contrib/selinput/selinput.pdf differ -- cgit v1.2.3