texlive[41970] Master: autoaligne (1sep16)

commits+karl at tug.org commits+karl at tug.org
Fri Sep 2 02:03:55 CEST 2016


Revision: 41970
          http://tug.org/svn/texlive?view=revision&revision=41970
Author:   karl
Date:     2016-09-02 02:03:54 +0200 (Fri, 02 Sep 2016)
Log Message:
-----------
autoaligne (1sep16)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/autoaligne/
    trunk/Master/texmf-dist/doc/generic/autoaligne/README
    trunk/Master/texmf-dist/doc/generic/autoaligne/autoaligne-fr.pdf
    trunk/Master/texmf-dist/tex/generic/autoaligne/
    trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne-fr.tex
    trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.sty
    trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.tex
    trunk/Master/tlpkg/tlpsrc/autoaligne.tlpsrc

Added: trunk/Master/texmf-dist/doc/generic/autoaligne/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/autoaligne/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/autoaligne/README	2016-09-02 00:03:54 UTC (rev 41970)
@@ -0,0 +1,27 @@
+___________________________________
+
+             L'extension
+             autoaligne
+               
+                v1.0
+
+             01/09/2016
+___________________________________
+
+Authors   : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail    : unbonpetit at openmailbox.org     (CT)
+            Commentaires, signalements de bugs et
+            suggestions bienvenus
+Licence   : Released under the LaTeX Project Public License v1.3c or
+            later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Cette extension permet d'aligner les termes et les membres entre
+des lignes contenant des expressions mathématiques.
+
+----------------------------------------------------------------------
+
+This package allows to align terms and members between lines
+containing math expressions.


Property changes on: trunk/Master/texmf-dist/doc/generic/autoaligne/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/autoaligne/autoaligne-fr.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/generic/autoaligne/autoaligne-fr.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/generic/autoaligne/autoaligne-fr.pdf	2016-09-01 05:36:59 UTC (rev 41969)
+++ trunk/Master/texmf-dist/doc/generic/autoaligne/autoaligne-fr.pdf	2016-09-02 00:03:54 UTC (rev 41970)

