diff options
author | Karl Berry <karl@freefriends.org> | 2008-08-15 00:03:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-08-15 00:03:39 +0000 |
commit | c54b3149ba86bc9fe6b92de5f9f77820776ff247 (patch) | |
tree | 427e59fa28f19c7c0f1eff7c0d1c9c57793b28c0 /Master/texmf-dist/source/latex/drac/drac-en.dtx | |
parent | 2aa9527a8a806b412d22591606bb3d0c2b557acc (diff) |
new package drac (14aug08)
git-svn-id: svn://tug.org/texlive/trunk@10350 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/drac/drac-en.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/drac/drac-en.dtx | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/drac/drac-en.dtx b/Master/texmf-dist/source/latex/drac/drac-en.dtx new file mode 100644 index 00000000000..332d27026bf --- /dev/null +++ b/Master/texmf-dist/source/latex/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: |