<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse meta-comment
%   Droits d'auteur :
%   - MaÃ¯eul Rouquette 2011-2023
%   - JoÃ«l Gombin 2014
%   - Ã‰tienne Deparis 2023-â€¦
%   Licence Creative Commons - PaternitÃ© - Partage des Conditions Initiales Ã&nbsp; l'identique
%   http://creativecommons.org/licenses/by-sa/2.0/fr/
% \fi
% \iffalse
%&lt;*driver&gt;
\ProvidesFile{facture.dtx}
\documentclass{ltxdoc}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage[frenchb]{babel}
\usepackage{hyperref}
\usepackage{csquotes}
\usepackage{metalogo}
\usepackage[mono=false,nomath]{libertinus-otf}
% Pour l'impression des changements
\makeatletter
\def\glossary@prologue{%
  \section{Historique des changements}%
}
\makeatother
\EnableCrossrefs
\RecordChanges
% Pour les renvois internes
\newcommand{\renvoi}[1]{voir section~\ref{#1} p.~\pageref{#1}}
\newcommand{\Renvoi}[1]{Voir section~\ref{#1} p.~\pageref{#1}.}
\begin{document}
\raggedbottom
\DocInput{facture.dtx}
\end{document}
%&lt;/driver&gt;
% \fi
% \CheckSum{585}
% \changes{v1.0}{2011/09/10}{PremiÃ¨re version.}
% \changes{v1.1}{2014/09/16}{Laisser le choix de la marge Ã&nbsp; l'utilisateur.}
% \changes{v1.1}{2014/09/16}{PossibilitÃ© de modifier la taille du tableau.}
% \changes{v1.2}{2015/01/16}{PossibilitÃ© de produire des factures sans la colonne remise.}
% \changes{v1.2.2}{2015/01/16}{Corrections de quelques problÃ¨mes d'alignement.}
% \changes{v1.3}{2023/06/30}{Modernise les scripts de construction du paquet.}
% \changes{v1.3}{2023/06/30}{Corrige la documentation Ã&nbsp; propos du code client.}
% \def\filedate{2023/06/30}
% \def\fileversion{1.3}
% \date{\filedate}
% \title{La class \textsf{facture}\thanks{Ce document correspond Ã&nbsp; la version~\fileversion de \textsf{facture} datÃ©e du \filedate.}}
% \author{MaÃ¯eul Rouquette, JoÃ«l Gombin et Ã‰tienne Deparis}
% \maketitle
% \begin{abstract}
%   Cette classe permet de rÃ©diger factures et devis, avec ou sans TVA, en
%   calculant automatiquement les sommes.
%
%   Elle fonctionne avec \XeLaTeX{} et non pas \LaTeX{}.
%
%   Elle est sous licence Creative Commons - PaternitÃ© - Partage des
%   Conditions Initiales Ã&nbsp;
%   l'identique\footnote{\url{http://creativecommons.org/licenses/by-sa/2.0/fr/}.}.
%
%   Pour tout demande de corrections ou d'amÃ©liorations, merci d'ouvrir un
%   ticket sur Gitlab : \url{https://framagit.org/gutenberg/facture/-/issues}.
% \end{abstract}
% \tableofcontents
%
% \section{Chargement et configuration}
% \label{meta}
% \subsection{Avec ou sans TVA ?}
% \label{TVA}
%
% La classe se charge comme toutes les classes. Une option \verb|sansTVA|
% permet de produire des factures sans gestion de la TVA. Typiquement pour des
% auto-entrepreneurs. Ainsi :
%
% \begin{verbatim}
% \documentclass[sansTVA]{facture}
% \end{verbatim}
%
% Permet de gÃ©nÃ©rer une facture sans gestion de la TVA. Ã€ contrario,
%
% \begin{verbatim}
% \documentclass{facture}
% \end{verbatim}
%
% Permet de gÃ©nÃ©rer une facture avec TVA. Celle-ci est dÃ©finie par dÃ©faut Ã&nbsp;
% 19,6~\%\footnote{Valeur lors de la sortie de la premiÃ¨re version de la
% classe. Pour Ã©viter que des factures crÃ©Ã©es avant la variation du taux mais
% recompilÃ©es aprÃ¨s la variation ne voient leur TVA changer, ce taux restera
% fixe d'une version Ã&nbsp; l'autre de la classe.}, mais il est possible de
% modifier le taux, grÃ¢ce Ã&nbsp; la commande
% \DescribeMacro{\TVAdefaut}\cmd{\TVAdefaut}\marg{taux}. Par exemple pour
% avoir un taux de 5,5~\% :
%
% \begin{verbatim}
% \TVAdefaut{5,5}
% \end{verbatim}
%
% \subsection{Avec ou sans remise ?}
% \label{remise}
%
% Une option \verb|sansremise| permet de produire des factures sans gestion
% des remises.
%
% \subsection{Information sur document}
%
% Cette classe permet de fabriquer des factures et des devis. Par dÃ©faut, elle
% fabrique des factures. La commande
% \DescribeMacro{\type}\cmd{\type}\marg{type} permet d'indiquer si on souhaite
% fabriquer une facture ou autre chose :
%
% \begin{verbatim}
% \type{Devis}
% \end{verbatim}
%
% Ã€ noter que \meta{type} peut prendre n'importe quelle valeur.
%
% Le document peut avoir un numÃ©ro, dÃ©fini par la commande
% \DescribeMacro{\numero}\cmd{\numero}\marg{numero}.
%
% Le document est automatiquement datÃ© du jour de la compilation. Toutefois on
% peut utiliser la commande \DescribeMacro{\date}\cmd{\date}\marg{JJ/MM/AAAA}
% pour spÃ©cifier une date. Il est possible d'indiquer une date limite de
% paiement via la commande
% \DescribeMacro{\datelimite}\cmd{\datelimite}\marg{nbjours}. La date limite
% est calculÃ©e en ajoutant \meta{nbjours} Ã&nbsp; la date du document.
%
% \subsection{Information sur l'Ã©metteur}
%
% La commande \DescribeMacro{\nomemet}\cmd{\nomemet}\marg{texte} permet
% d'indiquer le nom de l'Ã©metteur, qui apparaÃ®tra dans l'entÃªte. Pour indiquer
% son adresse, qui apparaÃ®tra dans l'entÃªte mais Ã&nbsp; droite, on utilise
% \DescribeMacro{\adresseemet}\cmd{\adresseemet}\marg{texte}. On indique les
% retours Ã&nbsp; la ligne par \verb|\\|.
%
% Il existe Ã©galement une commande
% \DescribeMacro{\pied}\cmd{\pied}\marg{texte} qui provoque l'affichage de
% \meta{texte} Ã&nbsp; droite du pied de page, sur toutes les pages.
%
% \subsection{Information sur le destinataire}
% \label{dest}
%
% Le destinataire peut avoir deux adresses : une adresse de livraison et une
% de facturation. Seule la premiÃ¨re est obligatoire. Si la seconde est
% absente, la classe considÃ¨re qu'il s'agit de la mÃªme adresse. Ã€ la
% diffÃ©rence de l'Ã©metteur, le nom du destinataire s'indique en mÃªme temps que
% l'adresse.
%
% L'adresse de livraison se dÃ©finie via la commande
% \DescribeMacro{\dest}\cmd{\dest}\marg{adresse}, l'adresse de facturation via
% \DescribeMacro{\fact}\cmd{\fact}\marg{adresse}. Encore une fois, les
% diffÃ©rentes lignes de l'adresse doivent Ãªtre sÃ©parÃ©es par \verb|\\|.
%
% Il est possible d'affecter un code au client, via la commande
% \DescribeMacro{\codedest}\cmd{\codedest}\marg{code}.
%
% \subsection{Affichage des mÃ©ta-donnÃ©es}
%
% Toutes ces mÃ©ta-donnÃ©es, Ã&nbsp; l'exception du taux de TVA et du pied de page
% sont affichÃ©es dans une zolie prÃ©sentation avec la
% commande \DescribeMacro{\entete}\cmd{\entete}.
%
% \section{Insertion de texte}
%
% La classe Ã©tant dÃ©rivÃ©e de la classe \emph{article}, il est possible
% d'insÃ©rer du texte sectionnable avec les commandes de \emph{article}. Il n'y
% a pas d'endroit obligatoire pour l'afficher.
%
% \section{Insertion de la facture}
%
% Une facture est constituÃ©e de lignes indiquant les prix et quantitÃ©s des
% diffÃ©rents produits. Chaque ligne s'appelle au sein de l'environnement
% \DescribeEnv{facture}\emph{facture}, via la commande
% \DescribeMacro{\ligne}\cmd{\ligne}\marg{produit}\oarg{quantitÃ©}\marg{prix
% unitaire HT}\oarg{remise}\oarg{taux de TVA}.
%
% \meta{produit} est le nom du produit.
% \meta{quantitÃ©} est la quantitÃ© souhaitÃ©e. Le nombre peut Ãªtre entier ou
%   dÃ©cimal. En l'absence de cet argument, on suppose que le produit n'est
%   prÃ©sent qu'une fois.
% \meta{prix unitaire HT} n'est pas Ã&nbsp; dÃ©crire.
% \meta{remise} s'applique sur le prix total HT.
% \meta{taux de TVA}: si un produit n'a pas le mÃªme taux que celui par dÃ©faut
%   (\renvoi{TVA}), cet argument permet d'indiquer le taux. Il est exprimÃ© en
%   pourcentage, mais sans le signe \%.
%
% Tout les nombres dÃ©cimaux s'expriment en utilisant la virgule, mÃªme si
% l'usage du point fonctionne Ã©galement.
%
% La commande se charge automatiquement de calculer et d'afficher le prix
% total HT, la TVA et le prix total TTC.  Le total des produits est affichÃ©
% avec la fermeture de l'environnement \emph{facture}. Exemple (voir le
% fichier \href{exemple.pdf}{exemple.pdf} pour le rÃ©sultat):
%
% \begin{verbatim}
% \begin{facture}
%   \ligne{Produit 1}[2]{25}
%   \ligne{Produit 2}{10}[2]
% \end{facture}
% \end{verbatim}
%
% Dans le cas oÃ¹ l'option \verb|sansTVA| (\renvoi{TVA}) a Ã©tÃ© passÃ©e lors de
% l'appel Ã&nbsp; la classe, les colonnes ne sont pas les mÃªmes. Exemple (voir le
% fichier \href{exemplesansTVA.pdf}{exemplesansTVA.pdf} pour le rÃ©sultat):
%
% \begin{verbatim}
% \begin{facture}
%   \ligne{Produit 1}[2]{25}
%   \ligne{Produit 2}{10}[][2]
% \end{facture}
% \end{verbatim}
%
% Si l'option \verb|sansremise| a Ã©tÃ© passÃ©e lors de l'appel Ã&nbsp; la classe, le
% quatriÃ¨me argument de la colonne correspond au taux de TVA.
%
% \subsection{Texte en dessous des totaux}
%
% Dans le cas d'une facture sans TVA, l'environnement \emph{facture} indique
% le texte \enquote{TVA non applicable, art. 293 B}. Il est possible de
% modifier ce texte, ou d'en ajouter un pour les documents avec TVA, en
% redÃ©clarant la commande
% \DescribeMacro{\postTotaux}\cmd{\postTotaux}\marg{texte}.
%
% \begin{verbatim}
% \renewcommand{\postTotaux}{\hfill un joli texte}
% \end{verbatim}
%
% \section{Personnalisation}
%
% Plusieurs possibilitÃ©s de personnalisation existent, en redÃ©finissant des
% commandes et/ou des couleurs. J'invite Ã&nbsp; lire le code pour savoir lesquels.
%
% \begin{itemize}
% \item Pour les couleurs, les traits et les mise en valeurs des textes, \renvoi{apparence}.
% \item Pour les rÃ©glages concernant les mathÃ©matiques (arrondis par exemple), \renvoi{math}.
% \item Pour les textes, \renvoi{texte}.
% \item Pour le pieds de page, \renvoi{pied}.
% \item Pour l'affichage de la TVA, \renvoi{afficheTVA}.
% \item Pour la largeur des colonnes du tableau, \renvoi{largeurCols}.
% \end{itemize}
%
% Pour personnaliser la taille du papier et celle des marges, on peut utiliser
% le package \emph{geometry}.
%
% \StopEventually{}
% \appendix%
% \section{Documentation du code}
%
% \subsection{Chargement des packages}
%
% \iffalse
%&lt;*facture&gt;
% \fi
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{facture}[2023/06/30 v1.3]
\LoadClass[a4paper]{article} % On se base sur la classe article
\RequirePackage{fontspec}
\RequirePackage{xunicode}
\RequirePackage{polyglossia}
\setmainlanguage{french}
\RequirePackage{numprint} % Pour gÃ©rer l'affichage des nombres
\RequirePackage{fltpoint} % Pour faire les calculs dans le tableau
\RequirePackage{tikz}     % tikz est utilisÃ© pour tracer des boites, par exemple
\RequirePackage{graphicx} % Pour insÃ©rer des images. Utiliser le format jpg
                          % pour plus de simplicitÃ©.
\RequirePackage{fancyhdr} % Pour entÃªte et pied de page
\RequirePackage{array}
\RequirePackage{longtable}
\RequirePackage{colortbl}
\RequirePackage{advdate}  % Pour manipuler les dates
\RequirePackage{xargs}    % Pour des arguments conditionnels
%    \end{macrocode}
%
% \subsection{Option sansTVA}
%
%    \begin{macrocode}
\newif\ifsansTVA
\DeclareOption{sansTVA}{\sansTVAtrue}
%    \end{macrocode}
%
% \subsection{Option sansremise}
%
%    \begin{macrocode}
\newif\ifsansremise
\DeclareOption{sansremise}{\sansremisetrue}
%    \end{macrocode}
%
% \subsection{ExÃ©cution des options}
%
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}
%
% \subsection{Apparence}
% \label{apparence}
%
% On dÃ©finit ici les couleurs, l'Ã©cartement des colonnes, et l'apparences des
% libellÃ©s.
%
%    \begin{macrocode}
\definecolor{entetes}{HTML}{888888}
\definecolor{encadre}{RGB}{111,111,111}
\newcommand{\libelle}[1]{\textcolor{entetes}{\textbf#1}}
\setlength{\tabcolsep}{1pt}
\newlength{\epaisseurcadre}
\setlength{\epaisseurcadre}{1.5mm}
%    \end{macrocode}
%
% \subsection{Textes}
% \label{texte}
% \subsubsection{Invariants}
%
%    \begin{macrocode}
\newcommand{\codeclient}{Code client :}
\newcommand{\datetxt}{Date:}
\newcommand{\datelimitetxt}{Ã€ payer avant:}
\newcommand{\facturation}{Facturation}
\newcommand{\facturetxt}{Facture}
\newcommand{\livraison}{Livraison}
\newcommand{\livraisonfacturation}{Livraison et Facturation}
\newcommand{\ntxt}{~nÂ°}
\newcommand{\produit}{Produit}
\newcommand{\quantite}{QuantitÃ©}
\newcommand{\remise}{Remise}
\newcommand{\unite}{â‚¬}
%    \end{macrocode}
%
% \subsubsection{DÃ©pend du rÃ©glage sur la TVA}
%
% \Renvoi{TVA}
%
%    \begin{macrocode}
\ifsansTVA%
  \newcommand{\tottxt}{Total}
  \newcommand{\prixtxt}{Prix}
  \newcommand{\postTotaux}{\hfill TVA non applicable, art. 293 B}
\else%
  \newcommand{\prixHT}{Prix HT}
  \newcommand{\TVAtxt}{TVA}
  \newcommand{\prixTTC}{Prix TTC}
  \newcommand{\totHTtxt}{Total HT}
  \newcommand{\totTVAtxt}{Total TVA}
  \newcommand{\totTTCtxt}{Total TTC}
  \newcommand{\postTotaux}{}
\fi
%    \end{macrocode}
%
% \subsection{Largeur des colonnes}
% \label{largeurCols}
%
% On peut redÃ©finir les commandes ci-dessous pour modifier la largeur des
% commandes. Attention Ã&nbsp; ne pas dÃ©passer un total de 1\cmd{\textwidth} !
%
% Le package se charge d'ajuster automatiquement pour supprimer la marge
% intÃ©rieure.
%
% La largeur des chiffres est calculÃ©e automatiquement en fonction de la
% largeur du descriptif et de la largeur de la TVA. Il est donc fortement
% recommandÃ© de ne modifiÃ©e que \cs{largeurDescriptif} et \cs{largeurTVA}.
%
%    \begin{macrocode}
\newcommand{\largeurDescriptif}{0.2\textwidth}
\newcommand{\largeurTVA}{0.2\textwidth}
\ifsansremise
  \newcommand{\largeurChiffresAvecTVA}{%
    \dimexpr (\textwidth-\largeurDescriptif-\largeurTVA)/4\relax}
  \newcommand{\largeurChiffres}{%
    \dimexpr (\textwidth-\largeurDescriptif)/3 \relax}
\else
  \newcommand{\largeurChiffresAvecTVA}{%
    \dimexpr (\textwidth-\largeurDescriptif-\largeurTVA)/5\relax}
  \newcommand{\largeurChiffres}{%
    \dimexpr (\textwidth-\largeurDescriptif)/4 \relax}
\fi
%    \end{macrocode}
%
% \subsection{RÃ©glages mathÃ©matiques}
% \label{math}
%
% On rÃ©gle ici les paramÃ¨tres mathÃ©matiques, dÃ©finissables avec le package
% \emph{numprint}.  Tout d'abord on dit qu'on veut avoir les zÃ©ros finaux.
%
%    \begin{macrocode}
\npaddmissingzero
%    \end{macrocode}
%
% Puis on dit qu'on arrondit Ã&nbsp; deux chiffres aprÃ¨s la virgule.
%
%    \begin{macrocode}
\nprounddigits{2}
%    \end{macrocode}
%
% \subsection{Quelques rÃ©glages standards}
%
% Ici on rÃ©gle la TVA par dÃ©faut et le type de document
%
%    \begin{macrocode}
\def\@TVAdefaut{19,6}
\def\@type{\facturetxt}
%    \end{macrocode}
%
% \subsection{MÃ©ta-donnÃ©es}
%
% Toutes ces commandes sont appelÃ©es par l'utilisateurs au tout dÃ©but
% (\renvoi{meta}). La plupart stockent dans une commande commenÃ§ant par @ le
% code qui est passÃ©.
%
%    \begin{macrocode}
\renewcommand{\date}[1]{\SetDate[#1]}
\newcommand{\TVAdefaut}[1]{\def\@TVAdefaut{#1}}
\newcommand{\datelimite}[1]{\def\@datelimite{#1}}
\newcommand{\dest}[1]{\def\@dest{#1}}
\newcommand{\fact}[1]{\def\@fact{#1}}
\newcommand{\adresseemet}[1]{\def\@adresseemet{#1}}
\newcommand{\nomemet}[1]{\def\@nomemet{#1}}
\newcommand{\type}[1]{\def\@type{#1}}
\newcommand{\numero}[1]{\def\@numero{#1}}
\newcommand{\codedest}[1]{\def\@codedest{#1}}
%    \end{macrocode}
%
% \subsection{GÃ©nÃ©ration de l'entÃªte}
%
% \begin{macro}{\entete}
%   \changes{v1.2.2}{2017/04/12}{Corrections d'un bug si le numÃ©ro de facture n'est pas dÃ©fini.}
%   \changes{v1.3}{2023/06/30}{Corrige un bug si code client est absent.}
%
%   On se base sur le package \emph{TikZ} pour le gÃ©nÃ©rer.
%
%   Tout d'abord afficher le nom et l'adresse de l'Ã©metteur.
%
%    \begin{macrocode}
\newcommand{\entete}{
  \noindent\begin{tikzpicture}

    \noindent\node[font=\bf\Huge,text width=0.5\textwidth,text=entetes,text centered]{%
      \@nomemet%
    };

    \noindent\node(b)[xshift=0.5\textwidth,text width=0.5\textwidth,right]{%
      \@adresseemet%
    };
%    \end{macrocode}
% \iffalse} Stop Emacs syntax color being confused\fi
%
%   Ensuite dÃ©terminer la place que cela prend, puis tracer l'encadrÃ©.
%
%    \begin{macrocode}
    \coordinate[xshift=-\textwidth-\epaisseurcadre,yshift=1ex] (a) at (b.north);
    \coordinate[xshift=-\epaisseurcadre,yshift=-1ex] (c) at (b.south);
    \draw[color=encadre,line width=\epaisseurcadre] (a) rectangle  (c);
  \end{tikzpicture}
%    \end{macrocode}
%
%   Ensuite afficher le titre, avec un peu d'espace avant et aprÃ¨s, en le
%   chassant Ã&nbsp; droite.
%
%    \begin{macrocode}
  \vspace{3ex}

  \begin{flushright}
    {\Huge\libelle{\@type}}
  \end{flushright}

  \vspace{3ex}
%    \end{macrocode}
%
%   Ensuite afficher les informations sur le destinataire. Des tests
%   permettent d'afficher ou non la livraison sÃ©parement de la facture, en
%   fonction de ce qu'a dÃ©fini l'utilisateur (\renvoi{dest}).
%
%    \begin{macrocode}
  \begin{tikzpicture}
    \ifdef{\@fact}{
      \node[text width=0.33\textwidth,anchor=base]{
        \libelle{\facturation}

        \@fact
      };
    }{}

    \node[xshift=0.33\textwidth,text width=0.33\textwidth,anchor=base]{
      \ifdef{\@fact}
        {\libelle{\livraison}}
        {\libelle{\livraisonfacturation}}

      \@dest
    };
%    \end{macrocode}
%
%   On affiche finalement les dates, le numÃ©ro de la facture et le code
%   client.
%
%    \begin{macrocode}
    \node[text width=0.33\textwidth,xshift=0.66\textwidth,anchor=base]{
      \libelle{{\datetxt}} \today\\
      \ifdef{\@numero}{%
          \libelle{{\@type\ntxt}} \@numero\\
      }{}
      \ifdef{\@codedest}{%
          \libelle{{\codeclient}} \@codedest\\
      }{}
      \ifdef{\@datelimite}{%
          \AdvanceDate[\@datelimite]
          \libelle{{\datelimitetxt}} \today
      }{}
    };
  \end{tikzpicture}
} % end \entete
%    \end{macrocode}
% \end{macro}
%
% \subsection{Le tableau de facturation}
%
% On commence par dÃ©finir des variables globales qui servent Ã&nbsp; stocker les
% totaux gÃ©nÃ©raux.
%
%    \begin{macrocode}
\ifsansTVA
  \xdef\tot{}
\else
  \xdef\totTVA{}
  \xdef\totHT{}
  \xdef\totTTC{}
\fi
%    \end{macrocode}
%
% On dÃ©finit ensuite un nouveau type de colonne, avec un alignement Ã&nbsp; droite.
%
%    \begin{macrocode}
\newcolumntype{P}[1]{&gt;{\raggedleft}p{#1}}
%    \end{macrocode}
%
% On  dÃ©finit ensuite l'environnement \emph{facture}.
%
% \begin{environment}{facture}
%   Tout d'abord on affiche l'entÃªte, selon qu'on soit avec ou sans TVA
%
%    \begin{macrocode}
\newenvironment{facture}{%
  \setlength{\extrarowheight}{0.5ex}
  \setlength{\tabcolsep}{0.5em}
  \edef\@largeurDescriptif{\dimexpr\largeurDescriptif -2\tabcolsep\relax}
  \edef\@largeurChiffres{\dimexpr\largeurChiffres -2\tabcolsep\relax}
  \edef\@largeurTVA{\dimexpr\largeurTVA -2\tabcolsep\relax}
  \edef\@largeurChiffresAvecTVA{\dimexpr\largeurChiffresAvecTVA -2\tabcolsep\relax}
  \arrayrulecolor{encadre}
  \ifsansTVA%
    \ifsansremise%
      \begin{longtable}{%
        |p{\@largeurDescriptif}% Descriptif
        |P{\@largeurChiffres}% Qt
        |P{\@largeurChiffres}% Prix
        |P{\@largeurChiffres}|% Total
      }%
      \hline%
      \rowcolor{entetes}%
      \centering\textbf\produit &amp;%
      \centering\textbf\quantite &amp;%
      \centering\textbf\prixtxt &amp;%
      \centering\textbf\tottxt%
      \tabularnewline[1ex]%
    \else%
      \begin{longtable}{%
        |p{\@largeurDescriptif}% Descriptif
        |P{\@largeurChiffres}% Qt
        |P{\@largeurChiffres}% Prix
        |P{\@largeurChiffres}% Remise
        |P{\@largeurChiffres}|% Total
      }%
      \hline%
      \rowcolor{entetes}%
      \centering\textbf\produit &amp;%
      \centering\textbf\quantite &amp;%
      \centering\textbf\prixtxt &amp;%
      \centering\textbf\remise &amp;%
      \centering\textbf\tottxt%
      \tabularnewline[1ex]%
    \fi%
  \else%
    \ifsansremise%
      \begin{longtable}{%
        |p{\@largeurDescriptif}|% Descriptif
        P{\@largeurChiffresAvecTVA}|% Qt
        P{\@largeurChiffresAvecTVA}|% HT unitaire
        P{\@largeurChiffresAvecTVA}|% Totalht
        P{\@largeurTVA}|% TVA
        P{\@largeurChiffresAvecTVA}|% Total TTC
      }%
      \hline%
      \rowcolor{entetes}
      \centering\textbf\produit &amp;%
      \centering\textbf\quantite &amp;%
      \centering\textbf\prixHT &amp;%
      \centering\textbf\totHTtxt &amp;%
      \centering\textbf\TVAtxt &amp;%
      \textbf\prixTTC \tabularnewline[1ex]%
    \else%
      \begin{longtable}{%
        |p{\@largeurDescriptif}|% Descriptif
        P{\@largeurChiffresAvecTVA}|% Qt
        P{\@largeurChiffresAvecTVA}|% HT unitaire
        P{\@largeurChiffresAvecTVA}|% Remise
        P{\@largeurChiffresAvecTVA}|% Totalht
        P{\@largeurTVA}|% TVA
        P{\@largeurChiffresAvecTVA}|% Total TTC
      }%
      \hline%
      \rowcolor{entetes}
      \centering\textbf\produit &amp;%
      \centering\textbf\quantite &amp;%
      \centering\textbf\prixHT &amp;%
      \centering\textbf\remise &amp;%
      \centering\textbf\totHTtxt &amp;%
      \centering\textbf\TVAtxt &amp;%
      \textbf\prixTTC \tabularnewline[1ex]%
    \fi%
  \fi%
  \endhead%
  \endfoot%
}% end opening part of environment
%    \end{macrocode}
%
%   Le contenu du tableau est gÃ©nÃ©rÃ© par les commandes \cmd{\ligne}. Lorsqu'on
%   ferme l'environnement \emph{facture}, on ferme le tableau
%
%    \begin{macrocode}
{% begin closing part of environment
\end{longtable}
%    \end{macrocode}
%
%   On affiche ensuite les totaux.
%
%    \begin{macrocode}
  \ifsansTVA%
    \noindent\hspace{0.66\textwidth}\hfill
    \libelle{\tottxt:} \numprint[\unite]{\tot}\\%
  \else%
    \noindent\hspace{0.66\textwidth}
    \libelle{\totHTtxt:}\hfill \numprint[\unite]{\totHT}\\%
    \hbox{}\hspace{0.66\textwidth}
    \libelle{\totTVAtxt:}\hfill \numprint[\unite]{\totTVA}\\%
    \hbox{}\noindent\hspace{0.66\textwidth}
    \libelle{\totTTCtxt:}\hfill \numprint[\unite]{\totTTC}\\
  \fi
  \hspace{0.66\textwidth}\postTotaux
}% end closing part of environment
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\lignesansTVA}
%   On a besoin de dÃ©finir une commande \cmd{\lignesansTVA} pour afficher le
%   contenu d'une ligne lorsqu'on n'a pas de TVA.
%
%    \begin{macrocode}
\newcommand{\lignesansTVA}[5]{
  #1 &amp;
  #2 &amp;
  #3 &amp;
  \unless\ifsansremise
    #4 &amp;
  \fi
  #5 \tabularnewline[1ex]}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\afficheTVA}
%   La commande \cmd{\afficheTVA} sert Ã&nbsp; afficher la TVA dans le tableau. En
%   ne l'indiquant pas directement dans le code de \cmd{\ligne}, on permet de
%   personnaliser plus facilement l'affichage de la TVA. \label{afficheTVA}
%
%    \begin{macrocode}
\newcommand{\afficheTVA}[1]{%
  \raggedleft{\numprint[\%]{#1}}
  \hfill $\triangleright$ \numprint[\unite]{\TVA}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ligne}
%   Voici maintenant la commande \cmd{\ligne}. Pour gÃ©rer les arguments
%   optionnels, on se sert du package \emph{xargs}.
%
%    \begin{macrocode}
\newcommandx{\ligne}[5][2=1,5=\@TVAdefaut,4=0,usedefault]{%
%    \end{macrocode}
%
%   On procÃ¨de aux calculs grÃ¢ce au package \emph{fltpoint}, on affiche les
%   rÃ©sultat grÃ¢ce au package \emph{numprint}.
%
%    \begin{macrocode}
  \ifsansTVA
    \fpMul{\prix}{#3}{#2}%
    \fpSub{\prix}{\prix}{#4}%
    \fpAdd{\tot}{\prix}{\tot}%
    \xdef\tot{\tot}%
    \xdef\prix{\prix}%
    % Affichage
    \lignesansTVA{#1}{#2}{%
      \numprint[\unite]{#3}%
    }{%
      \numprint[\unite]{#4}%
    }{%
      \numprint[\unite]{\prix}}%
  \else
    % Prix hors taxe
    \fpMul{\HT}{#3}{#2}%
    \unless\ifsansremise%
      \fpSub{\HT}{\HT}{#4}%
    \fi%
    \xdef\HT{\HT}%retenons
    \fpAdd{\totHT}{\totHT}{\HT}%
    \xdef\totHT{\totHT}%
    % Calcul de la TVA
    \ifsansremise%
      \fpDiv{\centieme}{#4}{100}%
    \else%
      \fpDiv{\centieme}{#5}{100}%
    \fi
    \fpMul{\TVA}{\centieme}{\HT}%
    \xdef\TVA{\TVA}%retenons
    \fpAdd{\totTVA}{\totTVA}{\TVA}%
    \xdef\totTVA{\totTVA}%
    % Prix TTC
    \fpAdd{\TTC}{\HT}{\TVA}%
    \xdef\TTC{\TTC}%
    \fpAdd{\totTTC}{\totTTC}{\TTC}%
    \xdef\totTTC{\totTTC}%
    % Affichage
    #1 &amp;
    #2 &amp;
    \numprint[\unite]{#3} &amp;
    \unless\ifsansremise
      \numprint[\unite]{#4} &amp;
    \fi
    \numprint[\unite]{\HT} &amp;
    \afficheTVA{#5} &amp;
    \numprint[\unite]{\TTC} \tabularnewline[1ex]%
  \fi
  \hline
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Apparence du pied}
% \label{pied}
% On se base sur le package \emph{fancyhdr} pour personnaliser le pied.
%
%    \begin{macrocode}
\AtBeginDocument{
  \pagestyle{fancy}
  \fancyhf{}
  \renewcommand{\headrule}{} % Pas de rÃ¨gle aprÃ¨s l'entÃªte
  % Indiquer le numÃ©ro de page, sauf sur la premiÃ¨re
  \lfoot{\ifnum \value{page}&gt;1 \thepage\fi}
  \rfoot{\@pied}
}
\newcommand{\pied}[1]{\def\@pied{#1}} % Le pied dÃ©finissable par l'utilisateur
%    \end{macrocode}
% \iffalse
%&lt;/facture&gt;
% \fi
% \PrintChanges
% \Finale
% \endinput
</pre></body></html>