%% %% \iffalse ^^A we skip the debug setting \IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{} %% \fi %% ^^A $Id: TheUltimateMaster.gmd,v 0.352 2011/10/12 15:19:42 natror Exp natror $ %% This is file “gmampulex.sty” generated with the DocStrip utility. %% %% %% The original source files were: %% %% gmutils/gmutils.gmd (with options: `ampulex') %% %% %% Copyright © %% by Grzegorz ‘Natror’ Murzynowski %% natror (at) gmail (dot) com %% %% This program is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% LPPL status: "author-maintained". %% %% %% %% For documentation please refer to the file(s) %% gmutils.{gmd,pdf}. %% %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{gmampulex} [2011/10/12 v0.996 Ampulex Compressa-like modifier of macros (GM)] %% %% %% ^^A\typeout{\unexpanded{#4}}%% \RequirePackage{gmcommand} \DeclareCommand\ampulexlet\long {Q{\outer\long\global\protected}{} % (1) (optional) prefix\:(es); % allowed is any sequence of them in any order, just like for the % original \TeX's \incmd\def. T{\def\edef\gdef\xdef\pdef}{\def} % (2) (optional) kind of definition; if % not specified, \incmd\def\ will be used. m % (3) macro to be let to, m % (4) macro to provide the definition, O{} % (5) \cs{def}'s parameters string; empty by default, O{} % (6) definition body's parameters to be taken in a~one-step % expansion of the redefined macro; empty by default; the % undelimited parameters should be double-braced here. m % (7) start token(s), m % (8) end token(s) m % (9) the replacement of |#7|, |#8| and whatever between them. }{%^^B % \changes{v0.93}{2008/08/29}{added} % \changes{v0.94}{2008/09/07}{made \pk{xparse}-ish and % \cs{ampulexset} removed} % \chgs{2008/12/7 v0.98 first argument (the prefix) made of the % \env{Q} type} % For the example of usage see \ref{ampulexset}. \HideDef % \long\def\gmu@ampulexlet@resa ##1#7% we put |#7| as a delimiter ##2#8% we put |#8| as a delimiter ##3\gmu@AmpulexDelimiter{% % We use a special (undefined) \CS |\gmu@AmpulexDelimiter| as % the final delimiter because standard \LaTeX's |\@nil| isn't % probably a good idea since we % want to ampulex deep \LaTeX's macros and other |\gmu@›…| % macros too. \gmu@ifempty{##3}% }% % Now |\gmu@ampulexlet@resa| is redefined to produce an open |\gmu@ifempty| % depending on whether the start and end token(s) are found in the % meaning of \inverb|#4|. % % Before we proceed, we deal with a difficulty with a special case % when |#6| is “|#1|”, which occurs because of stripping braces of a % single-brace argument. \gmu@ifutokens{#6}{##1}% {\def\ampulex@Args{{% ####1}}% }% {\edef\ampulex@Args{\@nx\unexpanded{% \unexpanded{#6}}}}% \long \def\gmu@ampulexlet@resc##1{% \@xa\@xa\@xa\@xa \@xa\@xa\@xa\gmu@ampulexlet@resa \@xa\@xa\@xa#4% \ampulex@Args ##1% this parameter will be substituted with |#7#8| in % line~\ref{resc1} and with emptiness in line~\ref{resc2}. \gmu@AmpulexDelimiter }% % \gmu@ampulexlet@resc{#7#8}%\label{resc1} % ^^V \gmu@ampulexlet@resb % We've just applied the checker and it produces an open % |\gmu@ifempty{⁄}| % if the delimiters are found in the meaning of |#4| % so, if \ are none, we issue a warning {% \PackageWarning{gmampulex}{% \@nx#4 doesn't contain tokens \detokenize{#7} nor \detokenize{#8}. You better check if this is what you want to redefine.^^J% \@nx#4 is^^J% \meaning#4^^J% }}% % and we proceed if they are really some {% % We define a~temporary % macro with the parameters delimited with the `start' and `end' parameters % of \incs{ampulexdef}. It has to stand a double |\edef|. \edef\gmu@ampulexlet@resa{% \long\def\@nx\gmu@ampulexlet@resa ####1\unexpanded{#7}% ####2\unexpanded{#8}% ####3\@nx\gmu@AmpulexDelimiter{% \@nx\unexpanded{####1}% % we drop the part between the |#7| and |#8| delimiters % (including delimiters) \unexpanded{\unexpanded{#9}}% we replace the part of the % redefined macro's meaning with the replacement text. \@nx\unexpanded{####3}% }% of inner |\gmu@ampulexlet@resa| }% of outer |\gmu@ampulexlet@resa| \gmu@ampulexlet@resa % Now |\gmu@ampulexlet@resa| carries the modifier of |#4|'s % definition. % % \unless\ifx\czat#4% \edef\gmu@ampulexlet@resb{% double definition for double hashes of expanded % |\unexpanded{#1›…}| #1#2% \@nx#3\unexpanded{#5}{% \gmu@ampulexlet@resc{}%\label{resc2} % Here we are sure the tokens sequences % |#7| and |#8| are in the one-level expansion of |#4| so we don't pass them % as sentinels (which \ac{BTW} would totally spoil the redefinition, what it % did indeed 2010/6/23). }% of |#3|'s definition body }% of inner |\gmu@ampulexlet@resb| \gmu@ampulexlet@resb \else \gmu@ifxany#2{\gdef\xdef}{\global}{}% #1\edef#3#5{\gmu@ampulexlet@resc{}}%\label{resc2} \fi }% of if the delimiters were found in the meaning. }% of |\ampulexlet| \DeclareCommand\ampulexdef\long{% % \chgs{2010/04/22 v0.994 rewritten not to use the arguments 7–9 % explicitly not to wrap them in a temporary macros, and to accept % single hashes (instead of quadruple) in arguments 5 and 6. The % temporary macros renamed % to \cmd\gmu@reserveda and \cmd\gmu@reservedb. The body moved to % \cmd\ampulexlet with adding another \CS argument to let let a % macro not necessarily redefine it itself and this command made a % particular case of that new one} #1 Q{\outer\long\global\protected}{} % (1) as |\ampulexlet| #2 T{\def\edef\gdef\xdef\pdef}{\def} % (2) ad |\ampulexlet| #3 m % (3) macro to be redefined, #4 O{} % (4) as |\ampulexlet|'s |#5|, i.e., \cs{def}'s parameters string; empty by default, #5 O{} % (5) as |\ampulexlet|'s |#6|, i.e., definition body's % parameters to be taken in a~one-step expansion of the redefined % macro; empty by default; the undelimited parameters should be % double-braced here (but not doubled). #6 m % (6) start token(s), #7 m % (7) end token(s), #8 m % (8) the replacement }{% \DCUse\ampulexlet{#1}{#2}{#3}{#3}{#4}{#5}{#6}{#7}{#8}% } \def\gmu@ENumLoop#1#2{% this is a~fully expandable loop generating |#2|${}-{}$|#1| % space tokens (cf. The % \eTeX\ Manual p.~9). \ifnum#1<#2 % \gmu@tempa \@xa\gmu@ENumLoop \@xa{\number\numexpr#1+1\@xa}% \@xa{\number#2\@xa}% \fi}% of |\gmu@hashes|. \long\def\defENumLoop #1% the loop macro's name #2% the replacement of |\gmu@tempa| {% \ampulexlet#1\gmu@ENumLoop [##1##2][{##1}{##2}]% \gmu@tempa\@xa{#2\@xa}% % \ampulexdef#1% [##1##2][{##1}{##2}]% \gmu@ENumLoop\@xa{#1\@xa}% } \edef\GenericInfoToTerminal{% \unexpanded{% \@XA{\ampulexlet\protected\long\GenericInfo}\csname GenericInfo \endcsname[#1#2][{#1}{#2}]% \write\m@ne % we replace the token between these with: {\write\ifnum\tracingonline>\z@ \@unused\else\m@ne\fi}% }% } \ampulexdef\@starttoc[#1][#1]\makeatletter\@input{\makeatletter\NamedInput} \endinput %% %% End of file `gmampulex.sty'.