IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation (La)TeX avancée Discussion :

Combinaisons paramétrées


Sujet :

Programmation (La)TeX avancée

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Combinaisons paramétrées
    Bonjour à tous,

    Nouvel inscrit et vieux lecteur de ce forum, je me retrouve face à un problème délicat pour mon niveau. Mes recherches n'ayant rien donné de probant, je suis à la recherche de vos conseils, idées et expériences :

    Pour le rendu :
    J'ai besoin de réaliser des offres commerciales pdf en combinant les textes descriptifs et tarifs de nombreux éléments comme suit :
    offre 1 : produit A + équipement C + option équipement E & F
    offre 2 : produit A + équipement D + option équipement E & F
    offre 3 : produit B + équipement C + option équipement E & F
    offre 4 : produit B + équipement D + option équipement E & F
    ... et ainsi de suite... J'ai calculé environ 45 produits dans un premier temps (pourrait aller à environ 100), 30 équipements et environ 100 options. Toutes les combinaisons ne sont pas forcément possibles.

    Pour la méthode :
    Je compte utiliser un fichier excel me permettant de mettre en place les combinaisons et les tarifs. J'aurais une offre sur chaque ligne.
    Ensuite, je compte composer chaque offre séparément puis les inclure dans un catalogue global.
    Par exemple, pour l'offre 1 : en extrayant des références depuis mon excel, je mets en forme les textes de produit A et équipement C, je fais la somme de leur tarif puis j'ajoute à la suite les options (texte et tarif).

    Je pense réaliser ceci en utilisant Python qui extrairait de excel puis réaliserait les fichiers .tex en utilisant un semblant de Template. C'est le moyen le plus efficace que j'ai pu trouver après mes recherches. Je ne vois pas d'autres méthodes.

    Quel est votre avis à ce sujet?
    Avez-vous des conseils à prodiguer?

    Merci d'avance à vous tous en espérant que ma description est claire et compréhensible.

  2. #2
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Il est aussi possible de faire traiter les fichiers csv par TeX directement. La mise en page et les calculs pourront être mis en place directement. Un exemple de fichier csv et des consignes plus précise et je pourrai essayer de mettre quelque chose en place.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour -Nikopol-,

    Pour être plus précis et clair, j'ai rédigé un fichier excel synthétisant le besoin. D'ailleurs, cela m'a permis d'affiner les choses rapport à mes premières réalisations.
    Il y a aussi un fichier avec les textes. Ne pouvant pas mettre plus de 5 fichiers, j'ai rassemblé les textes. Au final, je souhaite que ce soit séparé par simplification.

    matrice offre tarifaire.xlsx textes.txt

    Donc en prenant la première ligne dans le fichier excel :
    1) On crée l'offre 1 : un fichier .tex qui deviendra .pdf avec la référence de l'offre en titre et en nom de fichier.
    2) On utilise le texte 1 auquel on ajoute le texte 2 puis le texte 3. Cela constitue l'offre de base.
    3) On indique le tarif global de 10200€ (10000+100+100) à la suite de l'offre de base.
    4) On ajoute une première option avec le texte 4 au prix de 100€.
    5) On ajoute une seconde option avec le texte 5 au prix de 100€.

    On recommence pour la seconde ligne : Offre 2 et ainsi jusqu'à ce que toutes les lignes soient traitées.
    Une fois toutes les lignes traitées, on finalise en réalisant un catalogue complet en .pdf de toutes les offres, puis suppression des fichiers .tex. Les offres en .pdf sont conservées.

    Je souhaite un fichier excel comme un point de départ, car cela permet de travailler sur les tarifs en ayant une vue globale. Et avec ce principe, une évolution de tarif est rapidement répercutée sans pour autant bricoler dans Word par exemple. S'il faut convertir en .csv pour le reprendre en latex, pas de soucis. Je pensais simplement que latex ou moi-même ne s'en sortirais pas ainsi.

    J’espère avoir été clair, merci de ton aide.

  4. #4
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Voici un premier jet, à ajuster bien évidemment. Ici, TeX va lire le fichier csv ligne par ligne et stoker chaque cellule pour la réutiliser dans le document.
    L'idée est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    \documentclass{article}
    \usepackage{xstring}
    \makeatletter
     
    \newread\monfichier%
    \newcount\pr@num%
    \def\lignevide{\par}
    \def\refprod#1{\csname refprod@#1\endcsname}
    \def\textprod#1{\csname textprod@#1\endcsname}
    \def\tarifprod#1{\csname tarifprod@#1\endcsname}
    \def\textoptprod#1{\csname textoptprod@#1\endcsname}
    \def\tarifoptprod#1{\csname tarifoptprod@#1\endcsname}
    \def\prixprod#1{\csname prixprod@#1\endcsname}
    \def\textequip#1{\csname textequip@#1\endcsname}
    \def\tarifequip#1{\csname tarifequip@#1\endcsname}
    \def\totalbase#1{\csname totalbase@#1\endcsname}
    \def\textoptequipe@i#1{\csname textoptequipe@i@#1\endcsname}
    \def\tarifoptequip#1{\csname tarifoptequip@#1\endcsname}
    \def\textprod#1{\csname textprod@#1\endcsname}
    \def\tarifoptequip@i#1{\csname tarifoptequip@i@#1\endcsname}
     
    \def\lireligne#1 \@nil{%
    		\ifx\lireligne\@empty%
    		\else
    			  \StrBefore[1]{#1}{,}[\refprod]%1
    			  \StrBetween[1,2]{#1}{,}{,}[\textprod]%2
    			  \StrBetween[2,3]{#1}{,}{,}[\tarifprod]%3
    			  \StrBetween[3,4]{#1}{,}{,}[\textoptprod]%4
    			  \StrBetween[4,5]{#1}{,}{,}[\tarifoptprod]%5
    			  \StrBetween[5,6]{#1}{,}{,}[\prixprod]%6
    			  \StrBetween[6,7]{#1}{,}{,}[\textequip]%7
    			  \StrBetween[7,8]{#1}{,}{,}[\tarifequip]%8
    			  \StrBetween[8,9]{#1}{,}{,}[\totalbase]%9
    			 \StrBetween[9,10]{#1}{,}{,}[\textoptequipe]%10
    			\StrBetween[10,11]{#1}{,}{,}[\tarifoptequip]%11
    			\StrBetween[11,12]{#1}{,}{,}[\textoptequipe@i]%12
    			\StrBetween[12,13]{#1,}{,}{,}[\tarifoptequip@i]%13
    		\fi}
     
     
    \def\readata#1{\def\nbligne{0}\pr@num=0%
        \immediate\openin\monfichier=#1\relax
        \loop\unless\ifeof\monfichier\read\monfichier to\ligne%
        \ifeof\monfichier\else\ifx\ligne\lignevide\else\advance\pr@num by 1 %
        \expandafter\lireligne\ligne\@nil
        \expandafter\let\csname refprod@#1\the\pr@num\endcsname=\refprod%
        \expandafter\let\csname textprod@#1\the\pr@num\endcsname=\textprod
        \expandafter\let\csname tarifprod@#1\the\pr@num\endcsname=\tarifprod%3        
        \expandafter\let\csname textoptprod@#1\the\pr@num\endcsname=\textoptprod%4      
        \expandafter\let\csname tarifoptprod@#1\the\pr@num\endcsname=\tarifoptprod%5     
        \expandafter\let\csname prixprod@#1\the\pr@num\endcsname=\prixprod%6         
        \expandafter\let\csname textequip@#1\the\pr@num\endcsname=\textequip%7        
        \expandafter\let\csname tarifequip@#1\the\pr@num\endcsname=\tarifequip%8       
        \expandafter\let\csname totalbase@#1\the\pr@num\endcsname=\totalbase%9        
        \expandafter\let\csname textoptequipe@i@#1\the\pr@num\endcsname=\textoptequipe%10   
        \expandafter\let\csname tarifoptequip@#1\the\pr@num\endcsname=\tarifoptequip%11   
        \expandafter\let\csname textoptequipe@i@#1\the\pr@num\endcsname=\textoptequipe@i%12 
        \expandafter\let\csname tarifoptequip@i@#1\the\pr@num\endcsname=\tarifoptequip@i%13
        \catalogue\fi\fi\repeat%
        \immediate\closein\monfichier}
     
    \newcommand{\resultat}[1]{\csname textprod@#1\endcsname} 
    \def\catalogue{%
    	\unless\ifnum\the\pr@num>2 %
    		\relax
    	\else
    		Le produit \refprod\ a pour description: \textprod\ et a pour tarif \tarifprod\ euro. Ce produit poss\`ede pour option : \textoptprod\ au prix de \tarifoptprod\ euros pour un prix total de \prixprod{}.\par
    		S'ajoute un \'equipement : \textequip au tarif de \tarifequip .\par Ce qui donne au final un prix total pour l'offre de base \totalbase euros.\par 
    		Il est possible d'ajouter des options :
    		\begin{itemize}
    		\item \textoptequipe\ au prix de \tarifoptequip\ euro ;
    		\item \textoptequipe@i\ au prix de \tarifoptequip@i\ euro ;
    		\end{itemize}\bigskip
    	\fi}
    \makeatother
    \parindent=0pt
    \begin{document}
    \readata{matrice.csv}
    \end{document}
    Avec le fichier calc utilisé : matrice.ods à exporter en .csv. Il sera surement nécessaire de changer de séparateur si on vuet insérer des virgules dans le texte.
    J'espère avoir saisi ce que tu souhaites. L'histoire des 5 fichiers n'est pas très clair.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Je viens de reprendre l'exemple et m'en inspirer. C'est effectivement ce qu'il me fallait. Merci beaucoup pour l'aide apportée.

    Pour ceux qui reprendront le sujet par la suite, faites attention à la manière dont les données sont séparées dans le csv. Pour ma part, j'ai simplement du adapter. Je marque le sujet comme résolu.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Apres une apres-midi a utiliser l'aide apportee par nikopol, un probleme se pose : je n'arrive pas a creer deux colonnes : la premiere avec un logo et la seconde avec du texte. NB : Pour simplifier la recherche sur le probleme, l'exemple a le texte 'logo fiche' en lieu et place d'une image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    \newcommand{\resultat}[1]{\csname textprod@#1\endcsname}
    \def\catalogue{%
    	\unless\ifnum\the\pr@num>2 %
    		\relax
    	\else
    		\begin{tabular}{ll}
    			logo fiche & %definir le fichier logo
    			\newline \textit{Ref : \refmss\ }
    			\newline Type : \type\
    			\newline Configuration : \config\
    			\newline Empattement : \empat\
    			\newline Moteur : \moteur\
    			\newline Couple : \couple\
    			\newline PTAC : \ptac\
    			\newline PTRA : \ptra\
    			\newline CU : \chargeutile\
    			\newline \tiny{tolerance charge utile : +\textbackslash- 5\%
    		\end{tabular}
    		Le produit \refprod\ a pour description: \textprod\ et a pour tarif \tarifprod\ euro. Ce produit poss\`ede pour option : \textoptprod\ au prix de \tarifoptprod\ euros pour un prix total de \prixprod{}.\par
    		S'ajoute un \'equipement : \textequip au tarif de \tarifequip .\par Ce qui donne au final un prix total pour l'offre de base \totalbase euros.\par 
    		Il est possible d'ajouter des options :
    		\begin{itemize}
    		\item \textoptequipe\ au prix de \tarifoptequip\ euro ;
    		\item \textoptequipe@i\ au prix de \tarifoptequip@i\ euro ;
    		\end{itemize}\bigskip
    	\fi}
    J'obtiens l'erreur suivante en compilant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Runaway definition?
    ->\unless \ifnum \the \pr@num >2 \relax \else \begin {tabular}{ll} lo\ETC.
    ! File ended while scanning definition of \catalogue.
    <inserted text> 
                    }
    <*> F:/Renal/developpement/developpement.tex
     
    ?
    si quelqu'un sait me donner une piste de recherche ou une indication, merci d'avance.

  7. #7
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Les tableaux, c'est plus complexe notamment à cause de l'esperluette qui ferme un groupe.
    Tu peux essayer de t'inspirer des codes que j'ai proposés ici.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Je ne te cache pas que je me sens un peu largué. J'ai bien compris la raison du problème mais je n'arrive à visualiser la subtilité de ta solution en lien. Pourrais-tu m'en dire plus stp? Il faut créer une nouvelle fonction à part et l'appeler, cela ne ressemble pas à cela de ce que j'en vois mais j'ai un doute.

    Merci d'avance

  9. #9
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Comme la lecture se fait ligne par ligne, il faut stoker cette ligne dans un registre (\newtoks). Une fois toutes les lignes lues on fait appelle à ce registre dans un tableau.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    J'ai passe du temps a tenter de comprendre la commande \newtok malheureusement je n'arrive pas a m'en sortir. De plus, quelques interrogations me sont venues.

    Tout d'abord, le code que je tente de faire marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    \newcommand{\resultat}[1]{\csname textprod@#1\endcsname}
    \def\catalogue{\spec={}
    	\loop\ifnum\pr@num>2 %
    		\advance\pr@num by -1  %
    		\edef\nbligne{\number\numexpr\nbligne+1}
    		\edef\lignecourante{
    			\newline \textit{Ref : \refvss\ }
    			\newline Type : \type\
    			\newline Configuration : \config\
    			\newline Empattement : \empat\
    			\newline Moteur : \moteur\
    			\newline Couple : \couple\
    			\newline PTAC : \ptac\
    			\newline PTRA : \ptra\
    			\newline CU : \chargeutile\
    			\newline \tiny{tolerance charge utile : +\textbackslash- 5\%}
    		\g@addto@macro\lignecourante{}
    		\edef\temp{\the\pr@num}
    		\pr@num=\expendafter\expendafter\expendafter
    		{\expendafter\temp\lignecourante}
    		\repeat
    ensuite le resultat de la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Runaway definition?
    ->\spec ={} \loop \ifnum \pr@num >2 \advance \pr@num by -1 \edef \nbligne \ETC.
    ! File ended while scanning definition of \catalogue.
    <inserted text> 
                    }
    <*> F:/Renal/developpement/developpement2.tex
    Avez-vous une piste ou un tutoriel pour debloquer les choses svp? Je n'ai pas pu trouver de tutoriel clair autour de ces principes, peut-etre en connaissez-vous pour que je puisse chercher plus efficcacement.

    Pour votre comprehension, je cherche a realiser un document de la maniere suivante :

    titre
    titre de section
    tableau a 2 colonnes : une pour un schema, l'autre pour des lignes de textes en parametre
    titre de section
    tableau a 2 colonnes : ligne de texte en parametre des deux cotes
    titre de section
    tableau a 2 colonnes : ligne de texte en parametre des deux cotes

    Maintenant mes interrogations : peut-on gerer plusieures boucles avec \newtok poru arriver au resultat ci-dessus.

    Merci pour votre aide a tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Algo] Trouver un arrangement ou une combinaison d'éléments
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 20/04/2013, 11h46
  2. combinaisons de paramètres estimés après proc model
    Par OROZCO dans le forum SAS STAT
    Réponses: 0
    Dernier message: 20/01/2009, 16h01
  3. liaison RS: Combinaisons invalides des paramètres
    Par rzayani dans le forum Développement
    Réponses: 0
    Dernier message: 20/09/2008, 19h47
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo