summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-07-25 20:48:38 +0000
committerKarl Berry <karl@freefriends.org>2021-07-25 20:48:38 +0000
commit768d6790ab7c65a44384ce0aefc24e179aab38fd (patch)
tree74620d1bee1206fbdfa97b3a31ce54b0c9b5b4ff /Master/texmf-dist
parent6f654705f79b314523e5e0b829da91294b8a3eb6 (diff)
macrolist (25jul21)
git-svn-id: svn://tug.org/texlive/trunk@60063 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/latex/macrolist/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/macrolist/macrolist.pdfbin184302 -> 192607 bytes
-rw-r--r--Master/texmf-dist/source/latex/macrolist/macrolist.dtx53
-rw-r--r--Master/texmf-dist/tex/latex/macrolist/macrolist.sty29
4 files changed, 79 insertions, 5 deletions
diff --git a/Master/texmf-dist/doc/latex/macrolist/README.md b/Master/texmf-dist/doc/latex/macrolist/README.md
index 8eff3b4f96e..ea16d986ea2 100644
--- a/Master/texmf-dist/doc/latex/macrolist/README.md
+++ b/Master/texmf-dist/doc/latex/macrolist/README.md
@@ -1,4 +1,4 @@
-# The LaTeX package macrolist - version 1.1.1 (2021/07/23)
+# The LaTeX package macrolist - version 1.2.0 (2021/07/23)
> Copyright (C) 2021 Dennis Chen <proofprogram@gmail.com>
>
diff --git a/Master/texmf-dist/doc/latex/macrolist/macrolist.pdf b/Master/texmf-dist/doc/latex/macrolist/macrolist.pdf
index 94986e435de..2ee450e2bca 100644
--- a/Master/texmf-dist/doc/latex/macrolist/macrolist.pdf
+++ b/Master/texmf-dist/doc/latex/macrolist/macrolist.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/macrolist/macrolist.dtx b/Master/texmf-dist/source/latex/macrolist/macrolist.dtx
index 3ccbc85edc1..382faf2930e 100644
--- a/Master/texmf-dist/source/latex/macrolist/macrolist.dtx
+++ b/Master/texmf-dist/source/latex/macrolist/macrolist.dtx
@@ -16,7 +16,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{macrolist}[2021/07/23 v1.1.1 Create lists of macros and perform operations on them]
+\ProvidesPackage{macrolist}[2021/07/23 v1.2.0 Create lists of macros and perform operations on them]
\RequirePackage{pgffor}
%</package>
@@ -56,8 +56,7 @@
% \end{abstract}
%
% \section{Usage}
-%
-% The scope of lists is always global. This seems to provide the most
+% The scope of lists is always global. This provides the most consistency and functionality for developers in places that are usually local (part of a group), such as environments and loops.
%
% \DescribeMacro{\newlist}
% To create a list, pass in |\newlist{listname}| to create a list with the name \textsf{listname}.
@@ -95,6 +94,50 @@
\csname macrolist@list@#1\the\numexpr #2\relax\endcsname%
}
% \fi
+% \changes{v1.2.0}{2021/07/23}{Add listindexof and listcontains}
+% \DescribeMacro{\listindexof}
+%
+% This works similar to \textsf{indexof} in almost any ordinary programming language. Write |\listindexof{list}{element}| to get the index of where \textsf{element} first appears in \textsf{list}. If it never does, then the macro will expand to \textsf{0}.
+%
+% The command uses |\ifx| instead of |\if|; this means that if you have |\macro| as an element with the definition \textsf{this is a macro} (assuming that \textsf{this is a macro} is not an element itself), then |\listindexof{listname}{this is a macro}| will expand to \textsf{0}.
+%
+% Because of the implementation of this macro, it can't actually be parsed as a number. (See the `Limitations' section for more information.)
+% \iffalse
+\newcommand{\listindexof}[2]{%
+ \def\macrolist@listindex{0}%
+ \macrolist@exists{#1}%
+ \def\macrolist@el{#2}%
+ \listforeach{#1}{\macrolist@listindexel}[\listsize{#1}][1]{%
+ \ifx\macrolist@el\macrolist@listindexel
+ \xdef\macrolist@listindex{\macrolist@index}%
+ \fi
+ }%
+ \macrolist@listindex%
+ \let\macrolist@listindex\relax%
+}
+% \fi
+%
+% \DescribeMacro{\listcontains}
+%
+% Writing |\listcontains{listname}{element}{true branch}{false branch}| checks whether list \textsf{listname} contains \textsf{element}, executing \textsf{true branch} if it does and \textsf{false branch} if it does not.
+%
+% \iffalse
+\newcommand{\listcontains}[4]{%
+ \def\macrolist@listindex{0}%
+ \macrolist@exists{#1}%
+ \def\macrolist@el{#2}%
+ \listforeach{#1}{\macrolist@listindexel}[\listsize{#1}][1]{%
+ \ifx\macrolist@el\macrolist@listindexel
+ \xdef\macrolist@listindex{\macrolist@index}%
+ \fi
+ }%
+ \ifnum\macrolist@listindex>0\relax
+ #3%
+ \else
+ #4%
+ \fi
+}
+% \fi
%
% \DescribeMacro{\listadd}
%
@@ -299,6 +342,10 @@
%\end{document}
% \end{verbatim}
%
+% \section{Limitations}
+%
+% The |\listindexof| macro cannot be parsed as a number. This is because we have to compare each element of the list to the passed in element and requires storing the index in a macro, which requires some unexpandable macros. (This is why we do not directly use |\listindexof| when defining |\listcontains|.)
+%
% \section{Implementation details}
%
% All internal macros are namespaced to prevent package conflicts.
diff --git a/Master/texmf-dist/tex/latex/macrolist/macrolist.sty b/Master/texmf-dist/tex/latex/macrolist/macrolist.sty
index 34de7dcc21a..36397cc9175 100644
--- a/Master/texmf-dist/tex/latex/macrolist/macrolist.sty
+++ b/Master/texmf-dist/tex/latex/macrolist/macrolist.sty
@@ -15,7 +15,7 @@
%% version 2005/12/01 or later.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{macrolist}[2021/07/23 v1.1.1 Create lists of macros and perform operations on them]
+\ProvidesPackage{macrolist}[2021/07/23 v1.2.0 Create lists of macros and perform operations on them]
\RequirePackage{pgffor}
@@ -32,6 +32,33 @@
\macrolist@inbounds{#1}{#2}%
\csname macrolist@list@#1\the\numexpr #2\relax\endcsname%
}
+\newcommand{\listindexof}[2]{%
+ \def\macrolist@listindex{0}%
+ \macrolist@exists{#1}%
+ \def\macrolist@el{#2}%
+ \listforeach{#1}{\macrolist@listindexel}[\listsize{#1}][1]{%
+ \ifx\macrolist@el\macrolist@listindexel
+ \xdef\macrolist@listindex{\macrolist@index}%
+ \fi
+ }%
+ \macrolist@listindex%
+ \let\macrolist@listindex\relax%
+}
+\newcommand{\listcontains}[4]{%
+ \def\macrolist@listindex{0}%
+ \macrolist@exists{#1}%
+ \def\macrolist@el{#2}%
+ \listforeach{#1}{\macrolist@listindexel}[\listsize{#1}][1]{%
+ \ifx\macrolist@el\macrolist@listindexel
+ \xdef\macrolist@listindex{\macrolist@index}%
+ \fi
+ }%
+ \ifnum\macrolist@listindex>0\relax
+ #3%
+ \else
+ #4%
+ \fi
+}
\newcommand{\listadd}[1]{
\macrolist@exists{#1}
\def\macrolist@currlist{#1}