summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/concepts
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-12-28 22:46:43 +0000
committerKarl Berry <karl@freefriends.org>2012-12-28 22:46:43 +0000
commitaa3041c0939f2447fc48fd4c3ad830dfe75ef401 (patch)
treef72a6d6589b2d2763ad34d7755b94dc8878742d1 /Master/texmf-dist/tex/latex/concepts
parent87e35eb4054f370617fc566daff3a5a6f527211a (diff)
concepts (28dec12)
git-svn-id: svn://tug.org/texlive/trunk@28649 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/concepts')
-rw-r--r--Master/texmf-dist/tex/latex/concepts/concepts.sty275
-rw-r--r--Master/texmf-dist/tex/latex/concepts/dry.sty32
-rw-r--r--Master/texmf-dist/tex/latex/concepts/packagedoc.cls353
-rw-r--r--Master/texmf-dist/tex/latex/concepts/with.sty324
4 files changed, 769 insertions, 215 deletions
diff --git a/Master/texmf-dist/tex/latex/concepts/concepts.sty b/Master/texmf-dist/tex/latex/concepts/concepts.sty
index 95e1c606d75..7cb1e4a07e1 100644
--- a/Master/texmf-dist/tex/latex/concepts/concepts.sty
+++ b/Master/texmf-dist/tex/latex/concepts/concepts.sty
@@ -19,7 +19,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi %%%%
-% \CheckSum{0}
+% \CheckSum{265}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -45,11 +45,11 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{concepts}[2012/12/18 0.0.5
+\ProvidesPackage{concepts}[2012/12/25 0.0.5-r1
managing names and symbols of document specific formal concepts]
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -65,14 +65,14 @@
%
% These are the packages we'll need.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\RequirePackage{etextools}
\RequirePackage{nth}
\RequirePackage{xspace}
\RequirePackage{xparse} % 1
\RequirePackage{ltxkeys}[2012/11/17] % 2
\RequirePackage{xstring}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We need a very recent version of |ltxkeys| in order to
% properly handle list-values. Note that |xparse| needs
@@ -90,7 +90,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\cnc@d} \marg{identifier}
-%%% \begin{macro}{\cnc@g} \marg{identifier}\\\nopagebreak
+%%% \begin{macro}{\cnc@g} \marg{identifier}\\\nopagebreak\noindentnext
%
% This package needs to store and retrieve a lot of data. To make
% the rest of the code more readable, we define the following commands.
@@ -100,10 +100,10 @@
% to a specific piece of data in |\csname| context.
% We can get access to the data itself by using |\cnc@g|.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcommand*{\cnc@d}[1]{cnc@data@#1}
\newcommand*{\cnc@g}[1]{\csuse{\cnc@d{#1}}}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% Both take an identifier of one the following shapes:
% \begin{itemize}
@@ -126,15 +126,15 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% \begin{macro}{\cnc@upper} \marg{string}\\\nopagebreak
+%%% \begin{macro}{\cnc@upper} \marg{string}\\\nopagebreak\noindentnext
%
% We're going to need a command that capitalizes the first
% letter of a string which fully expands its argument. So
% here it is.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcommand*{\cnc@upper}[1]{\ExpandAftercmds\MakeUppercase{#1}}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -142,7 +142,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\cnc@grabnumber} \marg{token sequence containing \#1}
-%%% \momarg{number}\\\nopagebreak
+%%% \momarg{number}\\\nopagebreak\noindentnext
%
% This is a command we're going to use for the automatically
% defined short symbol macros later. It has one 'real'
@@ -151,13 +151,13 @@
% substituted for all occurrences of \#1 in the mandatory
% argument which is then `returned'.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcommand{\cnc@grabnumber}[1]{%
\def\cnc@dowithnum##1{#1}%
\futuredef[0123456789]{\cnc@@n}%
{\expandafter\cnc@dowithnum\expandafter{\cnc@@n}}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -165,20 +165,20 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\cnc@csvlistsize} \marg{csvlist}
-%%% \marg{command sequence}\\\nopagebreak
+%%% \marg{command sequence}\\\nopagebreak\noindentnext
%
% This macro takes a comma-separated list of\ldots anything,
% and stores its size in the given macro as a simple decimal
% string.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcounter{cnc@listsize}
\newrobustcmd{\cnc@csvlistsize}[2]{%
\setcounter{cnc@listsize}{0}%
\def\do##1{\stepcounter{cnc@listsize}}\docsvlist{#1}%
\edef#2{\arabic{cnc@listsize}}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -192,7 +192,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\cnc@conceptname} \marg{plural} \marg{capitalized}
-%%% \marg{plural} \marg{concept key}\\\nopagebreak
+%%% \marg{plural} \marg{concept key}\\\nopagebreak\noindentnext
%
% This typesets the name of a specific concept in one of four forms. It
% can be capitalized or not; and it can be singular or plural. We define
@@ -204,25 +204,25 @@
% the |*| and |^| modifiers and we want to have a simple one-to-one
% mapping between their arguments and the arguments of this private macro.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcommand{\cnc@conceptname}[4]{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We test if \emph{both} the first and third arguments are true, meaning
% that the public command has two |*| modifiers. If it does, we give a
% package error.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ifboolexpr{ test{\IfBooleanTF{#1}} and test{\IfBooleanTF{#3}} }{%
\PackageError{concepts}%
{You used the * modifier twice; once is enough}%
{I will pretend you just used one *.}%
}{}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% And then we simply typeset the correct value from our datastore.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ifboolexpr{ test{\IfBooleanTF{#1}} or test{\IfBooleanTF{#3}} }{%
\IfBooleanTF{#2}%
{\cnc@g{concept(#4).option(Plural)}}%
@@ -232,16 +232,21 @@
{\cnc@g{concept(#4).option(Name)}}%
{\cnc@g{concept(#4).option(name)}}%
}%
-% \end{macrocode}\end{codeframe}
-%
+% \end{macrocode}
+%
% We end with an |\xspace| because the public command may need one.
+% And first we cancel out any extra spacing (for example,
+% when one concept name ends with another).
+%
+% \changes{0.0.5-r1}{2012/12/25}
+% {fixed spacing for when one concept name ends with another}
%
-% \begin{codeframe}\begin{macrocode}
- \xspace%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \begin{macrocode}
+ \unskip\xspace%
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -249,7 +254,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\cnc@conceptsymbol} \marg{concept key}
-%%% \marg{index}\\\nopagebreak
+%%% \marg{index}\\\nopagebreak\noindentnext
%
% This is the private macro which takes a concept key and an index and returns
% the corresponding symbol from our data-store. We use it in the public macros
@@ -259,31 +264,31 @@
% consists of numerals. The rest of the argument is simply left in
% the input stream afterwards.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcommand*{\cnc@conceptsymbol}[2]{%
\cnc@grabnumber{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We check if an actual numerical value was passed.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ifstrempty{##1}{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% No, we didn't get a numerical index. If there is only one symbol
% allocated to this concept, we don't care and return that symbol.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\edef\cnc@symbolcount{\cnc@g{concept(#1).option(symbols).count}}%
\ifnumcomp{\cnc@symbolcount}{=}{1}{%
\ensuremath{\cnc@g{concept(#1).option(symbols).index(1)}}%
}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% If there are multiple symbols, the lack of an index is ambiguous and
% we report a package error.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
{%
\PackageError{concepts}%
{You didn't specify a number, but the '#1'
@@ -292,29 +297,29 @@
to typeset a specific symbol}%
{I will pretend you didn't ask for a symbol here.}%
}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}%
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
% Now follows the `else' branch: we did get a numerical index!
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We check whether it is larger than the number of symbols
% allocated to the concept.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\edef\cnc@symbolcount{\cnc@g{concept(#1).option(symbols).count}}%
\ifnumcomp{##1}{>}{\cnc@symbolcount}{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% If it is, we report an `index out of bounds' error. We first prepare an
% appropriate sentence fragment so the error message becomes more readable.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\edef\cnc@nth{##1\nthSuff0##1\delimiter}%
\ExpandNext\IfStrEq{\cnc@symbolcount}{0}{%
\edef\cnc@somany{no symbols}%
@@ -328,33 +333,33 @@
but\MessageBreak the '#1' concept has
\cnc@somany\space allocated}%
{I will pretend you didn't ask for a symbol here.}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}%
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
% But if the number is within bounds, great! We just return the stored symbol.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
{%
\ensuremath{\cnc@g{concept(#1).option(symbols).index(##1)}}%
}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}%
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
% Now ends our |\cnc@grabnumber| command, and we supply the second argument
% that may contain the numbers. Just in case it's empty, we make sure we
% don't grab anything that comes after the second argument by adding a
% |\relax|.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
}#2\relax%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -364,7 +369,7 @@
% \begin{macro}{\cnc@conceptsymbols} \marg{concept key}
% \marg{separator}
% \marg{last separator}
-%%% \oarg{indices}\\\nopagebreak
+%%% \oarg{indices}\\\nopagebreak\noindentnext
%
% This is the private macro which takes a concept key and a
% comma-separated list of symbol-indices and returns a
@@ -374,11 +379,11 @@
% functionality. The last argument is optional to make it
% easier to define our `short' symbol-list command later.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcounter{cnc@separatorcount}%
\NewDocumentCommand{\cnc@conceptsymbols}{m m m O{1}}{%
\def\cnc@result{}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We loop through the list of indices and produce the
% symbols one-by-one. We use a rather ugly trick to
@@ -389,7 +394,7 @@
% the document, but we don't care, since most of this
% will be rewritten when we switch to \LaTeX3.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\def\do##1{%
\stepcounter{cnc@separatorcount}%
\edef\cnc@sepcsname{cnc@separator\arabic{cnc@separatorcount}}%
@@ -403,10 +408,10 @@
\edef\cnc@sepcsname{cnc@separator\arabic{cnc@separatorcount}}%
\csdef{\cnc@sepcsname}{#3}%
\ensuremath{\expandafter\@gobble\cnc@result{}}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -419,7 +424,7 @@
% \marg{star}\\\nopagebreak
% \marg{separator}
% \marg{last separator}
-%%% \marg{indices}\\\nopagebreak
+%%% \marg{indices}\\\nopagebreak\noindentnext
%
% This is the private macro which takes a concept key, a few
% modifiers, a comma-separated list of symbol-indices and
@@ -427,42 +432,42 @@
% concept symbols from our data-store. We use it in the public
% macros that offer this functionality.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newrobustcmd{\cnc@nameandsymbols}[7]{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We first check if any |*| modifiers were given and, if so,
% generate an error.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ifboolexpr{ test{\IfBooleanTF{#2}} or test{\IfBooleanTF{#4}} }{%
\PackageError{concepts}%
{You used the * modifier, but pluralization\MessageBreak
will be decided by the size of the index list}%
{I will pretend you didn't use the * modifier.}%
}{}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We then typeset the name of the concept. We check pluralization
% and pass along the capitalization.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\cnc@csvlistsize{#7}{\cnc@symbollistsize}%
\ifnumcomp{\cnc@symbollistsize}{=}{1}{%
\cnc@conceptname{\BooleanFalse}{#3}{\BooleanFalse}{#1}%
}{%
\cnc@conceptname{\BooleanTrue}{#3}{\BooleanFalse}{#1}%
} % <-- intentional space
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% Finally, we print the symbol list.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\cnc@conceptsymbols{#1}{#5}{#6}[#7]%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -478,43 +483,43 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% \begin{macro}{\NewConcept} \marg{concept key} \oarg{options}\\\nopagebreak
+%%% \begin{macro}{\NewConcept} \marg{concept key} \oarg{options}\\\nopagebreak\noindentnext
%
% The |\NewConcept| macro is defined using |xparse|, since we want the
% optional argument after the mandatory one (it's just nicer).
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NewDocumentCommand{\NewConcept}{m O{}}{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% Is this concept key already defined? If so, we report a package error.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\xifinlist{#1}{\cnc@g{concepts}}{%
\PackageError{concepts}%
{The concept key '#1' is already taken}%
{I will pretend that this '\protect\newconcept'%
didn't happen.}%
}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% Otherwise, we start the actual processing of this new concept.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We add the concept to the concepts list in our datastore.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\listcsxadd{\cnc@d{concepts}}{#1}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We then check which options were explicitly specified by the user.
% This results in a set of toggles in our datastore, which may
% be used by other code.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\DeclareRobustCommand*{\cnc@registertoggle}[1]{%
\newtoggle{\cnc@d{concept(#1).option(##1).given}}%
\togglefalse{\cnc@d{concept(#1).option(##1).given}}%
@@ -529,12 +534,12 @@
\cnc@registertoggle{symbols}%
\cnc@registertoggle{symbolcmd}%
\ltxkeys@setkeys*[cnc@toggle]{#1}{#2}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We now register the concept name options |name|, |Name|,
% |plural| and |Plural|. This is also where we set their default values.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ltxkeys@newordkey[cnc]{#1}{name}%
[#1]%
{\csdef{\cnc@d{concept(#1).option(name)}}{##1}}%
@@ -542,12 +547,12 @@
[\cnc@upper{\cnc@g{concept(#1).option(name)}}]%
{\csdef{\cnc@d{concept(#1).option(Name)}}{##1}}%
\ltxkeys@newordkey[cnc]{#1}{plural}%
- [\cnc@g{concept(#1).option(name)}s]%
+ [\cnc@g{concept(#1).option(name)}\unskip s]%
{\csdef{\cnc@d{concept(#1).option(plural)}}{##1}}%
\ltxkeys@newordkey[cnc]{#1}{Plural}%
[\cnc@upper{\cnc@g{concept(#1).option(plural)}}]%
{\csdef{\cnc@d{concept(#1).option(Plural)}}{##1}}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We next register the |namecmd| option. Its default value is the
% concept key with a |\| in front of it. Unlike most other options,
@@ -555,27 +560,27 @@
% user to actually define the macro. The following code also
% contains the test.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\expandaftercmds{\ltxkeys@newordkey[cnc]{#1}{namecmd}%
[}{\csname#1\endcsname}]{%
\iftoggle{\cnc@d{concept(#1).option(namecmd).given}}{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We register the option value as given.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\csdef{\cnc@d{concept(#1).option(namecmd)}}{\noexpand##1}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%%% \vphantom{x}\marginnote{\meta{namecmd}} \movarg{*} \movarg{\textasciicircum}
% \movarg{*}
-% \oarg{indices}\\\nopagebreak
+% \oarg{indices}\\\nopagebreak\noindentnext
%
% \noindent If the option is processed, we define the concept-specific
% name command. We distinguish between two cases: whether an index-list
% was provided or not.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NewDocumentCommand{##1}{t* t^ t* +o}{%
\IfValueTF{####4}{%
\cnc@nameandsymbols{#1}{####1}{####2}{####3}%
@@ -584,21 +589,21 @@
\cnc@conceptname{####1}{####2}{####3}{#1}%
}%
}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}{}%
}%
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
% We now register the |symbols| option. This option expects a list.
% The callback of the following code processes it one symbol at a time.
% And we first initialize the symbol counter to 0 in case the list is
% empty
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\csdef{\cnc@d{concept(#1).option(symbols).count}}{0}%
\ltxkeys@newlistkey[cnc]{#1}{symbols}[]{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We check if this particular symbol is already defined. We don't want
% a symbol allocated to different concepts. Or allocated twice to the
@@ -606,7 +611,7 @@
% counter for this concept, we add the symbol itself and we update
% the reverse map we use for checking duplicates.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ifcsundef{\cnc@d{symbol(\detokenize{##1}).concept}}{%
\csedef{\cnc@d{concept(#1)%
.option(symbols)%
@@ -616,11 +621,11 @@
.index(\ltxkeys@listcount)}}{##1}%
\csedef{\cnc@d{symbol(\detokenize{##1}).concept}}{#1}%
}%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% If the symbol is already in use we report a package error.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
{%
\PackageError{concepts}%
{The symbol '\detokenize{##1}' is already allocated
@@ -629,26 +634,26 @@
{I will pretend that you did not
try to add this symbol.}%
}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}%
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
% We register the |symbolcmd| option. It does not really have a default,
% but we give an empty default so we can test for the empty string inside.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ltxkeys@newordkey[cnc]{#1}{symbolcmd}[]{%
\ifblank{##1}{}{%
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% We register the option value as given.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\csdef{\cnc@d{concept(#1).option(symbolcmd)}}{\noexpand##1}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
-%%% \vphantom{x}\marginnote{\meta{symbolcmd}} \momarg{index}\\\nopagebreak
+%%% \vphantom{x}\marginnote{\meta{symbolcmd}} \momarg{index}\\\nopagebreak\noindentnext
%
% \noindent If the option is processed, we now define the concept-specific
% `short' command used to typeset one or more of the allocated symbols. It
@@ -657,7 +662,7 @@
% we pass control to the |\cnc@conceptsymbols| command, which is still able
% to grab a square bracket delimited list of indices.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newrobustcmd*{##1}{%
\cnc@grabnumber{%
\IfInteger{########1}{%
@@ -667,21 +672,21 @@
}%
}%
}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}%
}%
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
% Finally, we issue the command to parse and process all options.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\ltxkeys@launchkeys[cnc]{#1}{#2}%
-% \end{macrocode}\end{codeframe}
-% \begin{uninterestingcodeframe}\begin{macrocode}
+% \end{macrocode}
+% \uninteresting\begin{macrocode}
}%
}
-% \end{macrocode}\end{uninterestingcodeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -689,17 +694,17 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\ConceptOption} \marg{concept key}
-%%% \marg{option key}\\\nopagebreak
+%%% \marg{option key}\\\nopagebreak\noindentnext
%
% The point of this command is that it can retrieve any option value
% in an expandable way. That means we can't use |xparse|, but we don't
% need it.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\newcommand*{\ConceptOption}[2]{%
\cnc@g{concept(#1).option(#2)}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
% Unfortunately, as of writing this, not all options are stored in a
% fully expandable way yet. But they will be in a later version.
@@ -711,16 +716,16 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\ConceptName} \movarg{*} \movarg{\textasciicircum}
% \movarg{*}
-%%% \marg{concept key}\\\nopagebreak
+%%% \marg{concept key}\\\nopagebreak\noindentnext
%
% This implementation simply calls our private macro for retrieving
% the name in one of four forms.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NewDocumentCommand{\ConceptName}{t* t^ t* m}{%
\cnc@conceptname{#1}{#2}{#3}{#4}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -728,17 +733,17 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\ConceptSymbol} \marg{concept key}
-%%% \oarg{index}\\\nopagebreak
+%%% \oarg{index}\\\nopagebreak\noindentnext
%
% This implementation simply calls our private macro for retrieving
% the symbol with the given index. The index is optional and
% defaults to 1.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NewDocumentCommand{\ConceptSymbol}{m O{1}}{%
\cnc@conceptsymbol{#1}{#2}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -748,13 +753,13 @@
% \begin{macro}{\ConceptSymbols} \marg{concept key}
% \oarg{separator}
% \oarg{last separator}
-%%% \marg{indices}\\\nopagebreak
+%%% \marg{indices}\\\nopagebreak\noindentnext
%
% This implementation simply calls our private macro for retrieving
% the symbol list with the given indices. The index-list is mandatory
% but can be empty.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NewDocumentCommand{\ConceptSymbols}{m +O{,} +o m}{%
\IfValueTF{#3}{%
\cnc@conceptsymbols{#1}{#2}{#3}[#4]%
@@ -762,7 +767,7 @@
\cnc@conceptsymbols{#1}{#2}{#2}[#4]%
}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -770,18 +775,18 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \begin{macro}{\ConceptNameAndSymbols} \marg{concept key}
-%%% \marg{indices}\\\nopagebreak
+%%% \marg{indices}\\\nopagebreak\noindentnext
%
% This implementation simply calls our private macro for typesetting
% the concept name and the symbol list with the given indices. The
% index-list is mandatory and cannot be empty.
%
-% \begin{codeframe}\begin{macrocode}
+% \begin{macrocode}
\NewDocumentCommand{\ConceptNameAndSymbols}{t^ m +O{,} +O{$ and $} m}{%
\cnc@nameandsymbols{#2}{\BooleanFalse}{#1}{\BooleanFalse}%
{#3}{#4}{#5}%
}
-% \end{macrocode}\end{codeframe}
+% \end{macrocode}
%
%\end{macro}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Master/texmf-dist/tex/latex/concepts/dry.sty b/Master/texmf-dist/tex/latex/concepts/dry.sty
index 2ff5646046a..fd639991cee 100644
--- a/Master/texmf-dist/tex/latex/concepts/dry.sty
+++ b/Master/texmf-dist/tex/latex/concepts/dry.sty
@@ -2,7 +2,7 @@
% %
% Copyright (c) 2012 - Michiel Helvensteijn (www.mhelvens.net) %
% %
-% http://latex-concepts.googlecode.com %
+% http://latex-with.googlecode.com %
% %
% This work may be distributed and/or modified under the conditions %
% of the LaTeX Project Public License, either version 1.3 of this %
@@ -20,14 +20,14 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi %%%%
% I will 'officially' release this package at some point in the future. For
-% now I'm just using it to document the concepts package. Still, it's
+% now I'm just using it to document a couple of packages. Still, it's
% released under LPPL, so use it as you will.
%
% -- Michiel Helvensteijn
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dry}
- [2012/12/16 convenience macros for reusing LaTeX code]
+ [2012/12/19 convenience macros for reusing LaTeX code]
\RequirePackage{filecontents}
\RequirePackage{xparse}
@@ -35,32 +35,22 @@
\RequirePackage{with}
\newcommand\minput[1]{%
- \input{#1}%
- \ifhmode\ifnum\lastnodetype=11%
- \unskip%
- \fi\fi%
+ \input{#1}\unskip%
}
-\NewDocumentCommand{\NewDRYer}{m m +m}{%
- \WithUniqueCsname[#1]{%
- \csgdef{dry@filebase@##1}{##1}%
- \csgdef{dry@filename@##1}{\csuse{dry@filebase@##1}.tmp}%
- %
- % WARNING: Custom argument specs #2, but cannot end with an optional argument!
- \NewDocumentEnvironment{#1}{#2}{%
+\NewDocumentCommand{\NewDRYer}{m +m}{%
+ \with{un} [#1] [#2] {%
+ \newenvironment{#1}{%
\begingroup%
- \@tempswafalse\filec@ntents{\csuse{dry@filename@##1}}%
+ \@tempswafalse\filec@ntents{##1.tmp}%
}{%
\endfilecontents%
\endgroup%
}%
- %
\AfterEndEnvironment{#1}{%
- \def\DRYFilename{\csuse{dry@filename@##1}}%
- \def\DRYContent{\minput{\csuse{dry@filename@##1}}}%
- #3%
- \let\DRYFilename\relax%
- \let\DRYContent\relax%
+ \with{xn} [##1.tmp] [\minput{##1.tmp}] {%
+ ##2%
+ }%
}%
}%
}
diff --git a/Master/texmf-dist/tex/latex/concepts/packagedoc.cls b/Master/texmf-dist/tex/latex/concepts/packagedoc.cls
new file mode 100644
index 00000000000..1c261b98362
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/concepts/packagedoc.cls
@@ -0,0 +1,353 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Copyright (C) 2012 by Michiel Helvensteijn - www.mhelvens.net %
+% %
+% This work may be distributed and/or modified under the %
+% conditions of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later %
+% version. The latest version of this license is in %
+% http://www.latex-project.org/lppl.txt %
+% and version 1.3 or later is part of all distributions of %
+% LaTeX version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status `author-maintained'. %
+% %
+% The Current Maintainer of this work is Michiel Helvensteijn. %
+% %
+% This work consists of the file packagedoc.cls. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\packagename\jobname
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Document Class %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LoadClassWithOptions{ltxdoc}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Importing The Relevant Package %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\RequirePackage{\packagename}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Importing Other Packages %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\RequirePackage{etoolbox}
+\RequirePackage[xcolor]{mdframed}
+\RequirePackage{marginnote}
+\RequirePackage{listings}
+\RequirePackage{textcomp}
+\RequirePackage[pdftex,colorlinks=true]{hyperref}
+\RequirePackage{dry}
+\RequirePackage{needspace}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Documentation Options %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% File Info %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\GetFileInfo{\packagename.sty}
+
+\title{The \textsf{\packagename} package\thanks{%
+ This document corresponds to \textsf{\packagename}~\fileversion,
+ dated \filedate.%
+}}
+
+\author{
+ Michiel Helvensteijn\\
+ \href{mailto:mhelvens+latex@gmail.com}{mhelvens+latex@gmail.com}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Development Info %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newmdenv[
+ leftline = false,
+ rightline = false
+]{bannerframe}
+
+\apptocmd{\maketitle}{
+ \begin{bannerframe}
+ \small
+ \begin{center}
+ Development of this package is organized at
+ \href{http://latex-\packagename.googlecode.com}
+ {latex-\packagename.googlecode.com}.\\
+ I am happy to receive feedback there!
+ \end{center}
+ \end{bannerframe}
+}{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Skipping Paragraph Indentation After Specific Stuff %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\packagedoc@old@par\par
+
+\newcommand*{\noindentnext}{%
+ \def\par{%
+ \packagedoc@old@par%
+ \noindent%
+ \let\par\packagedoc@old@par%
+ }%
+}
+
+\newcommand*{\noindentafterenv}[1]{
+ \AfterEndEnvironment{#1}{\noindentnext}
+}
+
+\newcommand*{\noindentaftercmd}[1]{
+ \apptocmd{#1}{\noindentnext}{}{
+ \ClassError{packagedoc}
+ {Could not patch \protect#1\space command.}
+ {Oops! I tried to auto-skip any indentation after the
+ \protect#1\space command, but I failed somehow.}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Example Environment Setup %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Extra keywords for LaTeX
+%
+\newcommand{\moretexcs}[1]{
+ \lstdefinelanguage{latex}{
+ language=[LaTeX]tex,
+ moretexcs={ExplSyntaxOn,ExplSyntaxOff,lstinputlisting,detokenize,#1}
+ }
+}
+
+%%% Code formatting
+%
+\lstdefinestyle{examplecode}{%
+ language=latex,%
+ basicstyle=\ttfamily\small,%
+ texcsstyle=*\bfseries,%
+ upquote=true%
+}
+
+
+
+%%% Setting up example code block
+%
+\definecolor{examplecodelinecolor}{rgb}{0,0,0}
+\definecolor{examplecodebackgroundcolor}{rgb}{.9,.9,.9}
+\newmdenv[
+ linecolor = examplecodelinecolor,
+ backgroundcolor = examplecodebackgroundcolor,
+ skipabove = 0px,
+ skipbelow = 0px,
+ innertopmargin = -3px,
+ innerrightmargin = 4px,
+ innerbottommargin = -3px,
+ innerleftmargin = 4px
+]{examplecodeframe}
+
+%%% Defining example output block
+%
+\definecolor{exampleoutputbackgroundcolor}{rgb}{1,1,1}
+\newmdenv[
+ linecolor = examplecodelinecolor,
+ backgroundcolor = exampleoutputbackgroundcolor,
+ skipabove = 0px,
+ skipbelow = 0px,
+ innertopmargin = 4px,
+ innerrightmargin = 4px,
+ innerbottommargin = 4px,
+ innerleftmargin = 4px
+]{exampleoutputframe}
+
+%%% Macros for counting lines in file, adapted from
+%%% http://andreas.scherbaum.la/blog/archives/
+%%% 670-Read-number-lines-in-a-file-in-LaTeX.html
+%
+\RequirePackage{ifthen}
+\newboolean{packagedoc@restfile}
+\newcommand*{\packagedoc@fileline}{}
+\newread\packagedoc@file
+\newcommand*{\packagedoc@readnextline}[1]{%
+ \ifthenelse{\boolean{packagedoc@restfile}}{%
+ \read#1 to \packagedoc@fileline%
+ \ifeof#1\setboolean{packagedoc@restfile}{false}%
+ \else\fi%
+ }{}%
+}
+\newcommand*{\countlinesinfile}[2]{%
+ \setboolean{packagedoc@restfile}{true}%
+ \setcounter{packagedoc@linecount}{0}%
+ \openin\packagedoc@file=#1%
+ \whiledo{\boolean{packagedoc@restfile}}{%
+ \packagedoc@readnextline{\packagedoc@file}%
+ \ifthenelse{\boolean{packagedoc@restfile}}{%
+ \stepcounter{packagedoc@linecount}%
+ }{}%
+ }%
+ \closein\packagedoc@file%
+ \edef#2{\thepackagedoc@linecount}%
+}
+
+\newcounter{packagedoc@linecount}
+\newlength{\packagedoc@spacetoreserve}
+
+%%% DRYer without output
+%
+\NewDRYer{latex-example}{%
+ \addvspace{4px}%
+ {%
+ \ttfamily\small%
+ \countlinesinfile{#1}{\countedlines}%
+ \setlength{\packagedoc@spacetoreserve}{\countedlines\baselineskip}%
+ \addtolength{\packagedoc@spacetoreserve}{-4px}%
+ \needspace{\packagedoc@spacetoreserve}%
+ }%
+ \begin{examplecodeframe}%
+ \renewcommand{\ttdefault}{pcr}%
+ \lstinputlisting[style=examplecode]{#1}%
+ \end{examplecodeframe}%
+ #2%
+ \noindentnext%
+ \addvspace{4px}%
+}
+
+%%% DRYer WITH output but WITHOUT side-effects
+%
+\NewDRYer{latex-example-show}{%
+ \addvspace{4px}%
+ {%
+ \ttfamily\small%
+ \countlinesinfile{#1}{\countedlines}%
+ \setlength{\packagedoc@spacetoreserve}{\countedlines\baselineskip}%
+ \addtolength{\packagedoc@spacetoreserve}{\baselineskip}%
+ \needspace{\packagedoc@spacetoreserve}%
+ }%
+ \begin{examplecodeframe}%
+ \renewcommand{\ttdefault}{pcr}%
+ \lstinputlisting[style=examplecode]{#1}%
+ \end{examplecodeframe}\vspace{-4px}%
+ \begin{exampleoutputframe}%
+ #2%
+ \end{exampleoutputframe}%
+ \noindentnext%
+ \addvspace{4px}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Implementation Code Box Setup %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Saving old implementation code block font
+%
+\AtBeginDocument{\let\old@macro@font\macro@font}
+
+%%% Setup for 'interesting' implementation code blocks
+%
+\definecolor{interestingcodebackgroundcolor}{rgb}{.9,.9,.9}
+\definecolor{interestingcodelinecolor}{rgb}{0,0,0}
+\mdfdefinestyle{interestingcode}{
+ linecolor = interestingcodelinecolor,
+ backgroundcolor = interestingcodebackgroundcolor
+}
+\newcommand*{\interesting}{%
+ \def\codestyle{interestingcode}%
+ \def\codeskipabove{5px}%
+ \let\macro@font\old@macro@font%
+}
+
+%%% Setup for 'UNinteresting' implementation code blocks
+%
+\definecolor{uninterestingcodebackgroundcolor}{rgb}{.97,.97,.97}
+\definecolor{uninterestingcodelinecolor}{rgb}{.5,.5,.5}
+\definecolor{uninterestingcodecolor}{rgb}{.4,.4,.4}
+\mdfdefinestyle{uninterestingcode}{
+ linecolor = uninterestingcodelinecolor,
+ backgroundcolor = uninterestingcodebackgroundcolor,
+}
+\newcommand*{\uninteresting}{%
+ \def\codestyle{uninterestingcode}%
+ \def\codeskipabove{-5px}%
+ \def\macro@font{\color{uninterestingcodecolor}\old@macro@font}%
+}
+
+%%% Actually surround 'macrocode' with the frame
+%
+\surroundwithmdframed[
+ style = \codestyle,
+ skipabove = \codeskipabove,
+ skipbelow = 5px,
+ splittopskip = 10px,
+ splitbottomskip = 4px,
+ innertopmargin = 4px,
+ innerrightmargin = 4px,
+ innerbottommargin = 4px,
+ innerleftmargin = 4px
+]{macrocode}
+
+\noindentafterenv{macrocode}
+
+%%% Start out with 'interesting' code status and
+%%% always go back to it after one code block
+%
+\interesting
+\AfterEndEnvironment{macrocode}{\interesting}
+
+%%% No indentation after macrocode block
+%
+\noindentafterenv{macrocode}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Argument Specifiers and such %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand*{\movarg}[1]{[ \texttt{#1} ]}
+\newcommand*{\momarg}[1]{[ \meta{#1} ]}
+
+\newcommand{\describemacro}[2]{%
+ \needspace{3\baselineskip}%
+ \noindent\\\DescribeMacro{#1} #2\\\noindentnext%
+}
+
+\newcommand{\describemetamacro}[2]{%
+ \needspace{3\baselineskip}%
+ \noindent\\\marginnote{\meta{#1}} #2\\\noindentnext%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Other Stuff %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\noindentafterenv{description}
+\noindentafterenv{itemize}
+\noindentafterenv{enumerate}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Automatic Implementation Docs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\AtEndDocument{
+ \pagebreak
+
+ \section{Implementation}
+
+ \StopEventually {\PrintChanges}
+
+ We now show and explain the entire implementation from \texttt{\packagename.sty}.
+
+ \DocInput{\packagename.sty}
+
+ \Finale
+
+ \PrintIndex
+}
diff --git a/Master/texmf-dist/tex/latex/concepts/with.sty b/Master/texmf-dist/tex/latex/concepts/with.sty
index 4e94ac02516..49e16dac493 100644
--- a/Master/texmf-dist/tex/latex/concepts/with.sty
+++ b/Master/texmf-dist/tex/latex/concepts/with.sty
@@ -2,7 +2,7 @@
% %
% Copyright (c) 2012 - Michiel Helvensteijn (www.mhelvens.net) %
% %
-% http://latex-concepts.googlecode.com %
+% http://latex-with.googlecode.com %
% %
% This work may be distributed and/or modified under the conditions %
% of the LaTeX Project Public License, either version 1.3 of this %
@@ -15,89 +15,295 @@
% %
% The Current Maintainer of this work is Michiel Helvensteijn. %
% %
-% This work consists of the file with.sty. %
+% This work consists of the file with.sty and with.tex. %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi %%%%
-% I will 'officially' release this package at some point in the future. For
-% now I'm just using it to document the concepts package. Still, it's
-% released under LPPL, so use it as you will.
+% \CheckSum{0}
%
-% -- Michiel Helvensteijn
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Package Info} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
-\ProvidesExplPackage{with}{2012/12/16}{0.0.1}
- {an inline construct for passing token lists as ##1-type arguments}
+\ProvidesExplPackage{with}{2012/12/23}{0.0.1}
+ {an inline construct for passing token lists as parameters}
+% \end{macrocode}
-\cs_new_eq:NN \qnv \q_no_value
-\cs_new:Nn \with:nn {
- \with:nnnnnnnnn {#1}\qnv\qnv\qnv\qnv\qnv\qnv\qnv{#2}
-}
-\cs_new:Nn \with:nnn {
- \with:nnnnnnnnn {#1}{#2}\qnv\qnv\qnv\qnv\qnv\qnv{#3}
-}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Required Packages} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% \begin{macrocode}
+\RequirePackage{xparse}
+\RequirePackage{l3regex}
+% \end{macrocode}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Package Code} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% \begin{macrocode}
+\cs_generate_variant:Nn \cs_generate_variant:Nn {cn}
+% \end{macrocode}
-\cs_new:Nn \with:nnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}\qnv\qnv\qnv\qnv\qnv{#4}
-}
-\cs_new:Nn \with:nnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}\qnv\qnv\qnv\qnv{#5}
-}
-\cs_new:Nn \with:nnnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}{#5}\qnv\qnv\qnv{#6}
+% \begin{macrocode}
+\cs_new:Nn \gen_use:nn {
+ \cs_generate_variant:cn
+ { #1 : \prg_replicate:nn{\tl_count:n{#2}}{n} }
+ { #2 }
+ \use:c{ #1 : #2 }
}
+% \end{macrocode}
-\cs_new:Nn \with:nnnnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}\qnv\qnv{#7}
+
+
+% \begin{macrocode}
+\cs_new_protected:Nn \with:n {#1}
+\cs_new_protected:Nn \with:nn {
+ \cs_set:Npn \__with:n ##1 {#2}
+ \__with:n {#1} }
+\cs_new_protected:Nn \with:nnn {
+ \cs_set:Npn \__with:nn ##1##2 {#3}
+ \__with:nn {#1}{#2} }
+\cs_new_protected:Nn \with:nnnn {
+ \cs_set:Npn \__with:nnn ##1##2##3 {#4}
+ \__with:nnn {#1}{#2}{#3} }
+\cs_new_protected:Nn \with:nnnnn {
+ \cs_set:Npn \__with:nnnn ##1##2##3##4 {#5}
+ \__with:nnnn {#1}{#2}{#3}{#4} }
+\cs_new_protected:Nn \with:nnnnnn {
+ \cs_set:Npn \__with:nnnnn ##1##2##3##4##5 {#6}
+ \__with:nnnnn {#1}{#2}{#3}{#4}{#5} }
+\cs_new_protected:Nn \with:nnnnnnn {
+ \cs_set:Npn \__with:nnnnnn ##1##2##3##4##5##6 {#7}
+ \__with:nnnnnn {#1}{#2}{#3}{#4}{#5}{#6} }
+\cs_new_protected:Nn \with:nnnnnnnn {
+ \cs_set:Npn \__with:nnnnnnn ##1##2##3##4##5##6##7 {#8}
+ \__with:nnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7} }
+\cs_new_protected:Nn \with:nnnnnnnnn {
+ \cs_set:Npn \__with:nnnnnnnn ##1##2##3##4##5##6##7##8 {#9}
+ \__with:nnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8} }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\msg_new:nnnn{with}{invalid-parameter-specs}{
+ The~argument~specification~'#1'~is~not~valid.
+}{
+ The~argument~specification~should~consist~of~between~
+ one~and~seven~of~the~letters~'n',~'o',~'f',~'x',~'u'~or~'U'.
}
+% \end{macrocode}
+
-\cs_new:Nn \with:nnnnnnnn {
- \with:nnnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}\qnv{#8}
+
+% \begin{macrocode}
+\msg_new:nnnn{with}{invalid-parameter-number}{
+ You~specified~#1~arguments~but~provided~#2.
+}{
+ Your~argument~specification~is~'#3',~which~means~you~should~
+ provide~#1~optional~arguments.~However,~you~provided~only~#2.
}
+% \end{macrocode}
+
-\cs_new:Nn \with:nnnnnnnnn {
- \cs_set:Nn \with_aux:nnnnnnnn {#9}
- \with_aux:nnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+
+% \begin{macrocode}
+\tl_new:N \l__with_argspec_tl
+\tl_new:c {l__with_p_1_tl} \tl_new:c {l__with_p_2_tl}
+\tl_new:c {l__with_p_3_tl} \tl_new:c {l__with_p_4_tl}
+\tl_new:c {l__with_p_5_tl} \tl_new:c {l__with_p_6_tl}
+\tl_new:c {l__with_p_7_tl}
+\tl_new:N \l__with_code_tl
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\int_new:N \l__with_arg_int
+\cs_new:Nn \__with_param_name: {
+ l__with_p_
+ \int_use:N\l__with_arg_int
+ _tl
}
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\tl_new:N \l__with_unique_counter_tl
+\tl_new:N \l__with_param_tl
+% \end{macrocode}
+
+
+% \begin{macrocode}
\cs_generate_variant:Nn \with:nn {xn}
-\cs_generate_variant:Nn \with:nnn {xxn}
-\cs_generate_variant:Nn \with:nnnn {xxxn}
-\cs_generate_variant:Nn \with:nnnnn {xxxxn}
-\cs_generate_variant:Nn \with:nnnnnn {xxxxxn}
-\cs_generate_variant:Nn \with:nnnnnnn {xxxxxxn}
-\cs_generate_variant:Nn \with:nnnnnnnn {xxxxxxxn}
-\cs_generate_variant:Nn \with:nnnnnnnnn {xxxxxxxxn}
-
-\NewDocumentCommand{\With}{+o+o+o+o+o+o+o+o+m}{
- \IfValueTF{#8}{ \with:xxxxxxxxn{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9} }{
- \IfValueTF{#7}{ \with:xxxxxxxn {#1}{#2}{#3}{#4}{#5}{#6}{#7} {#9} }{
- \IfValueTF{#6}{ \with:xxxxxxn {#1}{#2}{#3}{#4}{#5}{#6} {#9} }{
- \IfValueTF{#5}{ \with:xxxxxn {#1}{#2}{#3}{#4}{#5} {#9} }{
- \IfValueTF{#4}{ \with:xxxxn {#1}{#2}{#3}{#4} {#9} }{
- \IfValueTF{#3}{ \with:xxxn {#1}{#2}{#3} {#9} }{
- \IfValueTF{#2}{ \with:xxn {#1}{#2} {#9} }{
- \IfValueTF{#1}{ \with:xn {#1} {#9} }
- {#9}
+\cs_generate_variant:Nn \with:nnnnnnnnn {oooooooon}
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+\NewDocumentCommand \with {m +o +o +o +o +o +o +o +m} {
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \regex_match:nnF {^[noxfuU]{1,7}$} {#1}
+ { \msg_critical:nnn{with}{invalid-parameter-specs}{#1} }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \tl_set:Nn \l__with_argspec_tl {#1}
+ \int_zero:N \l__with_arg_int
+ \IfValueT{#2} {
+ \tl_set:cn {l__with_p_1_tl} {#2} \int_incr:N \l__with_arg_int
+ \IfValueT{#3} {
+ \tl_set:cn {l__with_p_2_tl} {#3} \int_incr:N \l__with_arg_int
+ \IfValueT{#4} {
+ \tl_set:cn {l__with_p_3_tl} {#4} \int_incr:N \l__with_arg_int
+ \IfValueT{#5} {
+ \tl_set:cn {l__with_p_4_tl} {#5} \int_incr:N \l__with_arg_int
+ \IfValueT{#6} {
+ \tl_set:cn {l__with_p_5_tl} {#6} \int_incr:N \l__with_arg_int
+ \IfValueT{#7} {
+ \tl_set:cn {l__with_p_6_tl} {#7} \int_incr:N \l__with_arg_int
+ \IfValueT{#8} {
+ \tl_set:cn {l__with_p_7_tl} {#8} \int_incr:N \l__with_arg_int
}}}}}}}
-}
+ \tl_set:Nn \l__with_code_tl {#9}
+% \end{macrocode}
-\int_new:c{g_with_uniquecsname_count}
-\cs_new:Nn \with_uniquecsname:n {
- \with_uniquecsname:xn {uniquecsname} {#1}
-}
-\cs_new:Nn \with_uniquecsname:xn {
- \int_incr:c {g_with_uniquecsname_count}
- \with:xn {#1\int_use:c{g_with_uniquecsname_count}} {#2}
-}
+% \begin{macrocode}
+ \int_compare:nNnF {\tl_count:n{#1}} = {\l__with_arg_int} {
+ \msg_error:nnxxx{with}{invalid-parameter-number}
+ { \tl_count:n{#1} }
+ { \int_use:N \l__with_arg_int }
+ { #1 }
+ }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \tl_replace_all:Nnn \l__with_argspec_tl {u} {x}
+ \tl_replace_all:Nnn \l__with_argspec_tl {U} {c}
+% \end{macrocode}
-\NewDocumentCommand{\WithUniqueCsname}{O{uniquecsname}+m}{
- \with_uniquecsname:xn {#1} {#2}
+
+
+% \begin{macrocode}
+ \int_zero:N \l__with_arg_int
+ \tl_map_inline:nn {#1} {
+ \int_incr:N \l__with_arg_int
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \tl_if_in:nnT {uU} {##1} {
+ \tl_set:Nx \l__with_unique_counter_tl
+ { g__with_unique_ \use:c{\__with_param_name:} _count_int }
+
+ \int_if_exist:cF {\l__with_unique_counter_tl}
+ { \int_new:c {\l__with_unique_counter_tl} }
+
+ \int_incr:c {\l__with_unique_counter_tl}
+
+ \tl_put_left:cx {\__with_param_name:}
+ { g_with_unique_ }
+
+ \tl_put_right:cx {\__with_param_name:}
+ { _ \int_use:c{\l__with_unique_counter_tl} }
+ }
+% \end{macrocode}
+
+
+
+% \uninteresting\begin{macrocode}
+ }
+% \end{macrocode}
+
+
+
+% \begin{macrocode}
+ \with:oooooooon {\l__with_argspec_tl}
+ {\cs:w l__with_p_1_tl \cs_end:}
+ {\cs:w l__with_p_2_tl \cs_end:}
+ {\cs:w l__with_p_3_tl \cs_end:}
+ {\cs:w l__with_p_4_tl \cs_end:}
+ {\cs:w l__with_p_5_tl \cs_end:}
+ {\cs:w l__with_p_6_tl \cs_end:}
+ {\cs:w l__with_p_7_tl \cs_end:} {
+ \with:oooooooon {##1o}{##2}{##3}{##4}
+ {##5}{##6}{##7}{##8} {
+ \int_case:nnn {\l__with_arg_int} {
+ {1} { \gen_use:nn{with}{####1}
+ {####2} {\l__with_code_tl} }
+ {2} { \gen_use:nn{with}{####1}
+ {####2}{####3} {\l__with_code_tl} }
+ {3} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4} {\l__with_code_tl} }
+ {4} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5} {\l__with_code_tl} }
+ {5} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5}{####6} {\l__with_code_tl} }
+ {6} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5}{####6}{####7} {\l__with_code_tl} }
+ {7} { \gen_use:nn{with}{####1}
+ {####2}{####3}{####4}
+ {####5}{####6}{####7}
+ {####8} {\l__with_code_tl} }
+ }{}
+ }
+ }
+% \end{macrocode}
+
+
+
+% \uninteresting\begin{macrocode}
}
+% \end{macrocode}
+
+