Report liste exercices à un endroit précis

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
GRSG
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 307
Inscription : mercredi 08 octobre 2008, 09:45

[Résolu] Report liste exercices à un endroit précis

Message non lu par GRSG »

Bonjour à toutes et tous,
je souhaiterais créer une commande, ici \itemx, qui a pour argument un énoncé d'exercice ou un input fichier qui contient un exercice. Je souhaiterais les concaténer dans une commande \textenonce pour les faire ressortir à un endroit précis. Je suis arrivé au code suivant et j'ai un souci après le \itemx{input...} où la compilation bloque en déclarant qu'il y a une accolade } de trop. Je vous mets le code ci-dessous.
Merci pour vos aides.

Code : Tout sélectionner

\documentclass[10pt,a4paper]{report}
\usepackage[latin1]{inputenc}
\newenvironment{exercice}{}{}
\newcommand{\textenonceaide}{}
\newcommand{\textenonce}{}
\newcounter{numexo}
\newcommand{\itemx}[1]{%
  \global\edef\textenonceaide{\noexpand\textenonce}%
  \addtocounter{numexo}{1}%
  \global\edef\exonum{EX \arabic{numexo}.}%
  \global\edef\textenonce{\textenonceaide\noexpand\par%
  \expandafter\exonum\noexpand#1}%
}

\begin{document}
Voici le premier exercice
\begin{exercice}
\itemx{Voilà le contenu du premier exercice}
\end{exercice}
Puis les deuxième et troisième exercices
\begin{exercice}
\itemx{le contenu du deuxième exercice}
\itemx{le contenu du troisième exercice}
\itemx{\input{exomachin.tex}}
\itemx{Voici un 5ème exercice et c'est là où ça bloque}
\end{exercice}
Et enfin le 6ème exercice qui est encore un input
\begin{exercice}
\itemx{\input{exotruc.tex}}
\end{exercice}

\newpage
Affichage des exercices ici:

\textenonce
\end{document}
Dernière modification par GRSG le vendredi 02 juin 2023, 13:35, modifié 3 fois.
pg
Modérateur spécialisé
Modérateur spécialisé
Messages : 2621
Inscription : vendredi 15 juin 2007, 00:31

Re: Report liste exercices à un endroit précis

Message non lu par pg »

Comme on ne veut développer que \textenonce et \exonum, on peut juste ici faire des \expandafter :

Code : Tout sélectionner

\RequirePackage{filecontents}
\begin{filecontents}{exomachin.tex}
Contenu de exomachin
\end{filecontents}
\begin{filecontents}{exotruc.tex}
Contenu de exotruc
\end{filecontents}
\documentclass[10pt,a4paper]{report}
\newenvironment{exercice}{}{}
\newcommand{\textenonceaide}{}
\newcommand{\textenonce}{}
\newcounter{numexo}
\newcommand{\itemx}[1]{%
  \addtocounter{numexo}{1}%
  \global\edef\exonum{EX \arabic{numexo}.}%
  \expandafter\expandafter\expandafter\gdef
  \expandafter\expandafter\expandafter\textenonce
  \expandafter\expandafter\expandafter{\expandafter\textenonce\expandafter\par\exonum\space#1}%
}

\begin{document}
Voici le premier exercice
\begin{exercice}
\itemx{Voila le contenu du premier exercice}
\end{exercice}
Puis les deuxieme et troisieme exercices
\begin{exercice}
\itemx{le contenu du deuxieme exercice}
\itemx{le contenu du troisieme exercice}
\itemx{\input{exomachin.tex}}
\itemx{Voici un 5eme exercice et c'est la ou ca bloque}
\end{exercice}
Et enfin le 6ème exercice qui est encore un input
\begin{exercice}
\itemx{\input{exotruc.tex}}
\end{exercice}

\newpage
Affichage des exercices ici:

\textenonce
\end{document}
J'ai rajouté des {filecontents} pour que le code soit autonome (cet environnement crée le fichier donné en argument s'il n'existe pas).
GRSG
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 307
Inscription : mercredi 08 octobre 2008, 09:45

Re: Report liste exercices à un endroit précis

Message non lu par GRSG »

Bonjour pg,
Super, merci beaucoup !
En plus, vous me faites découvrir le package filecontents que je ne connaissais pas et qui par sa simplicité d'écriture (du moins à première vue) me sera très utile.
Encore, merci,
Gabriel
GRSG
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 307
Inscription : mercredi 08 octobre 2008, 09:45

Re: Report liste exercices à un endroit précis

Message non lu par GRSG »

(re)bonjour,
finalement, les choses se compliquent car je souhaiterais faire des mises en formes (couleurs, gras,...) et des liens avec hypertarget et hyperlink. J'ai essayé de mettre en rouge le numéro des exercices reportés et je n'y arrive pas en mettant des \expandafter à différents endroits.
Je peux avoir la couleur rouge mais à ce moment là, tous les numéros sont identiques (<<6>>, dernière valeur de numexo) (cf code ci-dessous).
Je ne vois plus comment modifier la commande.
Merci pour votre aide.

Code : Tout sélectionner

\RequirePackage{filecontents}
\begin{filecontents}{exomachin.tex}
Contenu de exomachin
\end{filecontents}
\begin{filecontents}{exotruc.tex}
Contenu de exotruc
\end{filecontents}
\documentclass[10pt,a4paper]{report}
\usepackage{tcolorbox}
\newenvironment{exercice}{}{}
\newcommand{\textenonce}{}
\newcounter{numexo}
\newcommand{\itemx}[1]{%
  \addtocounter{numexo}{1}%
  \global\edef\exonum{{Ex \arabic{numexo}.}}%
  \expandafter\expandafter\expandafter\gdef
  \expandafter\expandafter\expandafter\textenonce
  \expandafter\expandafter\expandafter{\expandafter\textenonce\expandafter\textcolor{red}%
\exonum\space#1\newpage}%
}

\begin{document}
Voici le premier exercice
\begin{exercice}
\itemx{Voila le contenu du premier exercice}
\end{exercice}
Puis les deuxieme et troisieme exercices
\begin{exercice}
\itemx{le contenu du deuxieme exercice}
\itemx{le contenu du troisieme exercice}
\itemx{\input{exomachin.tex}}
\itemx{Voici un 5eme exercice et c'est la ou ca bloque}
\end{exercice}
Et enfin le 6eme exercice qui est encore un input
\begin{exercice}
\itemx{\input{exotruc.tex}}
\end{exercice}

\newpage
Affichage des exercices ici:

\textenonce
\end{document}
GRSG
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 307
Inscription : mercredi 08 octobre 2008, 09:45

Re: Report liste exercices à un endroit précis

Message non lu par GRSG »

Bonjour,
finalement, j'y suis arrivé (je ne devais pas être trop en forme hier...). Je mets donc le code ci-dessous.
Bonne journée,
Gabriel

Code : Tout sélectionner

\RequirePackage{filecontents}
\begin{filecontents}{exomachin.tex}
Contenu de exomachin
\end{filecontents}
\begin{filecontents}{exotruc.tex}
Contenu de exotruc
\end{filecontents}
\documentclass[10pt,a4paper]{report}
\usepackage{tcolorbox} % Ajout du package xcolor
\usepackage[pdftex,colorlinks=true,urlcolor=blue,linkcolor=blue]{hyperref}
\newenvironment{exercice}{}{}
\newcommand{\textenonceaide}{}
\newcommand{\textenonce}{}
\newcounter{numexo}
\newcommand{\itemx}[1]{%
  \addtocounter{numexo}{1}%
\marginpar{\tcbox[colback=yellow,left=0mm,right=0mm,top=1mm,bottom=1mm,boxsep=0mm,halign=center,beforeafter skip=0pt]{\hypertarget{c\thenumexo}{}\hyperlink{e\thenumexo}{\textcolor{blue}{\small\bf Ex\,\thenumexo}}}}%
  \global\edef\exonum{%
\noexpand\hypertarget{e\thenumexo}{}\noexpand\hyperlink{c\thenumexo}{
\noexpand\textcolor{red}{\noexpand\bf Ex \arabic{numexo}.}}%
}%
  \expandafter\expandafter\expandafter\gdef
  \expandafter\expandafter\expandafter\textenonce
  \expandafter\expandafter\expandafter{\expandafter\textenonce\exonum\space#1\newpage}%
}
\begin{document}
Voici le premier exercice
\begin{exercice}
\itemx{Voila le contenu du premier exercice}
\end{exercice}
Puis les deuxieme et troisieme exercices
\begin{exercice}
\itemx{le contenu du deuxieme exercice}
\itemx{le contenu du troisieme exercice}
\itemx{\input{exomachin.tex}}
\itemx{Voici un 5eme exercice et c'est la ou ca bloque}
\end{exercice}
Et enfin le 6eme exercice qui est encore un input
\begin{exercice}
\itemx{\input{exotruc.tex}}
\end{exercice}

\newpage
Affichage des exercices ici:

\textenonce
\end{document}