Property changes on: trunk/Master/texmf-dist/doc/generic/autoaligne/autoaligne-fr.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne-fr.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne-fr.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne-fr.tex	2016-09-02 00:03:54 UTC (rev 41970)
@@ -0,0 +1,204 @@
+% Ceci est la documentation du package "autoaligne"
+%
+% Fichier compilé avec pdflatex
+\documentclass[frenchb,a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{libertine}\usepackage[italic]{mathastext}
+\usepackage[scaled=0.8]{luximono}
+\usepackage{autoaligne,babel}
+\usepackage[bottom]{footmisc}
+\usepackage[margin=3cm]{geometry}
+\usepackage{fancybox,xcolor,hyperref}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\makeatletter
+\def\code{\expandafter\code at i\string}
+\def\code at i#1{%
+	\begingroup
+	\par\nobreak\medskip\parindent0pt
+	\leftskip.1\linewidth
+	\catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+	\let\do\@makeother \dospecials
+	\ttfamily\small\@noligs
+	\obeylines\obeyspaces
+	\def\code at ii##1#1{##1\par\medbreak\endgroup}%
+	\code at ii
+}
+\long\def\grab at toks#1\relax{\gdef\right at content{#1}}
+
+\newcommand\disable at lig[1]{%
+	\catcode`#1\active
+	\begingroup
+	\lccode`\~`#1\relax
+	\lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\exemple[1][60]{%
+	\edef\par@@indent{\the\parindent}%
+	\par\nobreak\vskip5pt \noindent
+	\def\part at coeff{#1}%
+	\relax\leavevmode\null
+	\bgroup
+	\let\do\@makeother\dospecials
+	\catcode`\^^M\active \catcode`\ \active
+	\begingroup
+	\lccode`\~`\ \lowercase{\def~{ {}}}%
+	\lccode`\~`\^^M\lowercase{\endgroup\def~{\par\noexpand\leavevmode}}%
+	\@makeother:\disable at lig,\disable at lig-%
+	\exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+	\def\@tempa##1#1{%
+		\xdef\left at content{##1}%
+		\egroup
+		\def\right at content{##1}%
+		\begingroup
+		\newlinechar`\^^M\everyeof{\relax}%
+		\expandafter\grab at toks\scantokens\expandafter{\right at content}%
+		\endgroup
+		\exemple@@@
+	}%
+	\@tempa
+}
+
+\begingroup
+\catcode`#=12
+\gdef\exemple@@@{%
+	\begingroup
+	\fboxsep1pt\relax
+	\edef\part at left{\the\dimexpr0.\part at coeff\linewidth-\fboxsep-\fboxrule}%
+	\edef\part at right{\the\dimexpr\linewidth-0.\part at coeff\linewidth-\fboxsep-\fboxrule}%
+	\fbox{%
+		\parbox[c]\part at left{\vskip5pt\relax\ttfamily\footnotesize\left at content\vskip5pt}%
+		\parbox[c]\part at right{\vskip5pt\relax\normalfont\footnotesize\noindent\right at content\vskip5pt}%
+	}%
+	\vskip7.5pt\relax
+	\endgroup
+}
+\endgroup
+\begingroup
+\catcode`\<13 \catcode`\>13
+\gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+	\bgroup
+	\verb at eol@error \let\do\@makeother \dospecials
+	\verbatim at font\@noligs
+	\catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
+	\@ifstar\@sverb\@verb}
+\endgroup
+\def\longfraadate at i#1/#2/#3\@nil{\number#3\relax\space\ifcase #2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\edef\longfraadate{\expandafter\longfraadate at i\aadate\@nil}
+\makeatother
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+	\renewcommand\thefootnote{\fnsymbol{footnote}}
+	\begingroup
+	\centering
+	\null\vskip.25\vsize
+	{\large\bfseries L'extension\par \Huge \aanom\par}
+	\bigbreak
+	v\aaversion
+	\smallbreak
+	\longfraadate
+	\vskip1.5cm
+	{Christian \bsc{Tellechea}\footnote{\href{mailto:unbonpetit at openmailbox.org}{unbonpetit at openmailbox.org}}}
+	\par
+	\endgroup
+	\vskip2cm
+	\leftskip=.2\linewidth \rightskip=.2\linewidth \small
+	Cette petite extension permet d'aligner les uns au-dessous des autres les termes et les signes d'égalité dans des expressions mathématiques s'étendant sur plusieurs lignes.
+\end{titlepage}
+\parskip=5ptplus0.5ptminus0.5pt\relax
+\def\listofitems{\textsf\loiname}
+\def\aa{\textsf\aanom}
+\section{Avant propos}
+C'est à force de voir, aussi bien sur \href{http://tex.stackexchange.com/}{\texttt{tex.stackexchange}} que dans ma boite \href{mailto:unbonpetit at openmailbox.org}{email}, des questions concernant l'extension \href{https://www.ctan.org/pkg/systeme}{\texttt{systeme}} que j'ai décidé d'écrire une extension à la fois plus générale et plus simple que ne l'est \texttt{systeme}. En effet trop de ces questions ont pour but de faire réaliser à \texttt{systeme} des choses pour lesquelles elle n'est pas conçue !
+
+À l'aide de la récente extension \href{https://www.ctan.org/pkg/listofitems}{\listofitems}, coder \aa{} deviendrait (presque) une formalité tant les choses deviennent plus simples.
+
+Ayant constaté que beaucoup de non francophones ne semblent en rien gênés que le manuel de \texttt{systeme} soit rédigé uniquement en français, détestant pour ma part traduire le français vers l'anglais ce qui s'apparente à un calvaire et enfin, voulant à tout prix défendre l'existence du français face au globbish dans la sphère \TeX/\LaTeX{} et ailleurs, j'ai voulu que cette extension soit 100\% en français et qu'elle le reste ! Même dans le code, les noms des macros sont en français ce qui, une fois l'habitude prise, est fort agréable.
+\bigbreak
+
+Cette extension requiert l'extension \listofitems{} dans sa version 1.1 ou supérieur, doit être utilisée avec un moteur \eTeX, et doit être appelée sous (pdf)(Xe)(lua)\LaTeX{} par
+\code|\usepackage{autoaligne}|
+
+et sous (pdf)(Xe)(lua)\TeX{} par
+\code|\input autoaligne.tex|
+
+\section{Mode d'emploi}
+\paragraph{La macro \texttt{\char`\\autoaligne}}
+Cette macro attend un argument obligatoire entre accolades contenant les lignes qui sont des expressions où l'alignement automatique doit entrer en vigueur.
+
+Chaque ligne est séparée de sa voisine par \og\verb|\\|\fg. Dans chaque ligne, on peut trouver autant de membres que l'on souhaite, séparés les uns des autres par \og\verb|=|\fg. Dans ces membres peuvent se trouver autant de termes que nécessaire, chacun séparé de son voisin par \og\verb|+|\fg{} ou \og\verb|-|\fg.
+
+La macro \verb|\autoaligne| va bâtir un alignement de type \verb|\halign| dans lequel chaque terme et chaque signe est contenu dans une colonne. Toutes les colonnes sont composées en mode mathématique. Visuellement, le résultat se traduit par des termes et des signes alignés les uns au desous des autres comme on peut le constater dans cet exemple simple :
+\exemple|\autoaligne{x-3y+z=2-i\\5x+y-6z=1+5i\\x-y-z=-3+i}|
+
+Lorsqu'un membre commence par \og\verb/-/\fg, le signe fait partie prenante du terme et n'est pas compris comme un séparateur entre termes. On peut le constater dans le second membre de la dernière ligne.
+
+\paragraph{Termes vides}
+Les signes \og\verb|+|\fg{} doivent être utilisés pour insérer des termes vides. Il est déconseillé de se servir du signe \og\verb|-|\fg{}.
+
+\exemple/\autoaligne{x=a++c\\+y=+b-c\\++z=+-4c}/
+
+On peut noter deux choses :
+\begin{enumerate}
+	\item les signes \og\verb|+|\fg{} devant les termes vides ou devant le premier terme non vide ne sont pas affichés ;
+	\item lorsqu'une colonne ne contient que des signes non affichés comme c'est le cas dans le membre de gauche, l'encombrement horizontal de ces signes est pris en compte.
+\end{enumerate}
+
+Lorsqu'un terme négatif doit apparaitre en deuxième position après un terme vide, il \emph{faut} meubler ce terme vide avec un contenu non affichable comme \og\verb|{}|\fg, \og\verb|\relax|\fg{} ou \og\verb|\null|\fg{}. C'est, je pense, la seule situation où \aa{} conserve une ambiguïté qui demande, pour être levée, un petit effort de la part de l'utilisateur :
+
+\exemple/\autoaligne{a-b={}-2i\\a+2b=1+i}/
+
+\paragraph{Composition des termes}
+Par défaut, chaque terme est composé au fer à droite comme on le constate sur cet exemple :
+
+\exemple/\autoaligne{a+\sqrt2b=0\\a+b=10\sqrt2}/
+
+L'argument optionnel de \verb|\autoaligne| permet de changer ce paramètre de composition. Si l'on souhaite spéficier ce paramètre globalement pour \emph{tous} les membres, il faut écrire \verb|*<lettre>| où la \verb|<lettre>| est \og\texttt c\fg{} pour centré, \og\texttt d\fg{} pour droite et \og\texttt g\fg{} pour gauche. Toute autre lettre provoquera un message d'erreur et \og\texttt d\fg{} sera alors prise par défaut.
+
+Voici l'exemple ci-dessus repris avec un paramètre optionnel global \og\verb|*g|\fg{} :
+
+\exemple/\autoaligne[*g]{a+\sqrt2b=0\\a+b=10\sqrt2}/
+
+Pour spécifier le paramètre pour chaque membre, il faut écrire dans l'argument optionnel autant de \verb|<lettres>| qu'il y a de membres dans l'alignement. Si l'on écrit plus de lettres qu'il y a de membres, les lettres en trop seront ignorées. S'il manque des lettres, un message d'erreur sera émis et la lettre \og\verb|d|\fg{} sera prise par défaut.
+
+Voici l'exemple avec, semble-t-il, le meilleur compromis ici, c'est-à-dire \og\verb|d|\fg{} pour le 1\ier{} membre et \og\verb|g|\fg{} pour le second :
+
+\exemple/\autoaligne[dg]{a+\sqrt2b=0\\a+b=10\sqrt2}/
+
+Pour contrarier l'alignement pour un seul terme dans une seule ligne, il est toujours possible de placer convenablement un (ou plusieurs) \verb|\hfill| dans ce terme.
+
+\paragraph{Échappement de \texttt+ et \texttt-}
+Pour écrire un signe \og\texttt+\fg{} ou \og\texttt-\fg{} sans qu'il ne soit interprété comme un délimiteur de terme, il faut employer les macros \verb|\+| ou  \verb|\-| :
+
+\exemple/\autoaligne{(1\+a)x+a^2y=a\\-2ax+(1\-a)y=2-a}/
+
+\paragraph{Combien de membres ?}
+Autant que l'on veut !
+
+\exemple/\autoaligne{a+b=1+2+3+4=++z=\alpha\\+x=++10==3\\=1=i+j-z}/
+
+Si un membre est vide (comme celui précédant le 3), le signe d'égalité qui le précède n'est pas affiché par défaut. Pour changer ce comportement, il faut écrire \verb|\egaldevantmembrevide=<nombre>|. Si le \verb|<nombre>| (entier sur 8 bits positif ou nul) vaut autre chose que 0, le signe \verb|=| sera affiché devant un membre vide.
+
+\paragraph{Augmenter l'espacement vertical}
+Le coefficient défini par \verb|\aavcoeff{<coeff>}| permet de modifier l'espacement vertical entre les lignes en multipliant la valeur de \verb|\baselineskip| par le \verb|<coeff>|.
+
+\exemple/Normal \autoaligne{a+2b=1\\a-b=2} \qquad
+\aavcoeff{1.75}étendu \autoaligne{a+2b=1\\a-b=2}/
+
+\paragraph{Position verticale de l'alignement}
+La macro \verb|\autoaligne| admet un autre argument entre parenthèses qui permet de spécifier quelle sera la position verticale de l'alignement créé par rapport à la ligne de base. Cet argument est une \verb|<lettre>| qui vaut \og\verb|c|\fg, \og\verb|h|\fg{} ou \og\verb|b|\fg{} pour que la ligne de base de l'alignement soit au centre de celui-ci, sur la ligne du haut ou sur celle du bas. La position centrée est celle par défaut. Lorsque les deux arguments optionnels sont présents (celui entre crochets et celui entre parenthèses), l'ordre des arguments optionnels \emph{est sans importance}, \verb|[<consigne>](<lettre>)| est accepté tout comme \verb|(<lettre>)[<consigne>]|.
+
+\exemple/Alignement c :
+\autoaligne(c){4=1+1+1+1\\=1+1+2\\=2+2\\=3+1}\medbreak
+
+Alignement h :
+\autoaligne(h){4=1+1+1+1\\=1+1+2\\=2+2\\=3+1}\medbreak
+
+Alignement b :
+\autoaligne(b){4=1+1+1+1\\=1+1+2\\=2+2\\=3+1}/
+\end{document}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne-fr.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.sty	2016-09-02 00:03:54 UTC (rev 41970)
@@ -0,0 +1,3 @@
+\input autoaligne.tex\relax
+\ProvidesPackage\aanom[\aadate\space v\aaversion\space Aligne les termes sur plusieurs lignes]
+\endinput
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.tex	2016-09-02 00:03:54 UTC (rev 41970)
@@ -0,0 +1,259 @@
+% Ce fichier contient le code TeX de l'extension "autoaligne"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                    %
+\def\aanom                   {autoaligne}                            %
+\def\aaversion                   {1.0}                               %
+%                                                                    %
+\def\aadate                  {2016/9/01}                             %
+%                                                                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%
+% %     http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% --------------------------------------------------------------------
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Christian Tellechea
+% email: unbonpetit at openmailbox.org
+%        Commentaires, suggestions et signalement de bugs bienvenus !
+% --------------------------------------------------------------------
+% L'extension autoaligne est compos\'ee des 5 fichiers suivants :
+%   - code               : listofitems            (.tex et .sty)
+%   - manuel en francais : listofitems-fr         (.tex et .pdf)
+%   - fichier lisezmoi   : README
+% --------------------------------------------------------------------
+
+\expandafter\edef\csname aa_restaure_catcode\endcsname{\catcode\number`\_=\number\catcode`\_\relax}
+\catcode`\_11
+\def\aa_listofitems_version_mini{1.1}
+
+\ifdefined\PackageError
+	\def\aa_erreur#1{\PackageError\aanom{#1}{Read the manual}}% pour LaTeX
+\else
+	\def\aa_erreur#1{\errmessage{Package \aanom\space Error: #1^^J}}% pour TeX
+\fi
+
+\begingroup
+	\edef\__tempa{\meaning\eTeXversion}\edef\__tempb{\string\eTeXversion}%
+	\ifx\__tempa\__tempb\endgroup
+	\else\endgroup
+		\aa_erreur{Vous n'utilisez pas un moteur eTeX, \aanom\space ne peut donc pas fonctionner}%
+		\expandafter\aa_restaure_catcode\expandafter\endinput
+	\fi
+
+\unless\ifdefined\loiname
+	\input listofitems.tex
+\fi
+\ifdim\loiver pt<\aa_listofitems_version_mini pt
+	\aa_erreur{\loiname\space est en version v\loiver\space et \aanom\space requiert la v\aa_listofitems_version_mini\space ou plus}%
+	\expandafter\aa_restaure_catcode\expandafter\endinput
+\fi
+
+\def\aa_mode_math#1{$\relax#1$}
+\def\aavcoeff#{\def\aa_v_coeff}
+\newtoks\aa_aligne_toks
+\def\aa_ajoute_au_toks#1{\aa_aligne_toks\expandafter{\the\aa_aligne_toks#1}}
+\def\aa_developpe_et_ajoute_au_toks#1{\loi_exparg\aa_ajoute_au_toks{#1}}
+\def\egaldevantmembrevide{\chardef\aa_egal_devant_membre_vide}
+\egaldevantmembrevide=0% pas de signe = devant un membre vide
+\def\aa_def_tok#1#2{\let#1= #2\empty}\aa_def_tok\aa_tok_espace{ }
+\def\aa_si_prochain_tok_est#1#2#3{%
+	\aa_def_tok\aa_test_tok{#1}\def\aa_code_vrai{#2}\def\aa_code_faux{#3}%
+	\aa_si_prochain_tok_est_i
+}
+\def\aa_si_prochain_tok_est_i{\futurelet\aa_prochain_token\aa_si_prochain_tok_est_ii}
+\def\aa_si_prochain_tok_est_ii{%
+	\loi_ifx{\aa_prochain_token\aa_tok_espace}
+		{\afterassignment\aa_si_prochain_tok_est_i\let\aa_prochain_token= }
+		{\loi_ifx{\aa_prochain_token\aa_test_tok}\aa_code_vrai\aa_code_faux}%
+}
+\def\aa_si_commence_par#1#2{%
+	\def\aa_si_commence_par_i##1#2##2\_nil{\loi_exparg\loi_ifempty{\loi_gobarg##1}}%
+	\aa_si_commence_par_i\relax#1#2\_nil
+}
+\def\aa_liste_separateurs{\\_=_+||-}% liste s\'eparateurs par d\'efaut. N'a _pas_ \`a \^etre modifi\'ee !!!
+\def\aa_ajoute_si_existe#1{\ifcsname#1\endcsname\loi_argcsname\aa_developpe_et_ajoute_au_toks{#1}\fi}
+\def\aa_alignement_signe{\hfil${}##{}$\hfil}% pour "=", "+" ou "-"
+\def\aa_alignement_terme_c{\hfil$##$\hfil}\def\aa_alignement_terme_d{\hfil$##$}\def\aa_alignement_terme_g{$##$\hfil}
+\def\autoaligne{%
+	\relax\iffalse{\fi\ifnum0=`}\fi
+	\begingroup
+	\aa_si_prochain_tok_est[
+		{\autoaligne_crochet}
+		{\aa_si_prochain_tok_est({\autoaligne_paren}{\autoaligne_i[*d](c)}}%
+}
+\def\autoaligne_crochet[#1]{\aa_si_prochain_tok_est({\autoaligne_i[#1]}{\autoaligne_i[#1](c)}}
+\def\autoaligne_paren(#1){\aa_si_prochain_tok_est[{\autoaligne_permute_argopt(#1)}{\autoaligne_i[*d](#1)}}
+\def\autoaligne_permute_argopt(#1)[#2]{\autoaligne_i[#2](#1)}
+\def\autoaligne_i[#1]{%
+	\loi_ifempty{#1}
+		{\aa_erreur{Consigne d'alignement vide, "*d" est retenue}%
+		\autoaligne_i[*d]}
+		{\def\aa_consigne_alignement_general{}%
+		\aa_si_commence_par{#1}*
+			{\aa_trouve_consigne_alignement_general#1d\_nil}
+			{\aa_trouve_consigne_alignement_par_membre{#1}}%
+		\autoaligne_ii
+		}%
+}
+\def\autoaligne_ii(#1){%
+	\loi_ifempty{#1}
+		{\aa_erreur{Consigne de position vide, "c" est retenue}
+		\autoaligne_ii(c)%
+		}
+		{\edef\aa_consigne_alignement_vertical{\aa_verifie_consigne_alignement chb{#1}}%
+		\loi_ifnum{\aa_consigne_alignement_vertical=0 }
+			{\aa_erreur{Consigne d'alignement vertical "\detokenize{#1}" non reconnue, "c" est retenue}%
+			\def\aa_consigne_alignement_general{1}%
+			}%
+			{}%
+		\autoaligne_iii
+		}%
+}
+\def\aa_trouve_consigne_alignement_general*#1#2\_nil{%
+	\loi_ifnum{\aa_verifie_consigne_alignement cdg{#1}=0 }
+		{\aa_erreur{Consigne d'alignement "\detokenize{#1}" non reconnue, "d" est retenue}%
+		\def\aa_consigne_alignement_general{d}%
+		}
+		{\def\aa_consigne_alignement_general{#1}}%
+}
+\def\aa_trouve_consigne_alignement_par_membre#1{\aa_trouve_consigne_alignement_par_membre_i1#1\loi_quark}
+\def\aa_trouve_consigne_alignement_par_membre_i#1#2{%
+	\loi_ifx{#2\loi_quark}
+		{}
+		{\loi_ifnum{\aa_verifie_consigne_alignement cdg{#2}=0 }
+			{\aa_erreur{Consigne d'alignement "\detokenize{#2}" non reconnue, "d" est retenue}%
+			\loi_argcsname\def{aa_alignement_membre[#1]}{d}%
+			}
+			{\loi_argcsname\def{aa_alignement_membre[#1]}{#2}}%
+		\loi_exparg\aa_trouve_consigne_alignement_par_membre_i{\number\numexpr#1+1}%
+		}%
+}
+\def\aa_verifie_consigne_alignement#1#2#3#4{% #1,#2,#3=lettres admises  #4=consigne c, d ou g --> renvoie un nombre (1,2 ou 3=ok, 0=erreur)
+	0\if\string #1\expandafter\loi_firsttonil\detokenize{#4x}\_nil1\else
+	\if\string #2\expandafter\loi_firsttonil\detokenize{#4x}\_nil2\else
+	\if\string #3\expandafter\loi_firsttonil\detokenize{#4x}\_nil3\fi\fi\fi
+}
+\def\autoaligne_iii#1{% #1=tableau
+	\def\-{-}\def\+{+}%
+	\loi_exparg{\setsepchar[_]}{\aa_liste_separateurs}%
+	\def\readlist_iii##1||##2\_nil##3{% red\'efinir \readlist_iii pour que
+		\loi_ifnum{\loi_nestcnt=3 }% si la profondeur est de 3
+			{\aa_si_commence_par{##30}{-}% et que la liste restant \`a examiner commence par "-" alors
+				{\loi_exparg{\readlist_iv1}{\expandafter\-\loi_gobarg##3##1}}% remplacer ce "-" par \-
+				{\readlist_iv1{##3##1}}%
+			}
+			{\readlist_iv1{##3##1}}%
+	}%
+	\reademptyitems
+	\readlist\aa_termes{#1}%
+	\let\aa_nombre_de_lignes\aa_termeslen% nombre de lignes
+	\def\aa_nombre_de_membres{0}%
+	\loi_fornum\aa_ligne_index=1to\aa_termeslen\do{% pour chaque ligne
+		\ifnum\csname aa_termeslen[\aa_ligne_index,0]\endcsname>\aa_nombre_de_membres
+			\loi_argcsname\let\aa_nombre_de_membres{aa_termeslen[\aa_ligne_index,0]}% mettre \`a jour le nombre max de membres
+		\fi
+		\loi_fornum\aa_membre_index=1to\csname aa_termeslen[\aa_ligne_index,0]\endcsname\do{% pour chaque membre
+			\loi_argcsname\let\aa_nombre_de_membre_courant{aa_termeslen[\aa_ligne_index,\aa_membre_index,0]}%
+			\ifcsname aa_nbtermes_\aa_membre_index\endcsname% mettre \`a jour le nombre max de termes dans ce membre
+				\ifnum\aa_nombre_de_membre_courant>\csname aa_nbtermes_\aa_membre_index\endcsname\relax
+					\loi_argcsname\let{aa_nbtermes_\aa_membre_index}\aa_nombre_de_membre_courant
+				\fi
+			\else
+				\loi_argcsname\let{aa_nbtermes_\aa_membre_index}\aa_nombre_de_membre_courant
+			\fi
+		}%
+	}%
+	\aa_aligne_toks{}%
+	% construction du pr\'eambule de l'alignement
+	\loi_fornum\aa_membre_index=1to\aa_nombre_de_membres\do{%
+		\loi_fornum\aa_terme_index=1to\csname aa_nbtermes_\aa_membre_index\endcsname\do{%
+			\ifx\aa_consigne_alignement_general\empty
+				\ifcsname aa_alignement_membre[\aa_membre_index]\endcsname
+					\loi_argcsname\aa_developpe_et_ajoute_au_toks{aa_alignement_terme_\csname aa_alignement_membre[\aa_membre_index]\endcsname}% terme
+				\else
+					\aa_erreur{Pas assez de consignes d'alignement, "d" est retenue}%
+					\aa_developpe_et_ajoute_au_toks{\aa_alignement_terme_d}%
+				\fi
+			\else
+				\loi_argcsname\aa_developpe_et_ajoute_au_toks{aa_alignement_terme_\aa_consigne_alignement_general}%
+			\fi
+			\ifnum\aa_terme_index<\csname aa_nbtermes_\aa_membre_index\endcsname\relax
+				\aa_developpe_et_ajoute_au_toks{\expandafter&\aa_alignement_signe&}% signe
+			\fi
+		}%
+		\ifnum\aa_membre_index<\aa_nombre_de_membres\relax
+			\aa_developpe_et_ajoute_au_toks{\expandafter&\aa_alignement_signe&}% \'egalit\'e
+		\fi
+	}%
+	\aa_ajoute_au_toks\cr
+	% fin du pr\'eambule, construction du corps de l'alignement
+	\loi_fornum\aa_ligne_index=1to\aa_termeslen\do{% pour chaque ligne,
+		\loi_fornum\aa_membre_index=1to\aa_nombre_de_membres\do{% chaque membre
+			\def\aa_terme_non_vide_vu{0}%
+			\loi_fornum\aa_terme_index=1to\csname aa_nbtermes_\aa_membre_index\endcsname\do{% et chaque terme
+				\aa_ajoute_si_existe{aa_termes[\aa_ligne_index,\aa_membre_index,\aa_terme_index]}% ajouter le terme
+				\ifcsname aa_termes[\aa_ligne_index,\aa_membre_index,\aa_terme_index]\endcsname% si le terme existe
+					\loi_argcsname\loi_exparg\loi_ifempty{aa_termes[\aa_ligne_index,\aa_membre_index,\aa_terme_index]}
+						{}
+						{\def\aa_terme_non_vide_vu{1}}% et qu'il est non vide, s'en souvenir
+				\fi
+				\ifnum\aa_terme_index<\csname aa_nbtermes_\aa_membre_index\endcsname\relax% passer \`a l'ajout \'eventuel du signe + ou -
+					\aa_ajoute_au_toks&%
+					\loi_ifnum{% ins\'erer signe si index correct ET terme suivant non vide ET (un terme non vide a \'et\'e rencontr\'e OU signe="-"
+						\numexpr1\loi_ifnum{\aa_terme_index<\csname aa_termeslen[\aa_ligne_index,\aa_membre_index,0]\endcsname\space}10%
+						\loi_exparg{\loi_exparg\loi_ifempty}{\csname aa_termes[\aa_ligne_index,\aa_membre_index,\number\numexpr\aa_terme_index+1]\endcsname}01%
+						+\aa_terme_non_vide_vu
+						+\if\string-\expandafter\loi_firsttonil\detokenize\expandafter\expandafter\expandafter{\csname aa_termessep[\aa_ligne_index,\aa_membre_index,\aa_terme_index]\endcsname}\_nil1\else0\fi>111 }
+						{\aa_ajoute_si_existe{aa_termessep[\aa_ligne_index,\aa_membre_index,\aa_terme_index]}}%
+						{\aa_ajoute_au_toks{\hphantom{\hbox{${}+{}$}}}}% sinon, encombrement horizontal
+					\aa_ajoute_au_toks&%
+				\fi
+			}%
+		\ifnum\aa_membre_index<\aa_nombre_de_membres\relax
+			\aa_ajoute_au_toks&% puis, ajouter le signe "=" si...
+			\ifcsname aa_termes[\aa_ligne_index,\number\numexpr\aa_membre_index+1]\endcsname% le terme suivant existe
+				\ifnum\aa_egal_devant_membre_vide=0 % et si on ne tient compte des = devant les membres vides
+						\loi_argcsname\loi_exparg\loi_ifempty{aa_termes[\aa_ligne_index,\number\numexpr\aa_membre_index+1]}
+						{}% et si'il n'est pas vide
+						{\aa_ajoute_si_existe{aa_termessep[\aa_ligne_index,\aa_membre_index]}}%
+				\else
+					\aa_ajoute_si_existe{aa_termessep[\aa_ligne_index,\aa_membre_index]}%
+				\fi
+			\fi
+			\aa_ajoute_au_toks&%
+		\fi
+		}%
+		\aa_ajoute_au_toks\cr
+	}%
+	\aa_ajoute_au_toks\crcr
+	\leavevmode
+	\ifcase\aa_consigne_alignement_vertical\relax
+	\or
+		\let\aa_boite_externe\vcenter
+		\loi_antefi{\ifmmode\expandafter\loi_first\else\expandafter\aa_mode_math\fi}%
+	\or
+		\let\aa_boite_externe\vtop
+		\expandafter\loi_identity
+	\or
+		\let\aa_boite_externe\vbox
+		\expandafter\loi_identity
+	\fi
+		{\aa_boite_externe{\lineskiplimit0pt \lineskip0pt \baselineskip\aa_v_coeff\baselineskip\halign\expandafter{\the\aa_aligne_toks}}}%
+	\endgroup
+}
+\aavcoeff{1}% par d\'efaut
+\aa_restaure_catcode
+\endinput
+
+v1.0  1/9/2016
+      premi\`ere version publique
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/autoaligne/autoaligne.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2016-09-01 05:36:59 UTC (rev 41969)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2016-09-02 00:03:54 UTC (rev 41970)
@@ -51,7 +51,7 @@
     asypictureb attachfile
     aucklandthesis augie auncial-new aurical aurl autobreak autopdf
     authoraftertitle authorindex
-    auto-pst-pdf autoarea automata autonum autosp avantgar avremu
+    auto-pst-pdf autoaligne autoarea automata autonum autosp avantgar avremu
   b1encoding babel
     babel-albanian babel-bahasa babel-basque
     babel-belarusian babel-bosnian babel-breton

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2016-09-01 05:36:59 UTC (rev 41969)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2016-09-02 00:03:54 UTC (rev 41970)
@@ -1461,6 +1461,7 @@
  'apacite',     '\.apc|' . $standardtex,
  'apnum',	'apnum.tex',
  'arabtex',     '\.tex|' . $standardtex,
+ 'autoaligne',  '\.tex|' . $standardtex,
  'babel',       'bl?plain\.tex|' . $standardtex,
  'babel-french',        '\.lua|' . $standardtex,
  'babel-georgian',      'georgiancaps\.tex|' . $standardtex,

Added: trunk/Master/tlpkg/tlpsrc/autoaligne.tlpsrc
===================================================================
Modified: trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc	2016-09-01 05:36:59 UTC (rev 41969)
+++ trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc	2016-09-02 00:03:54 UTC (rev 41970)
@@ -7,6 +7,7 @@
 #
 depend abbr
 depend abstyles
+depend autoaligne
 depend barr
 depend bitelist
 depend borceux



More information about the tex-live-commits mailing list