summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xnewcommand
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/xnewcommand
Initial commit
Diffstat (limited to 'macros/latex/contrib/xnewcommand')
-rw-r--r--macros/latex/contrib/xnewcommand/README10
-rw-r--r--macros/latex/contrib/xnewcommand/xnewcommand.pdfbin0 -> 275079 bytes
-rw-r--r--macros/latex/contrib/xnewcommand/xnewcommand.sty16
-rw-r--r--macros/latex/contrib/xnewcommand/xnewcommand.tex153
4 files changed, 179 insertions, 0 deletions
diff --git a/macros/latex/contrib/xnewcommand/README b/macros/latex/contrib/xnewcommand/README
new file mode 100644
index 0000000000..5bb8aabe6a
--- /dev/null
+++ b/macros/latex/contrib/xnewcommand/README
@@ -0,0 +1,10 @@
+For most purposes, the features of \newcommand suffice. Nonetheless,
+\newcommand lacks some interesting features like the ability to make
+definition global or to use the \protected prefix supplied by
+e-TEX. This--surprisingly small--package makes possible to pass an
+optional argument \newcommand so that is becomes possible to use the
+\global and \protected prefixes.
+
+This material 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.
diff --git a/macros/latex/contrib/xnewcommand/xnewcommand.pdf b/macros/latex/contrib/xnewcommand/xnewcommand.pdf
new file mode 100644
index 0000000000..08e7d05570
--- /dev/null
+++ b/macros/latex/contrib/xnewcommand/xnewcommand.pdf
Binary files differ
diff --git a/macros/latex/contrib/xnewcommand/xnewcommand.sty b/macros/latex/contrib/xnewcommand/xnewcommand.sty
new file mode 100644
index 0000000000..69c70e12aa
--- /dev/null
+++ b/macros/latex/contrib/xnewcommand/xnewcommand.sty
@@ -0,0 +1,16 @@
+% $Date: 2007-04-23 17:32:09 +0200 (Mon, 23 Apr 2007) $
+% $Revision: 42 $
+\def \filedate {2007/04/21}
+\def \fileversion {v1.2}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{xnewcommand}%
+ [\filedate \space \fileversion \space Improved newcommand (JN)]
+
+\def \@star@or@long #1{%
+ \@ifstar {\let \l@ngrel@x = \relax #1}%
+ {\@testopt {\@@star@or@long {#1}}{\long}}%
+}
+\@ifdefinable \@@star@or@long
+ {\def \@@star@or@long #1[#2]{\def \l@ngrel@x {#2}#1}}
+
+\endinput
diff --git a/macros/latex/contrib/xnewcommand/xnewcommand.tex b/macros/latex/contrib/xnewcommand/xnewcommand.tex
new file mode 100644
index 0000000000..0c637fe14a
--- /dev/null
+++ b/macros/latex/contrib/xnewcommand/xnewcommand.tex
@@ -0,0 +1,153 @@
+\documentclass{article}
+
+\usepackage{etex}
+\usepackage[ascii]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[warn]{textcomp}
+\usepackage[a4paper, pdftex, margin=1.5in]{geometry}
+\usepackage{lmodern}
+\usepackage{typetex}
+\usepackage{xnewcommand}
+\usepackage{microtype}
+\usepackage{xcolor}
+\usepackage{url}
+\usepackage[bottom,hang]{footmisc}
+\usepackage[babel]{csquotes}
+\usepackage[british]{babel}
+\usepackage{hyperref}
+
+\setcounter{secnumdepth}{-\maxdimen}
+
+\newcommand*{\setdate}{}
+\def \setdate #1/#2/#3#4{%
+ \year = #1
+ \month = #2
+ \day = #3#4
+}
+
+\makeatletter
+\newcommand*{\getfileinfo}[1]{%
+ \def \filename {#1}%
+ \def \@tempb ##1 ##2 ##3\relax ##4\relax {%
+ \def \filedate {##1}%
+ \def \fileversion {##2}%
+ \def \fileinfo {##3}%
+ }%
+ \edef \@tempa {\csname ver@#1\endcsname}%
+ \expandafter \@tempb \@tempa \relax ? ? \relax \relax
+}
+\makeatother
+
+\newcommand*{\pack}{\textsf}
+
+\title {The \pack{xnewcommand} package}
+\author {Josselin Noirel\\\url{http://www.jnoirel.fr/}}
+\date {%
+ \getfileinfo{xnewcommand.sty}%
+ \expandafter \setdate \filedate
+ \today\ (\fileversion)}
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\begin{abstract}
+ For most purposes, the features of \cmd{newcommand} suffice.
+ Nonetheless, \cmd{newcommand} lacks some interesting features like
+ the ability to make definition global or to use the \cmd{protected}
+ prefix supplied by \eTeX. This---surprisingly small---package makes
+ possible to pass an~optional argument \cmd{newcommand} so that is
+ becomes possible to use the \cmd{global} and \cmd{protected}
+ prefixes.
+\end{abstract}
+
+\section{Usage}
+
+Load the package with
+%
+\begin{texcode}
+ \cmd[1]{usepackage}{xnewcommand}
+\end{texcode}
+%
+Then \cmd{newcommand} can take an additional optional argument:
+%
+\begin{texcode}
+ \cmd[syntax,5]{newcommand}[prefix]{command}[number][default]{definition}
+\end{texcode}
+%
+where \meta{prefix} can be any valid prefix or combination of them:
+%
+\begin{description}
+\item [\cmd{long}] The command will accept `long arguments', in
+ other words, its arguments may contain ends
+ of paragraph (explicit \cmd{par} or empty
+ lines);
+
+\item [\cmd{global}] The command is defined globally, in other
+ words, the definition won't be confined to
+ the current group;
+
+\item [\cmd{protected}] The command will be robust in moving
+ arguments and won't undergo systematic
+ expansion at the beginning of tabular cells;
+
+\item [\cmd{outer}] Makes the macro \cmd{outer} (not very useful,
+ but included for the sake of completeness).
+\end{description}
+
+The same syntax applies to the commands \cmd{renewcommand},
+\cmd{DeclareRobustCommand}, \cmd{newenvironment} and
+\cmd{renewenvironment}.
+
+\section{Remarks}
+
+It should not break anything. The normal syntax is preserved:
+%
+\begin{texcode}
+\cmd[syntax,2]{newcommand}{command}{definition}
+\end{texcode}
+%
+is equivalent to
+%
+\begin{texcode}
+\cmd[3]{newcommand}[\cmd{long}]{\<command\>}{\<definition\>}
+\end{texcode}
+%
+and
+%
+\begin{texcode}
+\cmd[syntax,2]{newcommand}*{command}{definition}
+\end{texcode}
+%
+is equivalent to
+%
+\begin{texcode}
+\cmd[3]{newcommand}[]{\<command\>}{\<definition\>}
+\end{texcode}
+%
+Any macro that uses \cmd{star@or@long} will inheritate the features
+described above.
+
+\section{Examples}
+
+Global definition:
+%
+\begin{texcode}
+\cmd{newcommand}[\cmd{global}]\marg{command}\marg{definition}
+\end{texcode}
+%
+Protected definition:
+%
+\begin{texcode}
+\cmd{newcommand}[\cmd{protected}]\marg{command}\marg{definition}
+\end{texcode}
+%
+Combination of both:
+%
+\begin{texcode}
+\cmd{newcommand}[\cmd{global} \cmd{protected}]\marg{command}\marg{definition}
+\end{texcode}
+
+\end{document}