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 :

nouvelle commande qui va à la ligne sans raison


Sujet :

Programmation (La)TeX avancée

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Points : 72
    Points
    72
    Par défaut nouvelle commande qui va à la ligne sans raison
    bonjour à tous,
    Je travaille en ce moment à taper dans LaTeX des pièces de théâtre. J'ai donc créé certaines commandes, et l'une d'entre elles me pose problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \newcommand{\pers}[2][]{ \begin{center} \textsc{#2}, \emph{#1} \par \end{center} }
    Cette commande crée un nom de personnage centré en petites majuscules (arg.2) suivi éventuellement d'un didascalie (arg.1, optionnel).

    Problème 1 (le principal) : LaTeX va systématiquement à la ligne après arg.2, même s'il y a un arg.1 (optionnel), et ce dernier n'est pas en italique. Ainsi,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \pers{Jupiter}{baillant}
    ne donne pas
    JUPITER, baillant
    mais
    JUPITER,
    baillant
    Est-ce que je me fais bien comprendre ? Je ne comprends pas, moi, pourquoi cela va à la ligne. Ai-je mal écrit ma commande ?
    Je ne comprends pas non plus pourquoi je dois mettre d'abord arg.2 (Jupiter), puis arg.1 optionnel pour que ç'apparaisse dans le bon ordre.

    Problème 2 (si jamais quelqu'un a une idée) : j'aimerais que la virgule n'apparaisse que dans le cas où il y a l'arg.1 (optionnel).

    Merci d'avance !

  2. #2
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Bonjour,

    Ça m'a donné bien du mal, alors que l'origine du problème était toute bête
    Ça vient de ta façon d'appeler l'argument optionnel
    Aller, une version allégée et corrigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    
    \newcommand{\pers}[2][]{%
      \begin{center}%
         \textsc{#2}, \emph{#1}%
      \end{center}%
    }
    
    \begin{document}
    
    \pers[baillant]{Jupiter}
    
    \end{document}
    Pour ton second problème, je sais que c'est possible et que je l'ai déjà fait... je vais voir si je retrouve ça.
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  3. #3
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Citation Envoyé par Celadon Voir le message
    Problème 2 (si jamais quelqu'un a une idée) : j'aimerais que la virgule n'apparaisse que dans le cas où il y a l'arg.1 (optionnel).
    Retrouvé et opérationnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    \usepackage{ifthen}
     
    \newcommand{\pers}[2][]{%
      \begin{center}%
         \textsc{#2}
         \ifthenelse{\equal{#1}{}}%  % L'argument optionnel est-il vide ?
         {}%                         % ... pas d'argument, on ne fait rien
         {, \emph{#1}}%              % ... un argument, on imprime la suite
      \end{center}%
    }
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Points : 72
    Points
    72
    Par défaut
    Un immense merci ! Je viens d'essayer, et naturellement, cela fonctionne, bien entendu !

    Sous-question. Pour simplifier la saisie, j'avais créé des commandes pour chaque personnage. Ainsi, au lieu d'écrire (je parle dans mon ancien système, avec la faute) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \pers{Jupiter}{baillant}
    je pouvais écrire tout simplement
    en vertu des commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \newcommand{\pers}[2][]{ \begin{center} \textsc{#2}, \emph{#1} \par \end{center} }
    \newcommand{\jupiter}[1][]{\pers{Jupiter}{#1}}
    Maintenant, j'aimerais récupérer un tel système (c'est-à-dire commande \jupiter au lieu de \pers{Jupiter}) qui simplifie et accélère grandement la saisie, mais avec l'argument optionnel. Je ne comprends pas bien comment faire — je ne suis pas très doué... J'ai essayé de mettre des crochets droits au lieu des parenthèses :
    mais ça n'a pas rencontré un très grand succès

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bon, je fais partie de la ligue qui milite contre l'utilisation du package ifthen : c'est un horrible truc qui empêche les gens de comprendre la vraie nature des test de TeX.

    Je propose ce code :
    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
     
    \documentclass[a4paper,10pt]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[frenchb]{babel}
     
    \newcommand\pers[2][]{%
    	\begin{center}%
    		\textsc{#2}%
    		\ifx\empty#1\empty\else, \emph{#1}\fi
    	\end{center}%
    }
     
    \newcommand\jupiter[1][]{\pers[#1]{Jupiter}}
    \begin{document}
     
    \jupiter tagada
     
    \jupiter[baillant] tsoin tsoin
    \end{document}
    Christian

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par unbonpetit Voir le message
    Bon, je fais partie de la ligue qui milite contre l'utilisation du package ifthen : c'est un horrible truc qui empêche les gens de comprendre la vraie nature des test de TeX.

    Je propose ce code : (...)
    Merci : ça marche ! Je pose quand même la question pour ne pas rester stupide : comment fonctionne le test ? Je ne veux pas déclencher une polémique, mais puisqu'il y a des militants, autant profiter de leur conviction !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Heu, pour une leçon de TeX, je ne sais pas si c'est le bon endroit

    Je voulais dire que le package ifthen (que je n'utilise jamais) cache à l'utilisateur toutes les subtilités des tests qu'offre TeX. Je suis désolé, mais l'utilisateur est largement assez intelligent pour les comprendre tous. Voici ce dont on peut se servir pour comparer 2 trucs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    \if
    \ifcase
    \ifcat
    \ifdim
    \ifnum
    \ifx
    Pour le cas qui nous intéresse \ifx, il compare les 2 prochains tokens sans les développer.
    Si ce sont des macros, \ifx compare leur définition.
    Si ce ne sont pas des macros (donc des caractères), \ifx compare les caractères et leur catcode.

    Christian

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/05/2008, 11h22
  2. [MySQL] Un if qui passe à else sans raison
    Par SnoT- dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/01/2008, 13h06
  3. fenêtre qui s'élargit sans raison apparente
    Par Lcf.vs dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 24/11/2007, 22h02
  4. Réponses: 2
    Dernier message: 17/01/2007, 19h23
  5. build.xml qui plante sans raison
    Par marc olivier dans le forum EDI et Outils pour Java
    Réponses: 9
    Dernier message: 17/05/2006, 18h48

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