Voici un ECM comprenant une commande personnelle :

Ouvrir dans l'éditeur Overleaf
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}

%définition de variable texte pour compilation conditionnelle
\def\ChoixDeVersion{AB} %AB=Avec Barème, SB ou autre = sans bareme

\usepackage{ifthen}
\newcommand{\bareme}[1][2 ]{%
     \ifthenelse{\equal{\ChoixDeVersion}{AB}}%
     {#1 AB \ignorespaces}%
     {#1 \ignorespaces}%
}     
\begin{document}
\bareme{123 } 
\end{document}

La valeur optionnelle du premier argument de la commande \bareme est affichée systématiquement, même si je donne un argument lors de l'appel de la commande :

\bareme{123 } donne :

alt text

Alors que j'attendais 123 AB. La valeur de l'argument de l'appel (123) devrait remplacer la valeur optionnelle (2 ) du premier argument (#1). Où est la boulette ?


PS : On est dans le cas où le choix de version est AB.


EDIT

Et pourrait-on faire en sorte que la commande \bareme ait une valeur par défaut qu'on obtient si on tape \bareme{} et celle indiquée comme argument (valeur) en tapant \bareme{valeur} ?

Si je modifie la commande comme ceci ([1][1])

\newcommand{\bareme}[1][1]{\iftoggle{AB}{#1 AB}{#1}\ignorespaces}

je suis obligé d'utiliser \bareme[valeur] pour avoir la valeur. Si je tape \bareme{valeur} j'aurais en plus la valeur par défaut devant. Et \bareme[valeur] est une syntaxe différente de \bareme ou \bareme{} pour la valeur par défaut


Posée 04 Nov '17, 17:26

idefix's gravatar image

idefix
95593951
Taux d'acceptation : 14%

Modifiée 04 Nov '17, 22:04

c'est \bareme[123 ] avec crochets.

(04 Nov '17, 18:18) touhami touhami's gravatar image

Oui pour l'appel. merci, ça marche très bien maintenant

(04 Nov '17, 18:23) idefix idefix's gravatar image

@idefix : pouvez-vous rédiger une réponse explicative et marquer la question comme étant résolue ?

(04 Nov '17, 18:31) Pathe ♦♦ Pathe's gravatar image

Pour afficher la valeur par défaut taper \bareme ça suffit. Pour affichier une valeur différente, par exemple 123, taper \bareme[123 ]. Lorsque vous tapez \bareme{123 } ou même \bareme{} c'est pour LaTeX \bareme avec la valeur par défaut + {ce qui entre les accolades}.

(05 Nov '17, 01:34) touhami touhami's gravatar image

Une commande LaTeX définie par \newcommand{\cmd}[N][defaut]{...} est une commande avec N arguments dont la première est optionnelle.

Pour utiliser \cmd on tape \cmd[arg1]{arg2}{arg3}...{argN} et si on omit [arg1] la valeur par défaut defaut est utilisée comme texte de remplacement de arg1, c'est-à-dire \cmd{arg2}{arg3}...{argN} est équivalente à \cmd[defaut]{arg2}{arg3}...{argN}.

Dans le cas particulier N=1, on tape \cmd[arg1] ou \cmd qui est équivalent à \cmd[defaut].

Exemple \documentclass[12pt]{article}, \usepackage[margin=2cm]{geometry}.

Remarque Quelques commandes internes de LaTeX possède plusieurs arguments optionnelles, d'autres ont une argument optionnelle autre que la première, elles ne rentrent pas dans ce cadre.

Lien permanent

Publiée 05 Nov '17, 12:19

touhami's gravatar image

touhami
9.6k410
Taux d'acceptation : 51%

La solution déjà avancée lors d'une autre de vos questions est plus simple à mon avis: utiliser les commandes \newtoggle, \iftoggle et \settoggle de etoolbox.

On peut aussi avec xparse définir une commande qui peut prendre une étoile: dans sa version normale, elle affiche AB, et nel'affiche pas dans sa version étoilée.

Démonstration :

Ouvrir dans l'éditeur Overleaf
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}

    \usepackage{etoolbox}
    \newtoggle{AB}
    \settoggle{AB}{true}

 \newcommand{\bareme}[1]{\iftoggle{AB}{#1AB}{#1}\ignorespaces}

\usepackage{xparse} 
\NewDocumentCommand{\Bareme}{s m }{#2 \IfBooleanF#1{AB}\ignorespaces}

\begin{document}

\bareme{123 }

\Bareme{123}

\settoggle{AB}{false}
\bareme{456}

\Bareme*{456}

\end{document}

alt text

Rajoutis :

Si j'ai bien fini par comprendre, ceci serait assez proche de ce qui est souhaité :

documentclass[12pt,a4paper]{article} usepackage[utf8]{inputenc} usepackage{fourier}

usepackage{etoolbox} newtoggle{AB} settoggle{AB}{true}

usepackage{xparse} NewDocumentCommand{Bareme}{O{5}}{iftoggle{AB}{ifnumgreater{#1}{1}{#1 pts}{#1 pt}ignorespaces}{relax}}

begin{document}

Question : quel est le barème de cette question ? (Bareme)

Autre question : quelle est la différence entre un pigeon ? (Bareme[3])

Une question pour rire. (Bareme[0])

settoggle{AB}{false}

Le barème de cette dernière question est de Bareme. Mystère et boules de gomme.

end{document}

alt text

Lien permanent

Publiée 04 Nov '17, 19:41

Bernard's gravatar image

Bernard
4.6k15
Taux d'acceptation : 35%

Modifiée 05 Nov '17, 21:50

et pourrait-on faire en sorte que la commande \bareme ait une valeur par défaut qu'on obtient si on tape \bareme{} et celle indiquée en tapant \bareme{valeur} ? Avec \newcommand{\bareme}[1][1]{\iftoggle{AB}{#1 AB}{#1}\ignorespaces} je suis obligé d'utiliser \bareme[valeur] pour avoir la valeur sans la valeur par défaut devant, ce qui est une syntaxe différente de \bareme ou \bareme{} pour la valeur par défaut

(04 Nov '17, 21:50) idefix idefix's gravatar image

L'avantage de cette méthode, c'est que a priori, vous décidez dans le préambule que la mention AB sera affichée ou pas (c'est l'équivalent d'une valeur par défaut). Vous avez de la souplesse, parce que dans le cours du document vous pouvez basculer à \settoggle{AB}false} et tout ce qui suit n'affichera pas AB, jusqu'à la fin du document, ou jusqu'à ce que que vous indiquiez à nouveau \settoggle{AB}{true}.

(04 Nov '17, 22:35) Bernard Bernard's gravatar image

On peut effectivement faire comme vous le demandez avec xparse. Je posterai un autre code pour montrer comment. La difference, c'est que si vous vous ne voulez pas la valeur par défaut, il faut utiliser à chaque fois l'argument optionnel, alors qu'avec \settoggle, c'est une bascule faite une fois pour toutes.

(04 Nov '17, 22:37) Bernard Bernard's gravatar image

Ce que je cherche à faire exactement est de mettre à différents endroits du fichiers une commande \bareme{} (partout la même). Mettre le toggle au début du fichier pour faire apparaître (ou pas) ce barème par une modification manuelle avant la compilation du togggle en début de fichier. Et je voudrais que les commandes bareme{} si elle sont activées par le toggle, aient toutes la même valeur par défaut. Et là où c'est différent du défaut, je voudrais juste avoir à mettre la valeur entre les parenthèses. Quand le toogle n'est pas activée je voudrais que \bareme{} n'affiche rien.

(04 Nov '17, 23:07) idefix idefix's gravatar image
1

C'est un peu nébuleux pour moi. C'est en fait le barème que vous voulez afficher. Chaque question a, la plupart du temps, la même valeur en points, qui est donc affichée par défaut, mais pour certaines questions, il faut afficher la véritable valeur à l'aide d'un argument optionnel. C'est bien cela ?

(04 Nov '17, 23:56) Bernard Bernard's gravatar image

Presque exactement cela. C'est le barème tout entier que je voudrais afficher de manière optionnelle.

Chaque question a, la plupart du temps, la même valeur en points, qui est donc affichée par défaut (quand le barème est effectivement activé), mais pour certaines questions, il faut éditer la véritable valeur là où c'est nécessaire avant de compiler

Donc les commandes barèmes sont placées de toute façon dans le fichier tex, sans valeur pour la valeur par défaut, et avec la valeur éditée là où c'est nécessaire. Et suivant la valeur de AB, le barème apparaît .. ou pas.

(05 Nov '17, 00:01) idefix idefix's gravatar image

En pratique une fois la commande définie :

Je voudrais utiliser partout la même commande \bareme{} (copier, coller partout où nécessaire dans le fichier .tex) puis n'ajoutez un argument entre les accolades que pour les valeurs particulières.

Editer la valeur de AB, et compiler

(05 Nov '17, 00:11) idefix idefix's gravatar image

J'ai ajouté un nouveau code. Est-ce que celui-ci convient ?

(05 Nov '17, 01:17) Bernard Bernard's gravatar image

Pas encore tout à fait, mais ça se rapproche beaucoup. Je voudrais aussi que quand c'est un point il n'y ait pas de s à point. Vous m'avez donné beaucoup d'informations utiles et instructives qui me donnent des idées.

(05 Nov '17, 17:06) idefix idefix's gravatar image

@idefix: J'ai mis à jour. Cette fois il n'y a pas d's au singulier (mais néanmoins des points sur le.s i de.s point.s).

(05 Nov '17, 21:53) Bernard Bernard's gravatar image
Affichage de 5 parmi 10 Afficher 5 commentaire(s) en plus

Une possibilité pour ce que je voulais faire (merci à vous) :

  • Je place la commande \baremBis{} dans le texte là où il y a des points à mettre. Par défaut la valeur est 1 point (sans s), si je mets un argument dans la commande \baremBis{3} la commande affichera 3 points (avec le pluriel)

  • La variable logique AB (AvecBareme) permet de choisir d'afficher le barème ou pas.

  • PS : il ne faut pas autre chose qu'un nombre sinon ça plante

    Ouvrir dans l'éditeur Overleaf
    \documentclass[12pt,a4paper]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[french]{babel}
    \usepackage[T1]{fontenc}
    
    \usepackage[tikz]{bclogo} % Pour les cadres personnalisables
    
    \usepackage{xspace} % Pour espacement après la commande
    \usepackage{xifthen}% Fournit le test \isempty
    
    \usepackage{etoolbox} % Pour fournir le switch qui .peut activer ou désactiver le barème.
    \newtoggle{AB}
    \settoggle{AB}{true} % Active le bareme
    %\settoggle{AB}{false}
    
    \newcommand{\optarg}[1][7]{%
      \ifthenelse{\isempty{#1}}%
        {\optarg[1]}% if #1 is vide, y mettre la valeur par défaut(appel récursif)
        % La valeur par défaut est choisie ici (elle vaut 1 et non 7 dans ce cas)
        % mise en forme de la sortie (pour le pluriel on teste la valeur 1)  
        {\ifnum #1 = 1%  
            (#1 point)\xspace\ignorespaces 
        \else
            (#1 points)\xspace\ignorespaces
        \fi
        }
    }
    
    %Commande sans switch de compilation
    \newcommand\bareme[1]{\optarg[#1]} 
    %Commande avec switch compilation en testant la valeur logique de AB (AvecBareme)
    \newcommand\baremeBis[1]{\iftoggle{AB}{\optarg[#1]}{\relax\ignorespaces}}
    
    \begin{document}
    
    Testing \verb|\bareme{}|: \bareme{} toto%  prints nothing
    
    Testing \verb|\bareme{1}|: \bareme{1} toto%  prints nothing
    
    Testing \verb|\bareme{33}|: \bareme{33} toto%  prints nothing
    
    Testing \verb|\baremeBis{33}|: \baremeBis{33}toto titi % prints nothing
    
    Testing \verb|\baremeBis{1}|: \baremeBis{1} toto titi % prints nothing
    
    Testing \verb|\baremeBis{}|: \baremeBis{} toto titi% prints nothing
    
    \part{Questions de cours}
     Avec le barème activé (\verb|\settoggle{AB}{true}|)
    \begin{bclogo}[epBord=2,logo=\bcquestion,ombre=true,couleur=blue!10]{Question 1 Complétez la phrase \baremeBis{}
    }
    Texte du cadre 
    \end{bclogo}
    
    \begin{bclogo}[epBord=2,logo=\bcquestion,ombre=true,couleur=blue!10]{Question 2 Complétez la phrase \baremeBis{3}
    }
    Texte du cadre
    \end{bclogo}
    
    \settoggle{AB}{false} % désactive le barème. Aucun point indiqué
    Sans le barème activé (\verb|\settoggle{AB}{false}|)
    
    \begin{bclogo}[epBord=2,logo=\bcquestion,ombre=true,couleur=blue!10]{Question 1 Complétez la phrase \baremeBis{}
    }
    Texte du cadre 
    \end{bclogo}
    
    \begin{bclogo}[epBord=2,logo=\bcquestion,ombre=true,couleur=blue!10]{Question 2 Complétez la phrase \baremeBis{3}
    }
    Texte du cadre
    \end{bclogo}
    
    \end{document}
    

Cela donne

alt text

Lien permanent

Publiée 05 Nov '17, 21:39

idefix's gravatar image

idefix
95593951
Taux d'acceptation : 14%

Modifiée 05 Nov '17, 23:02

Maintenant la réponse ne correspond plus au problème d'argument optionnelle. Aussi, Il faut faire attention au cas des décimales \baremeBis{1.5} ou \bareme{2.5}.

(05 Nov '17, 22:18) touhami touhami's gravatar image

On peut traiter le cas pour éviter les ennuis ? Et pour ma réponse je la mets ailleurs dans une autre question ? C'est vrai que réaliser cette commande s'est mélangé avec les questions qui s'y rapporte

(05 Nov '17, 22:26) idefix idefix's gravatar image

J'ai essayé de répondre a votre question en 2 commentaires + 1 réponse. La réponse que vous avez posté correspond a un cas plus particulier, merci donc de : modifier votre question et dans ce cas je doit supprimer ma réponse ou bien de poser une nouvelle question (éventuellement avec la réponse) et dans ce cas on peut discuter le problème.

(05 Nov '17, 22:51) touhami touhami's gravatar image

Est-ce possible de faire suivre aussi les réponses de Bernard qui sont spécifiques à ce problème ? toutes vos réponses m'intéressent. Je parie sur le \ifnum qui pose problème, même si je n'ai pas testé.

(05 Nov '17, 23:09) idefix idefix's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.