Je souhaite créer une nouvelle commande "exercice" dans LaTeX, qui prend en paramètre le nombre de points attribué à l'exercice et qui affiche "Exercice n (p point)" si p<2 et "Exercice n (p points)" sinon.

Voici mon code :

 \usepackage{amsmath}
 \usepackage{amsfonts}
 \usepackage{amssymb}
 \usepackage{amsthm}
\usepackage{xifthen}

\theoremstyle{definition}
\newtheorem{exo}{Exercice}

\newenvironment{exercice}[1]{\begin{exo}[#1 \ifthenelse{#1<2}{point}{points}]~\\}{\end{exo} \vspace*{0.5cm}}

Tout se passe bien lorsque les paramètres sont des entiers. Mais dès que l'on met des flottants (par exemple, 1,5 ou 1.5), ça ne marche plus...

Voici un ECM :

\documentclass[french]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{amsmath}

\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{xifthen}

\usepackage{babel}

\theoremstyle{definition}
\newtheorem{exo}{Exercice}

\newenvironment{exercice}[1]{\begin{exo}[#1 \ifthenelse{#1<2}{point}{points}]~\\}{\end{exo} \vspace*{0.5cm}}

\begin{document}

\begin{exercice}{1}
azerty
\end{exercice}

\begin{exercice}{2}
azerty
\end{exercice}

\begin{exercice}{1,5}
azerty
\end{exercice}

\end{document}

Posée 22 Mar '23, 10:03

endomorphisme's gravatar image

endomorphisme
30110
Taux d'acceptation : 0%

Modifiée 22 Mar '23, 10:09


Voici une réponse faisant usage des facilités de programmation offertes par expl3. Au passage, j'ai tiré parti des styles fournis par amsthm afin d'éviter certaines bidouilles ;) Enfin, plutôt qu'une dimension fixe telle que 0.5cm pour séparer les exercices, une longueur élastique telle que 0.5cm plus 0.1cm minus 0.2cm permettrait probablement un remplissage de page plus harmonieux.

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{babel}

\newtheoremstyle{break} % ⟨name⟩
{}                      % ⟨Space above⟩
{0.5cm}                 % ⟨Space below⟩
{\normalfont}           % ⟨Body font⟩
{}                      % ⟨Indent amount⟩
{\bfseries}             % ⟨Theorem head font⟩
{}                      % ⟨Punctuation after theorem head⟩
{\newline}              % ⟨Space after theorem head⟩
{}                      % ⟨Theorem head spec (can be left empty, meaning ‘normal’ )⟩

\theoremstyle{break}
\newtheorem{exo}{Exercice}

\ExplSyntaxOn
\newenvironment{exercice}[1]{%
  \begin{exo}[#1~point \fp_compare:nF {#1<2}{s}]%
  }{%
  \end{exo}
}
\ExplSyntaxOff

\begin{document}

\begin{exercice}{1}
azerty
\end{exercice}

\begin{exercice}{2}
azerty
\end{exercice}

\begin{exercice}{1,5}
azerty
\end{exercice}

\end{document}
Lien permanent

Publiée 22 Mar '23, 11:19

denis's gravatar image

denis ♦♦
7.0k1510
Taux d'acceptation : 52%

Modifiée 22 Mar '23, 11:19

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.