From fe2d50f648a774c6f405d54b77ab8e5c2f37e4b6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 20 Apr 2016 21:52:58 +0000 Subject: multidef (20apr16) git-svn-id: svn://tug.org/texlive/trunk@40637 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/multidef/multidef.dtx | 134 ++++++++++++++++----- .../texmf-dist/source/latex/multidef/multidef.ins | 2 +- 2 files changed, 107 insertions(+), 29 deletions(-) (limited to 'Master/texmf-dist/source/latex/multidef') diff --git a/Master/texmf-dist/source/latex/multidef/multidef.dtx b/Master/texmf-dist/source/latex/multidef/multidef.dtx index 11c80e93628..6f849e1cc9a 100644 --- a/Master/texmf-dist/source/latex/multidef/multidef.dtx +++ b/Master/texmf-dist/source/latex/multidef/multidef.dtx @@ -4,7 +4,7 @@ %<*driver> \documentclass{ltxdoc} \usepackage{doc} -\usepackage{multidef} +\usepackage{multidef-save} \usepackage{dsfont} \def\sty#1{\textsf{#1.sty}} @@ -14,14 +14,21 @@ %%%\AtBeginDocument{\CodelineIndex\EnableCrossrefs} %%%\AtEndDocument{\PrintIndex} \begin{document} - \def\docdate{2016/03/14} - \def\fileversion{1.00} + \def\docdate{2016/04/20} + \def\filedate{2016/04/20} + \def\fileversion{1.10} \DocInput{multidef.dtx} \end{document} % % % \fi -% \CheckSum{206} +% +% +% \changes{1.00}{2016/03/14}{Initial release} +% \changes{1.10}{2016/04/20}{Added def. of robust commands} +% +% +% \CheckSum{329} %% \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 @@ -87,7 +94,7 @@ % calligraphic-font letters in math mode. With \pack{multidef} I now % simply write %\begin{verbatim} -%\multidef{\ensuremath{\mathcal{#1}}}{A-Z} +%\multidef[prefix=cal]{\ensuremath{\mathcal{#1}}}{A-Z} %\end{verbatim} % \multidef[prefix=cal]{\ensuremath{\mathcal{#1}}}{A-Z} % and write \cs{calG} to write~\calG. Here \texttt{A-Z} is a shorthand for the @@ -131,6 +138,34 @@ % % \section{The code} % +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +\ProvidesPackage{multidef}[2016/04/20 v1.10 definition of multiple commands] +% \end{macrocode} +% +% We begin with importing package \pack{trimspaces}, or to define its command +% \cs{trim@spaces}, in order to trim unwanted spaces in arguments: +%\begin{macro}{\trim@spaces} +% \begin{macrocode} +\IfFileExists{trimspaces.sty} + {\RequirePackage{trimspaces}} + {} +%% borrowing code from trimspaces, if package was not found. +\catcode`\Q=3 +\@ifundefined{trim@spaces} + {\PackageWarning{multidef} + {Package trimspaces.sty not found.^^JDefining \noexpand\trim@spaces myself} + \newcommand\trim@spaces[1]{% + \romannumeral-`\q\trim@trim@\noexpand#1Q Q% + } + \long\def\trim@trim@#1 Q{\trim@trim@@#1Q} + \long\def\trim@trim@@#1Q#2{#1}} + {} +\catcode`\Q=11 +%% +% \end{macrocode} +%\end{macro} +% % We use \pack{xkeyval} to handle package and command options. The package has % two options, \ttt{noerr} and~\ttt{nowarn}. The former tells % \pack{multidef} not to raise an error when redefining a command (default to @@ -169,13 +204,15 @@ % \item \ttt{arg} (and the equivalent \ttt{args}) can be used to define the % number of arguments of the series of commands to be defined. % \item \ttt{long} and \ttt{global} can be used to define \cs{long} and -% \cs{global} macros. +% \cs{global} macros, +% \item \ttt{robust} can be used to define robust commands. % \end{itemize} %\begin{macro}{prefix} %\begin{macro}{suffix} %\begin{macro}{arg} %\begin{macro}{long} %\begin{macro}{global} +%\begin{macro}{robust} % \begin{macrocode} \define@key{mdef}{prefix}{\def\@mdprefix{#1}} \define@key{mdef}{p}{\def\@mdprefix{#1}} @@ -183,15 +220,17 @@ \define@key{mdef}{s}{\def\@mdsuffix{#1}} \define@key{mdef}{arg}{\def\@mdargs{#1}} \define@key{mdef}{args}{\def\@mdargs{#1}} -\define@boolkeys{mdef}{long,global}[true] +\define@boolkeys{mdef}{long,global,robust}[true] \presetkeys{mdef} - {p=,s=,prefix=,suffix=,long=false,global=false,arg=0,args=0}{} + {p=,s=,prefix=,suffix=,long=false,global=false,robust=false, + arg=0,args=0}{} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} +%\end{macro} % % % We define shorthands for defining series of commands indexed by letters of @@ -230,19 +269,19 @@ % the remainder of the list. %\begin{macro}{\@mdef} % \begin{macrocode} -\def\@mdef #1,#2\@end{\expandafter\def\expandafter\@arg - \expandafter{\romannumeral-\expandafter`\expandafter\.#1}% - \ifx\@arg\@mdef@az +\def\@mdef #1,#2\@end{% + \edef\@mdef@arg{\trim@spaces{#1}}% + \ifx\@mdef@arg\@mdef@az \expandafter\@mdef \@mdef@alphabet,\@end \else - \ifx\@arg\@mdef@AZ + \ifx\@mdef@arg\@mdef@AZ \expandafter\@mdef \@mdef@Alphabet,\@end \else - \expandafter\@@mdef\@arg->->->\@end + \expandafter\@@mdef\@mdef@arg->->->\@end \fi \fi - \def\@arg{#2}% - \ifx\@arg\@empty\else\@mdef #2\@end\fi} + \def\@mdef@arg{#2}% + \ifx\@mdef@arg\@empty\else\@mdef #2\@end\fi} % \end{macrocode} %\end{macro} % @@ -262,10 +301,12 @@ \def\@@mdef#1->#2->#3\@end{% \@ifundefined{\@mdprefix#1\@mdsuffix} {\@@@mdef{#1}{#2}} - {\edef\@mdef@redef{\the\@mdef@redeftok\@mdef@comma - \@backslashchar\@mdprefix#1\@mdsuffix} - \def\@mdef@comma{, } - \@mdef@redeftok=\expandafter{\@mdef@redef} + {\ifKV@mdef@nowarn\else + \edef\@mdef@redef{\the\@mdef@redeftok\@mdef@comma + \@backslashchar\@mdprefix#1\@mdsuffix} + \def\@mdef@comma{, } + \global\@mdef@redeftok=\expandafter{\@mdef@redef} + \fi \ifKV@mdef@noerr \@@@mdef{#1}{#2}% \ifKV@mdef@nowarn\else @@ -294,28 +335,65 @@ %\end{macro} %\end{macro} % -% Finally, \cs{@@@mdef} calls \cs{@mdef@def} with the appropriate -% arguments. This is where the commands are really defined. The definition -% uses \cs{@yargd@f}, following the definition of \cs{newcommand} in \LaTeX. +% Finally, \cs{@@@mdef} calls \cs{@mdef@def} or \cs{@mdef@robdef} (if option +% \ttt{robust} was passed) with the appropriate arguments. This is where the +% commands are really defined. The definitions of \cs{@mdef@def} and +% \cs{@mdef@robdef} use \cs{@yargd@f}, following the definition of +% \cs{newcommand} and \cs{DeclareRobustCommand} in \LaTeX. %\begin{macro}{\@@@mdef} %\begin{macro}{\@mdef@def} +%\begin{macro}{\@mdef@robdef} % \begin{macrocode} \def\@@@mdef#1#2{\def\@arg@{#2}% \ifx\@arg@\@empty - \@mdef@def{#1}{#1}% + \ifKV@mdef@robust + \expandafter\def\expandafter\@mdef@cmdname + \expandafter{\csname\@mdprefix#1\@mdsuffix\endcsname}% + \expandafter\@mdef@robdef\@mdef@cmdname{#1}% + \else + \@mdef@def{#1}{#1}% + \fi \else - \@mdef@def{#1}{#2}% + \ifKV@mdef@robust + \expandafter\def\expandafter\@mdef@cmdname + \expandafter{\csname\@mdprefix#1\@mdsuffix\endcsname} + \expandafter\@mdef@robdef\@mdef@cmdname{#2}% + \else + \@mdef@def{#1}{#2}% + \fi \fi} \def\@mdef@def#1#2{% - \let\reserved@b\@gobble - \ifKV@mdef@global\let\@mdglobal\global\else\let\@mdglobal\relax\fi - \ifKV@mdef@long\let\@mdlong\long\else\let\@mdlong\relax\fi - \def\l@ngrel@x{\@mdlong\@mdglobal} + \let\reserved@b\@gobble + \ifKV@mdef@global\let\@mdglobal\global\else\let\@mdglobal\relax\fi + \ifKV@mdef@long\let\@mdlong\long\else\let\@mdlong\relax\fi + \def\l@ngrel@x{\@mdlong\@mdglobal} \expandafter\expandafter\expandafter\@yargd@f\expandafter\@mdargs\csname \@mdprefix#1\@mdsuffix\expandafter\endcsname\expandafter{\@mdef@com{#2}} } +\def\@mdef@robdef#1#2{% + \edef\reserved@a{\string#1}% + \def\reserved@b{#1}% + \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}% + \global\edef#1{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect + \noexpand#1% + \fi + \noexpand\protect + \expandafter\noexpand\csname + \expandafter\@gobble\string#1 \endcsname + }% + \let\reserved@b\@gobble + \ifKV@mdef@global\let\@mdglobal\global\else\let\@mdglobal\relax\fi + \ifKV@mdef@long\let\@mdlong\long\else\let\@mdlong\relax\fi + \def\l@ngrel@x{\@mdlong\@mdglobal} + \expandafter\expandafter\expandafter\@yargd@f\expandafter\@mdargs\csname + \expandafter\@gobble\string#1 \expandafter\endcsname + \expandafter{\@mdef@com{#2}} +} % \end{macrocode} %\end{macro} %\end{macro} +%\end{macro} % \Finale \endinput diff --git a/Master/texmf-dist/source/latex/multidef/multidef.ins b/Master/texmf-dist/source/latex/multidef/multidef.ins index 6c63ae9f4f1..65c26ff701e 100644 --- a/Master/texmf-dist/source/latex/multidef/multidef.ins +++ b/Master/texmf-dist/source/latex/multidef/multidef.ins @@ -1,6 +1,6 @@ %\NeedsTeXFormat{LaTeX2e}[1996/12/01] \input docstrip -\def\filedate{2016/03/14} +\def\filedate{2016/04/20} \let\MetaPrefix\DoubleperCent \preamble -- cgit v1.2.3