summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/drac/drac-en.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/drac/drac-en.dtx')
-rw-r--r--macros/latex/contrib/drac/drac-en.dtx344
1 files changed, 344 insertions, 0 deletions
diff --git a/macros/latex/contrib/drac/drac-en.dtx b/macros/latex/contrib/drac/drac-en.dtx
new file mode 100644
index 0000000000..332d27026b
--- /dev/null
+++ b/macros/latex/contrib/drac/drac-en.dtx
@@ -0,0 +1,344 @@
+% \iffalse meta-comment
+%-*- coding: iso-8859-15 -*-
+% --------------------------------------------------------------------
+%
+% Copyright (C) 2004, 2008 by Josselin Noirel et Yvon Henel
+%
+% Y. Henel dit « le TeXnicien de surface »
+% <le.texnicien.de.surface@wanadoo.fr>
+%
+% --------------------------------------------------------------------
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.2 of this license
+% or (at your option) any later version. The latest version of this
+% license is in:
+%
+% <URL: http://www.latex-project.org/lppl.txt >
+%
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\def\fileversion{v1}
+%<package>\def\filedate{2008/08/14}
+%<package>\def\fileinfo{fichier drac.sty par J. Noirel et Y. Henel}
+%<package>\ProvidesPackage{drac}
+%<package> [\filedate\space\fileversion\space\fileinfo]
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{drac}
+\usepackage{url,array}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}
+\usepackage{ifpdf}
+\usepackage{textcomp}
+\usepackage{calc, xspace} % c'est pour moi (TdS) !
+\let\cs=\relax
+\DeclareRobustCommand*{\cs}[1]{{\normalfont\ttfamily\char`\\#1}}
+\renewcommand*{\meta}[1]{{\normalfont\textlangle{\itshape #1\/}\textrangle}}
+\newcommand*{\fctt}{{\normalfont\ttfamily fr.comp.text.tex}}
+\makeatletter
+\DoNotIndex{\@tempa,\@tempb,\@tempc,\csname,\endcsname,\noexpand,\def,^^A
+ \edef,\ifx,\else,\endinput,\expandafter,\fi,\let,\newcommand,\relax,^^A
+ \string,\@ifstar}
+\makeatother
+\usepackage[frenchb,english]{babel}
+% comment out the following line to obtain the full code with explanations
+\OnlyDescription
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\newcommand\BOP{\discretionary{}{}{}}
+\begin{document}
+\DocInput{drac-en.dtx}
+\end{document}
+%</driver>
+% \fi
+% \CheckSum{68}
+%
+% \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 \~}
+%
+% \changes{v0}{2004/04/22}{Missed to be the 1st public version}
+% \changes{v0.1}{2004/05/17}{Almost have been the 1st public version}
+% \changes{v0.1}{2004/05/17}{Introduces \cs{ReDeclareRobActChar}}
+% \changes{v1}{2008/08/14}{First public version}
+% \GetFileInfo{drac.sty}
+%
+% \title{The \textsf{drac} package\thanks{This document corresponds to
+% the file \textsf{drac}~\fileversion, dated \filedate.}}
+% \author{Josselin Noirel and Yvon Henel}
+%
+% \maketitle
+% \begin{abstract}
+% This package provides \cs{DeclareRobustActChar} and
+% \cs{Re}\BOP|Declare|\BOP|Rob|\BOP|Act|\BOP|Char| macros.
+%
+% One uses \cs{DeclareRobustActChar} as \cs{DeclareRobustCommand}
+% but the macro \cs{protect}s the active character when it appears
+% in a moving argument, see~\path{ltdefns.dtx} in
+% \path{/latex/base/}.
+%
+% \cs{ReDeclareRobActChar} redefines the active character,
+% previously defined with \cs{DeclareRobustActChar}, the way
+% \cs{renewcommand} does for usual commands.
+% \end{abstract}
+% \begin{otherlanguage}{french}
+% \begin{abstract}
+% Ce module définit \cs{DeclareRobustActChar} et
+% \cs{ReDeclareRobActChar}.
+%
+% Vous devriez avoir obtenu, avec ce document, les fichiers
+% \path{drac-fr.dtx} et \path{drac-fr.pdf} qui donnent la version
+% française de cette documentation.
+% \end{abstract}
+% \end{otherlanguage}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+% \begingroup\footnotesize{}
+%
+% When the macro appeared on \fctt{} in the thread ``la question à
+% 100~euros\footnote{The 100~euro question.}'', dated
+% \oldstylenums{8}th april \oldstylenums{2004}, its name was
+% \cs{DeclareRobustActiveCharacter} which had the advantage to be
+% totally descriptive but one drawback viz.\ it was really long. To
+% alleviate the pains of the typist but \emph{mainly} to avoid a
+% complete mess in the index of this document, I have taken it upon
+% myself to rename it \cs{DeclareRobustActChar}.
+%
+% When reading the above mentioned thread, one can easily see that I
+% ---{i\@. e\@.} Yvon Henel, \TeX nicien de surface--- just asked for
+% code which was provided, very friendly and efficiently, by Josselin
+% Noirel.
+%
+% I played a bit with Josselin's code but some months later life hit
+% me hard which would not have been a surprise if I had really
+% understood the classical wisdom I have been educated in during
+% my younger days. But ``the light, which experience gives, is a
+% lantern on the stern, which shines only on the waves behind us'' as
+% wrote Samuel Taylor Coleridge. Thence when Josselin, who was rather
+% busy as a student, sent me with an email in February
+% \oldstylenums{2005} a second version where \cs{ReDeclareRobActChar}
+% appeared I was in no state to benefit from it.
+%
+% Then time, the great healer, did fly\dots I'm back to the world and
+% Josselin has left for other shores.
+%
+% The code exists and works. So instead of leaving it to rot somewhere
+% on my hard disk and for I have spent somme hours to update my own
+% packages I have decided to launch \texttt{drac} on the vast ocean of
+% life. I just provide the wrapping and push the tiny thing on the
+% nearest CTAN server.
+%
+% I do suppose that one understood that I can't promise to maintain
+% the following code I hardly understand and that only because of the
+% comments given by Josselin. So now is the time to let Josselin be
+% at the helm\dots and the keyboard.
+%
+% \hspace*{\stretch{4}}Le \TeX nicien de surface\hspace*{\stretch{1}}
+%
+% \endgroup
+%
+% \section{Usage}
+%
+% This command has the usual syntax of the \cs{newcommand} and
+% friends: it accepts a starred form depending on wether the active
+% character accepts \cs{long} arguments (\emph{i.e.} an argument could
+% contain a paragraph ending) or not; next comes the active character;
+% an optionnal number of arguments, an optionnal argument which is the
+% optionnal value of the first argument, and then the actual
+% definition. Here are the valid syntaxes:
+% ^^A
+% \begin{list}{}{\ttfamily\leftmargin=\leftmargini}\item
+% \cs{DeclareRobustActChar}\marg{active character}[\(n\)]\%\\
+% \ \ \oarg{default value of the first argument}\marg{definition}\par
+% \cs{DeclareRobustActChar}\marg{active character}[\(n\)]\marg{definition}\par
+% \cs{DeclareRobustActChar}\marg{active character}\marg{definition}\par
+% \cs{DeclareRobustActChar}*\marg{active character}[\(n\)]\%\\
+% \ \ \oarg{default value of the first argument}\marg{definition}\par
+% \cs{DeclareRobustActChar}*\marg{active character}[\(n\)]\marg{definition}\par
+% \cs{DeclareRobustActChar}*\marg{active character}\marg{definition}
+% \end{list}
+% ^^A
+% Then one will be able to use the active character in moving
+% arguments (in the arguments of \cs{caption} for instance) and in
+% other cases which demand robust commands
+% (\cs{protected@edef},\cs{protected@write}, and so on).
+%
+% Similarly \cs{ReDeclareRobActChar} has the same syntax than
+% \cs{renewcommand} so here are the possible syntaxes:
+% ^^A
+% \begin{list}{}{\ttfamily\leftmargin=\leftmargini}\item
+% \cs{ReDeclareRobActChar}\marg{active character}[\(n\)]\%\\
+% \ \ \oarg{default value of the first argument}\marg{definition}\par
+% \cs{ReDeclareRobActChar}\marg{active character}[\(n\)]\marg{definition}\par
+% \cs{ReDeclareRobActChar}\marg{active character}\marg{definition}\par
+% \cs{ReDeclareRobActChar}*\marg{active character}[\(n\)]\%\\
+% \ \ \oarg{default value of the first argument}\marg{definition}\par
+% \cs{ReDeclareRobActChar}*\marg{active character}[\(n\)]\marg{definition}\par
+% \cs{ReDeclareRobActChar}*\marg{active character}\marg{definition}
+% \end{list}
+% ^^A
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \section{The code}
+% \begin{macro}{\DeclareRobustActChar}
+% We begin whith the definition of \cs{DeclareRobustActChar} (which
+% does not make a lot in fact).
+% ^^A
+% \begin{macrocode}
+% \iffalse
+%<*package>
+% \fi
+\newcommand*{\DeclareRobustActChar}{
+ \@ifstar{%
+ \def\@tempc{\newcommand*}\@declarerobustactchar}{%
+ \def\@tempc{\newcommand}\@declarerobustactchar}%
+}
+% \end{macrocode}
+% \end{macro}
+% ^^A
+% \begin{macro}{\ReDeclareRobActChar}
+% And immediately we define \cs{ReDeclareRobActChar} (which, as the
+% preceding one does not make a lot but slightly differently.)
+% ^^A
+% \begin{macrocode}
+\newcommand*{\ReDeclareRobActChar}{\@ifstar{%
+ \def\@tempc{\renewcommand*}\@declarerobustactchar}{%
+ \def\@tempc{\renewcommand}\@declarerobustactchar}%
+}
+% \end{macrocode}
+% ^^A
+% \cs{@ifstar} checks the presence of a star and \cs{@tempc} is
+% defined accordingly. \cs{@tempc} will in its time undertake the
+% definition. Then \cs{@declarerobustactchar} is summoned.
+% \end{macro}
+% \begin{macro}{\@declarerobustactchar}
+% Here comes the macro which does work:
+% \cs{@declarerobustactchar}. It takes an argument which is the
+% active character (which is supposed to be \emph{already} active
+% when\cs{DeclareRobustActChar} is called in).
+% ^^A
+% \begin{macrocode}
+\newcommand*{\@declarerobustactchar}[1]{%
+% \end{macrocode}
+% ^^A
+% The present values of \cs{protect} and \cs{@typeset@protect} are
+% preserved to be restored later.
+% ^^A
+% \begin{macrocode}
+ \let\@tempa=\protect
+ \let\@tempb=\@typeset@protect
+% \end{macrocode}
+% ^^A
+% \cs{protect} and \cs{@typeset@protect} are defined as equivalent to
+% \cs{relax} for them not to `move' during the process of expansion in
+% \cs{edef}.
+% ^^A
+% \begin{macrocode}
+ \let\protect=\relax
+ \let\@typeset@protect\relax % Should be the case
+% \end{macrocode}
+% ^^A
+% The active character is defined. Caution: if the character is not
+% active when one uses \cs{DeclareRobustActChar} there is a
+% considerable risk of making \TeX{} growls about an `inaccessible'
+% command. The \meta{active character} is defined as:
+% ^^A
+% \begin{flushleft}\begin{tabular}{@{}l@{}l@{}}
+% \meta{active character} $\stackrel{\mathrm{def}}{\equiv}$ \hskip0pt &
+% \cs{ifx}\cs{protect}\cs{@typeset@protect} \\
+% & \ttfamily\ \ \cs{expandafter}\cs{DRAC@real@\meta{active character}} \\
+% & \cs{else} \\
+% & \ttfamily\ \ \cs{protect}\meta{active character} \\
+% & \cs{fi} \\
+% \end{tabular}\end{flushleft}
+% ^^A
+% The \cs{ifx} test enables us to know whether we are in the context
+% of a moving argument or not. The result of the test is `true' if it
+% is not the case; then \cs{DRAC@real@\meta{active character}} is
+% executed: it is the effecting command which will contain in some
+% time the \meta{definition} to which we were refering above. When
+% the test is `false', because we are in the context of a moving
+% argument we simply \cs{protect} the \meta{active character} and put
+% it back. The \cs{expandafter} is there to make the chunk of code
+% `\cs{else}\linebreak[0]\dots\linebreak[0]\cs{fi}' disappear.
+% ^^A
+% \begin{macrocode}
+ \edef#1{%
+ \noexpand\ifx\protect\@typeset@protect
+ \noexpand\expandafter
+ \expandafter\noexpand
+ \csname DRAC@real@\string#1\endcsname
+ \noexpand\else
+ \protect
+ \noexpand#1%
+ \noexpand\fi
+ }%
+% \end{macrocode}
+% ^^A
+% The initial values of \cs{protect} and \cs{@typeset@protect} are
+% restored.
+% ^^A
+% \begin{macrocode}
+ \let\protect=\@tempa
+ \let\@typeset@protect=\@tempb
+% \end{macrocode}
+% ^^A
+% Now we define with \cs{newcommand} ---~by means of \cs{@tempc}, do
+% you remember?~--- the effecting command \cs{DRAC@read@\meta{active
+% character}}. It is the use of \cs{newcommand} which enables us
+% to protect the syntax. But one will note that it prevents, in
+% particular, the redifinition of the command (in other words this
+% package might still be improved).
+% ^^A
+% \begin{macrocode}
+ \expandafter\@tempc\csname DRAC@real@\string#1\endcsname
+}
+% \end{macrocode}
+% ^^A
+% ``THE END''
+% ^^A
+% \begin{macrocode}
+\endinput
+% \end{macrocode}
+% \end{macro}
+% \iffalse
+%</package>
+% \fi
+% ^^A
+% \section{Bugs and restrictions}
+% No known bugs at present. The restrictions are numerous: this
+% package has no pretence.
+%
+% It can \emph{a priori} work with commands as well but we advise you to
+% use \cs{DeclareRobustCommand} instead in such a case.
+% \Finale
+\endinput
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: t
+%%% fill-column: 70
+%%% End: