[Résolu] Problème avec une chaîne de caractères

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

[Résolu] Problème avec une chaîne de caractères

Messagepar evariste_G » Mercredi 09 Mai 2012, 17:57

Bonjour.
J'ouvre un nouveau topic car , bien que proche, il n'a rien à voir avec le précédent que j'ai pu posté.

Le code suivant fonctionne très bien :

Code: Tout sélectionner
\documentclass[10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\makeatletter
\newcount\cntcol
\newcommand*\defcolumns{\cntcol\z@\valheadcols}
\newcommand*\valheadcols[1]{\valheadcols@#1,\valheadcols@,}
\def\valheadcols@#1,{%
   \ifx\valheadcols@#1%
   \else
      \advance\cntcol\@ne
     \expandafter\xdef\csname ValCol#1\endcsname{\number\cntcol}
      \expandafter\valheadcols@
   \fi
}
\newcommand*\ValCol[1]{\@nameuse{ValCol#1}}
\makeatother
\begin{document}
\def\chaine{A,B,C,D}
\defcolumns{A,B,C,D}

A : \ValCol{A}
\end{document}


Il a pour but d'attribuer un nombre (sa position dans la chaîne informée) à une lettre.

Par contre, le code suivant ne donne rien :

Code: Tout sélectionner
\documentclass[10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\makeatletter
\newcount\cntcol
\newcommand*\defcolumns{\cntcol\z@\valheadcols}
\newcommand*\valheadcols[1]{\valheadcols@#1,\valheadcols@,}
\def\valheadcols@#1,{%
   \ifx\valheadcols@#1%
   \else
      \advance\cntcol\@ne
     \expandafter\xdef\csname ValCol#1\endcsname{\number\cntcol}
      \expandafter\valheadcols@
   \fi
}
\newcommand*\ValCol[1]{\@nameuse{ValCol#1}}
\makeatother
\begin{document}
\def\chaine{A,B,C,D}
\defcolumns{\chaine}

A : \ValCol{A}
\end{document}


Comme faire pour que cela fonctionne ?
Dernière édition par evariste_G le Mercredi 09 Mai 2012, 20:44, édité 1 fois.
evariste_G
Téra-utilisateur
 
Messages: 1340
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Post-bac

Publicité

Re: Problème avec une chaîne de caractères

Messagepar un bon petit » Mercredi 09 Mai 2012, 18:52

evariste_G a écrit:Comme faire pour que cela fonctionne ?

Il faudrait développer #1 dans \valheadcols; un \expandafetr suffira...

Je ne connais pas l'utilisation de la macro \ValCol donc je ne critique pas le fait d'assigner une séquence de contrôle à chaque élément de la liste. Ceci dit, sans vouloir faire de pub et si \chaine est à même de contenir du code purement développable, tu peux aussi utiliser xstring...

Code: Tout sélectionner
\documentclass{article}
\usepackage{xstring}
\makeatletter
\newcommand*\defcolumns{\def\item@list}
\newcommand*\ValCol[1]{%
   \StrBefore\item@list{#1}[\temp@]%
   \StrCount{,\temp@},}
\makeatother
\begin{document}
\def\chaine{A,B,C,D}
\defcolumns{\chaine}
A : \ValCol{A}

\defcolumns{u,v,w,x,y,z}
w : \ValCol{w}
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 638
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Problème avec une chaîne de caractères

Messagepar evariste_G » Mercredi 09 Mai 2012, 20:44

En effet, un \expandafter suffisait.
J'ai tout de même testé avec les commandes de xstring, vu que je fais appel à cette extension pour d'autres choses, et cela ne convient pas car la commande \ValCol est utilisée dans pas mal d'autres commandes et, a priori, passer par ta solution ne convient pas dans mon contexte. Cela dit, cette dernière syntaxe est pas mal (plus courte), donc intéressante (dans d'autres situations, elle pourrait être bien).

Merci encore.
evariste_G
Téra-utilisateur
 
Messages: 1340
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Post-bac

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar projetmbc » Mercredi 09 Mai 2012, 20:47

Salut,
serais-tu en train de travailler sur l'interface de pas-tableur ?
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Problème avec une chaîne de caractères

Messagepar un bon petit » Mercredi 09 Mai 2012, 21:37

projetmbc a écrit:serais-tu en train de travailler sur l'interface de pas-tableur ?
Oh non, pas cette tikzerie !

evariste_G a écrit:En effet, un \expandafter suffisait.
J'ai tout de même testé avec les commandes de xstring, vu que je fais appel à cette extension pour d'autres choses, et cela ne convient pas car la commande \ValCol est utilisée dans pas mal d'autres commandes et, a priori, passer par ta solution ne convient pas dans mon contexte.
Il fallait peut-être préciser que la macro \ValCol devait être purement développable !!! Sans ça, comment l'aurais-je deviné ? :roll:

Je me rabats sur ceci alors qui n'utilise pas de compteur :
Code: Tout sélectionner
\documentclass{article}
\makeatletter
\def\defcolumns#1{%
   \csname @\expandafter\ifcat\expandafter\noexpand\@car#1\@nil\relax first\else second\fi oftwo\endcsname
   {\expandafter\defcolumns\expandafter{#1}}{\defcolumn@i1#1,\defcolumn@i,}}
\def\defcolumn@i#1#2,{%
   \expandafter\ifx\@car#2\@nil\defcolumn@i\else
      \expandafter\def\csname valcol@#2\endcsname{#1}%
      \expandafter\defcolumn@i\number\numexpr#1+1\expandafter\relax
   \fi}
\def\ValCol#1{\csname valcol@#1\endcsname}
\makeatother
\begin{document}
\def\chaine{A,B,C,D}
\defcolumns\chaine
A : \ValCol{A}

\defcolumns{u,v,w,x,y,z}
w : \edef\valeur{\ValCol{w}}\valeur
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 638
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Problème avec une chaîne de caractères

Messagepar projetmbc » Mercredi 09 Mai 2012, 21:40

un bon petit a écrit:
projetmbc a écrit:serais-tu en train de travailler sur l'interface de pas-tableur ?
Oh non, pas cette tikzerie !

Toutes les tikzeries ne sont pas infréquentables... :wink:
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Problème avec une chaîne de caractères

Messagepar un bon petit » Mercredi 09 Mai 2012, 21:46

projetmbc a écrit:[Toutes les tikzeries ne sont pas infréquentables... :wink:

Je me retiens de répondre que si, étant moi même pas très clair sur le sujet.

Ce que je regrette est que les tikzeries-zigouisgouis deviennent un besoin compulsif et irrépressible pour certains. J'en vois même qui utilisent tikz pour encadrer du texte ou pour tracer une ligne horizontale. Ça devient vraiment du n'importe quoi...

Pour en revenir à ce fil, j'aurai adoré que ce package soit écrit en tex pur, ça aurait vraiment eu de la gueule, j'aurais vraiment eu envie d'y fourrer mon nez pour améliorer la chose. Mais en tikz, non, vraiment pas, je déteste.

Ceci dit, je me laisserai peut être tenter par du tex pur un de ces jours si personne ne se lance. Rien que pour le sport...
un bon petit
Giga-utilisateur
 
Messages: 638
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar projetmbc » Mercredi 09 Mai 2012, 21:58

Pour mémoire, il y a la solution de pg. Ceci étant, la solution de pas-tableur est bien plus jolie tout en restant sobre. J'aime beaucoup ce rendu.
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar evariste_G » Jeudi 10 Mai 2012, 15:02

projetmbc a écrit:Salut,
serais-tu en train de travailler sur l'interface de pas-tableur ?


En effet, j'ai eu un peu de temps pour me pencher sur ta proposition et j'ai réussi à faire quelques trucs, mais rien de définitif pour le moment.

Quant à la dernière proposition de code de un bon petit, je m'y attarderai quand j'en aurai encore (du temps) car là, c'est reparti pour des journées qui n'en finissent pas.

Je précise que je n'ai pas du tout le même niveau, donc ma compréhension risque de ne pas être optimale. Merci encore.
evariste_G
Téra-utilisateur
 
Messages: 1340
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Post-bac

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar projetmbc » Vendredi 11 Mai 2012, 21:38

Bonsoir.

evariste_G a écrit:En effet, j'ai eu un peu de temps pour me pencher sur ta proposition et j'ai réussi à faire quelques trucs, mais rien de définitif pour le moment.

Voici un truc à ajouter tel quel pour pouvoir utiliser ^ comme un caractère usuel.
Code: Tout sélectionner
   \newcommand\celtxt{%
      \begingroup
         \@makeother^
         \@celtxt@
   }
   \newcommand\@celtxt@[4][l]{
      \node[below right] at ($(c0.south west)+({(\ValCol{#2}-1)*\colminwidth},{-(#3-1)*\lineminheight})$) {
            \makebox[\colminwidth][#1]{\helv #4\phantom{-.}}
         };
      \endgroup%
   }
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar un bon petit » Vendredi 11 Mai 2012, 22:12

projetmbc a écrit:Voici un truc à ajouter tel quel pour pouvoir utiliser ^ comme un caractère usuel.
Code: Tout sélectionner
\@makeother^

Je ne vois pas le rapport avec la question posée mais oui, évidemment. Ceci fonctionne aussi pour les autres caractères de catcode spéciaux (enfin, presque tous !).

Sauf qu'ici, pour être tout à fait rigoureux, il manque un % à la fin de la ligne. Toujours tes problèmes de spurious spaces à ce que je vois... Au fait, le % après \endgroup est inutile :mrgreen:
un bon petit
Giga-utilisateur
 
Messages: 638
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar projetmbc » Samedi 12 Mai 2012, 10:05

un bon petit a écrit:Je ne vois pas le rapport avec la question posée mais oui, évidemment. Ceci fonctionne aussi pour les autres caractères de catcode spéciaux (enfin, presque tous !).

Pour le moment pas-tableur ne permet d'écrire quelque chose comme 2^3 d'où la proposition.

un bon petit a écrit:Sauf qu'ici, pour être tout à fait rigoureux, il manque un % à la fin de la ligne. Toujours tes problèmes de spurious spaces à ce que je vois... Au fait, le % après \endgroup est inutile :mrgreen:

J'en connais un qui jubile... :lol:
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar evariste_G » Samedi 12 Mai 2012, 10:44

Merci pour la suggestion. Je viens de l'ajouter. Je mettrai à jour le package sur mon site dans quelques minutes.
evariste_G
Téra-utilisateur
 
Messages: 1340
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Post-bac

Re: [Résolu] Problème avec une chaîne de caractères

Messagepar projetmbc » Samedi 12 Mai 2012, 13:26

Merci pour cette mise à jour.
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Ahrefs [Bot], Grapeshot [Crawler] et 3 invités