Macro pour barême

Bonjour,

Je suis à la recherche d'une macro qui écrive

1,5 point (ou 1.5 point je m'en fiche ) quand on fait \points[1.5] (même remarque)

mais 2 points pour \points[2].

Je croyais avoir un truc qui marche mais en fait non.

Merci d'avance !

Réponses

  • Bonsoir,

    Je propose ceci pour le problème du barème :
    \documentclass{article}
    \usepackage{siunitx}
    \sisetup{
      output-decimal-marker = {,},  % virgule comme séparateur décimal
    }
    
    \DeclareSIUnit{\point}{point}
    \DeclareSIUnit{\points}{points} % un peu laid, mais ça fonctionne :-)
    
    \ExplSyntaxOn
    \NewDocumentCommand \points { m }
      {
        \fp_compare:nNnTF {#1} < { 2 }
          { \qty[mode = text]{#1}{\point} }
          { \qty[mode = text]{#1}{\points} }
      }
    \ExplSyntaxOff
    
    \begin{document}
    
    \points{0} ; \points{1.5} ; \points{2} ; \points{3.5}
    
    \end{document}
    
    Je veux bien implémenter une syntaxe avec des crochets, mais il faudrait pour cela que l'argument soit optionnel (autrement, on violerait les conventions LaTeX). L'est-il ?

    Si \qty n'est pas reconnue, mets à jour ta distribution pour avoir siunitx v3, ou remplace \qty par l'ancienne commande \SI.

    Il y a plein d'autres façons de faire. La plus primitive serait avec \ifdim (comparaison de longueurs rigides ; il faudrait par exemple comparer #1pt à 2pt).

    Le principal avantage à utiliser siunitx ici : le séparateur décimal utilisé en sortie suit la configuration en vigueur dans le document (par contre, il faut utiliser un point en entrée car c'est ce qu'attend l3fp).127652
  • Bonsoir
    Je propose à mon tour une solution, peut-être moins élégante :
    \newcommand\point[1]{#1 point\ifdim#1 pt>2pt s \else \ifdim#1 pt<-2pt s%
     \else \ifdim#1 pt=2pt s \else \ifdim#1 pt=-2pt s\fi{} \fi{} \fi{} \fi{}}
    
    Cette macro prend également en compte les points négatifs, au cas où.
  • Ah, super, merci beaucoup ! (tu)
    Je suis vraiment épaté, deux solutions alors que google et quant ne m'avaient rien donné de probant.
    Oui, l'argument est optionnel (si on ne précise pas, c'est un point).
    Pour l'instant, je suis parti de la solution de Kolakoski, en rajoutant du rouge et en marquant 1 comme valeur par défaut.
  • Voilà avec l'argument optionnel — c'est presque la même chose.
    \documentclass{article}
    \usepackage{siunitx}
    \sisetup{
      output-decimal-marker = {,},  % virgule comme séparateur décimal
    }
    
    \DeclareSIUnit{\point}{point}
    \DeclareSIUnit{\points}{points} % un peu laid, mais ça fonctionne :-)
    
    \ExplSyntaxOn
    \NewDocumentCommand \points { O{1} }
      {
        \fp_compare:nNnTF {#1} < { 2 }
          { \qty[mode = text]{#1}{\point} }
          { \qty[mode = text]{#1}{\points} }
      }
    \ExplSyntaxOff
    
    \begin{document}
    
    \points[0] ; \points\ ; \points[1.5] ; \points[2] ; \points[3.5]
    
    \end{document}
    
    127654
Connectez-vous ou Inscrivez-vous pour répondre.