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 :

Vérification d'une chaine avec xstring


Sujet :

Programmation (La)TeX avancée

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut Vérification d'une chaine avec xstring
    Bonjour,

    Je souhaite vérifier dans \@author si la chaine "and" y est présente. Candide, j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    \IfSubStr{\@author}{and}{\emph{Auteurs :}}{\emph{Auteur :}}\\ \@author
    mais cela ne fonctionne pas vraiment... si je renseigne \author{Mr Mi} j'ai ceci
    MiAuteur :
    Mr Mi

    moyen...Ne peut on pas mettre une macro dans \IfSubStr ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mr Mi Voir le message
    mais cela ne fonctionne pas vraiment... si je renseigne \author{Mr Mi} j'ai ceci
    MiAuteur :
    Mr Mi
    C'est parce que tu as un problème avec le code de catégorie de "@".
    Si tu avais envoyé un ECM, j'aurais pu l'affirmer avec certitude.

    De plus, utiliser "\\" pour aller à la ligne est le mal (ou alors de l'insconscience). Il faut utiliser \par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    \documentclass{article}
    \usepackage{xstring}
    \begin{document}
    \author{Moi}
    \makeatletter
    \IfSubStr\@author{and}{\emph{Auteurs :}}{\emph{Auteur :}}\par\@author
    \makeatother
     
    \author{Me and none else}
    \makeatletter
    \IfSubStr\@author{and}{\emph{Auteurs :}}{\emph{Auteur :}}\par\@author
    \makeatother
    \end{document}
    Ne peut on pas mettre une macro dans \IfSubStr ?
    Bien évidemment que l'on peut !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    J'ai trouvé l'erreur, en fait si on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    \documentclass{article}
    \usepackage{xstring}
    \begin{document}
    \author{Me and none else}
    \makeatletter
    \IfSubStr\@author{and}{\emph{Auteurs :}}{\emph{Auteur :}}\par\@author
    \makeatother
    \end{document}
    cela fonctionne
    mais dans on cas quand j'ai plusieurs auteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    \documentclass{article}
    \usepackage{xstring}
    \begin{document}
    \author{Me \and none else}
    \makeatletter
    \IfSubStr\@author{and}{\emph{Auteurs :}}{\emph{Auteur :}}\par\@author
    \makeatother
    \end{document}
    alors cela ne fonctionne plus.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Chercher "and" n'est pas du tout pareil que chercher "\and".
    xstring fait exactement ce que tu lui as demandé.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    mais rassure moi, \and comprend and ?

    Bref,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    \documentclass{article}
    \usepackage{xstring}
    \begin{document}
    \author{Me \and none else}
    \makeatletter
    \IfSubStr\@author{\and}{\emph{Auteurs :}}{\emph{Auteur :}}\par\@author
    \makeatother
    \end{document}
    ne fonctionne pas, mais peux être qu'il faut un \protect ou quelque chose d'associé quelque part ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mr Mi Voir le message
    mais rassure moi, \and comprend and ?
    Pas du tout, la macro \and est définie dans le noyau LateX à la ligne 5620. Voici comment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    \def\and{%                  % \begin{tabular}
      \end{tabular}%
      \hskip 1em \@plus.17fil%
      \begin{tabular}[t]{c}}%   % \end{tabular}
    Je te recommande donc de ne te servir de commandes que lorsque tu sais ce qu'elles font. Ici, le nom est extrêmement mal choisi puisqu'en effet, naïvement, on pourrait s'attendre à ce que la macro soit purement développable et que son développement soit "and". Cette macro ne fait que fermer le tableau en cours, saute un peu d'espace et en ouvre un nouveau

    Comme tu le vois, elle n'est pas purement développable et n'affiche pas "and".

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    enfait, je veux juste vérifier que la chaine "and" est disponible, ce qui signifierait que j'ai plusieurs auteurs dans mon documents.

    Quand mon document est compilé, \and est remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    \end{tabular}%
      \hskip 1em \@plus.17fil%
     \begin{tabular}[t]{c}}%   % \end{tabular}
    ??

    cela complique la tâche !!

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mr Mi Voir le message
    enfait, je veux juste vérifier que la chaine "and" est disponible, ce qui signifierait que j'ai plusieurs auteurs dans mon documents.
    Non, il faut tester si la chaine " and " est présente (avec des espaces avant et après). Sinon, "Papanderou" sera considéré étant plusieurs auteurs.

    Quand mon document est compilé, \and
    Je n'ai toujours pas compris ce que tu veux. De ces deux choses très différentes, que souhaites-tu :
    • tester si une chaine contient " and "
    • tester si une chaine contient la macro "\and" (quelque soit la signification de cette macro)

    Selon la réponse, on a 2 méthodes légèrement différentes avec xstring.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    je veux vérifier si "\and" est présente.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    \documentclass{article}
    \usepackage{xstring}
    \begin{document}
    \expandarg
    \def\chaine{Me and you}
    \IfSubStr\chaine{\noexpand\and}{vrai}{faux}
     
    \def\chaine{Me \and you}
    \IfSubStr\chaine{\noexpand\and}{vrai}{faux}
    \end{document}

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    Edit : cela ne fonctionne pas chez moi, enfin ton ECM marche mais pas le miens, j'aurais du temps demain je chercherais, parce que là tu me crache les solutions, et mon cerveau est en idle...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mr Mi Voir le message
    là tu me crache les solutions, et mon cerveau est en idle...
    Je te « crache » des solutions (enfin, 2 seulement) pour essayer de répondre à tes questions. Il me semble que je t'ai assez questionné sur ce que tu voulais. Que devrais-je faire de plus ?

    Le mieux aurait été que tu postes ton ECM, mais tu sembles assez réticent à le faire.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    J'ai poster un ECM (pdt 10secondes) avant d'éditer mon message, promis, si je trouve pas je poste Mais je te remercie tous de même beaucoup pour ton aide

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mr Mi Voir le message
    J'ai poster un ECM (pdt 10secondes) avant d'éditer mon message
    Si les ECM sont top secret maintenant, on va avoir du mal à aider les autres ici.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    Bon cela fonctionne avec ma page de titre, mais lorsque j'essaie de faire un ecm... pas possible. Cela devrais ressembler à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    \documentclass{article}
    \usepackage{xstring}
    \author{Me \and You}
    \begin{document}
    \makeatletter
    \expandarg
    \IfSubStr\@author{\noexpand\and}{Auteurs :}{Auteur :}\par \@author
    \makeatother
    \end{document}

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mr Mi Voir le message
    Bon cela fonctionne avec ma page de titre, mais lorsque j'essaie de faire un ecm... pas possible. Cela devrais ressembler à cela
    Le problème ne vient pas de xstring :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    \documentclass{article}
    \usepackage{xstring}
    \author{Me \and You}
    \begin{document}
    \makeatletter
    \expandarg
    \IfSubStr\@author{\noexpand\and}{Auteurs :}{Auteur :}\par% \@author
    \makeatother
    \end{document}
    Le problème vient de ce que tu appelles la macro \@author (qui est commentée dans l'ECM ci-dessus). En effet, lorsqu'elle se développe, elle contient la macro \and qui se trouve hors d'un tableau. Par contre, cette macro se trouve bien dans un tableau lors d'un \maketitle. Mais je suppose que tu ne sais absolument pas ce que fait vraiment la macro \maketitle ?

    Je répète donc ce que je t'ai déjà dit : ne pas utiliser de macro (ici \and) lorsque tu ne sais pas ce qu'elle fait. Et lorsque tu sais ce qu'elle fait (ce qui est le cas désormais), l'utiliser dans le bon contexte.

    Sinon, je n'ai toujours pas compris pourquoi tu restes fixé sur la macro "\and" !

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2011
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2011
    Messages : 245
    Points : 323
    Points
    323
    Par défaut
    dans mes pages de titre je redéfinie maketitle. Dans un rapport j'utilise titlepage, et a ce moment là, je ne sais pas ce qu'il fait, dans un article, je n'utilise pas titlepage.

    Je reste fixé sur le \and car si j'ai un seul auteur, alors ma page affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Le titre
     
    Auteur:
    Mr. Mi
    Au contraire si j'ai plusieurs auteurs, j'utilise le séparateur \and
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Le titre
     
    Auteurs :
    Mr. Mi     You
    Mais dans tous les cas, merci de ton aide, maintenant cela fonctionne.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/01/2006, 12h05
  2. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24
  3. [Java/String] Completer une chaine avec un caractere
    Par shaun_the_sheep dans le forum Langage
    Réponses: 4
    Dernier message: 31/05/2005, 09h01
  4. [VB.NET] Compléter une chaine avec des espaces
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 09h09
  5. Affichage de l'adresse d'une chaine avec cout
    Par thierryguilbert dans le forum SL & STL
    Réponses: 4
    Dernier message: 14/03/2005, 16h04

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