summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xnewcommand/xnewcommand.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/xnewcommand/xnewcommand.tex')
-rw-r--r--macros/latex/contrib/xnewcommand/xnewcommand.tex153
1 files changed, 153 insertions, 0 deletions
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}