Dans une autre discussion, on m'a aidé à générer la correction à l'aide d'un booléen :

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{verbatim}

\newif\ifcorrige
%\corrigetrue   % décommenter pour afficher les réponses

\newcounter{nbrlignes}
\newcounter{nbrpointilles}
\newcommand{\completerparpointilles}[1]{%
\loop 
\ifnum\value{nbrlignes}<#1
\stepcounter{nbrlignes}%
\noindent\dotfill\par
\repeat}

\ifcorrige
\newenvironment{reponse}[1][1]
{%
    \setcounter{nbrpointilles}{#1}%
    \par\noindent
}
{%
    \par\setcounter{nbrlignes}{\prevgraf}%
    \completerparpointilles{\value{nbrpointilles}}%
}
\else
\newenvironment{reponse}[1][1]
{\par\setcounter{nbrlignes}{0}%
\completerparpointilles{#1}%
\comment}
{\endcomment
\par}
\fi

%\linespread{1.2}

\begin{document}

1 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[6]

La population en 2013 était de 7.2 milliards d'habitants.
\end{reponse}

\end{document}

Maintenant je cherche à générer le corrigé d'un devoir, soit sur le même pdf, ou bien générer un second pdf avec le corrigé. À mon avis, il faudrait que je crée un environnement « copieacorriger ». Dès que ifcorrige serait vrai, alors tout ce qui serait dans l'environnement « copieacorriger » serait dupliqué avec en plus la correction.

Je sais qu'il existe le package bearmer-article teacher, mais il ne correspond pas tout à fait à ce que je souhaite faire.

Je souhaite éviter d'utiliser le package answers que je trouve assez complexe après avoir lu sa documentation.

Posée 27 Mar '20, 15:45

floyd973's gravatar image

floyd973
1211715
Taux d'acceptation : 0%

Modifiée 27 Mar '20, 16:00

Pathe's gravatar image

Pathe ♦♦
7.5k42203251

@floyd973. J'aurais justement préconisé beamer-article-teacher, qui me semble pourtant répondre à la question. Mais je n'ai pas dû bien le comprendre. Pourriez-vous préciser ?

(27 Mar '20, 16:02) fred02840 fred02840's gravatar image

Je ne souhaite pas générer de présentation beamer. De plus, il faut ajuster l'installation manuellement. A l'époque cela m'avait rebuté. Je souhaite juste générer un doublon mais avec le corrigé.

(27 Mar '20, 20:22) floyd973 floyd973's gravatar image
1

@floyd973 Je vous propose d'utiliser la classe exam. C'est une classe très personnalisable que j'utilise personnellement pour composer mes devoirs et interrogations.

(27 Mar '20, 20:44) Hugues Hugues's gravatar image

C'est noté.

(27 Mar '20, 23:35) floyd973 floyd973's gravatar image

Voici trois méthodes.

1- Devoir et son corrigé dans le même pdf.

Commencer par créer un fichier .tex comme suit (Attention: \corrigetrue est déplacée)

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{verbatim}

\newif\ifcorrige

\newcounter{nbrlignes}
\newcounter{nbrpointilles}
\newcommand{\completerparpointilles}[1]{%
    \loop 
    \ifnum\value{nbrlignes}<#1
    \stepcounter{nbrlignes}%
    \noindent\houdotfill\par
    \repeat}
\newcommand{\houdotfill}{}
\newcommand{\reponse}{}

%\linespread{1.2}

\begin{document}
\input{devoiravril}
\newpage
\corrigetrue
\input{devoiravril}
\end{document}

Créer un deuxième fichier devoiravril.tex dont le contenu est

Ouvrir dans l'éditeur Overleaf
\ifcorrige
\renewcommand{\houdotfill}{\hfill}
\renewenvironment{reponse}[1][1]
    {%
        \setcounter{nbrpointilles}{#1}%
        \par\noindent
    }
    {%
        \par\setcounter{nbrlignes}{\prevgraf}%
        \completerparpointilles{\value{nbrpointilles}}%
    }
\else
\renewcommand{\houdotfill}{\dotfill}
\renewenvironment{reponse}[1][1]
    {\par\setcounter{nbrlignes}{0}%
    \completerparpointilles{#1}%
    \comment}
    {\endcomment
    \par}
\fi
1 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[1]
La population en 2013 était de 7.2 milliards d'habitants.
\end{reponse}

2 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[5]
Afin d'éviter des sauts de page intempestifs et garder le même nombre de pages sur mon document, je souhaite que le nombre de lignes entre mes questions ne changent pas. En effet, il arrive qu'à une ligne près, une nouvelle page soit créée ; et c'est ce que je veux éviter.
\end{reponse}

3 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[7]
Afin d'éviter des sauts de page intempestifs et garder le même nombre de pages sur mon document, je souhaite que le nombre de lignes entre mes questions ne changent pas. En effet, il arrive qu'à une ligne près, une nouvelle page soit créée ; et c'est ce que je veux éviter.
\end{reponse}
oui

2- Devoir et son corrigé sur 2 pdf. Vous avez besoin de créer deux fichiers :

un fichier devoiravril.tex comme suit, (Attention: \corrigetrue est remplacée par \corrigeounon).

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{verbatim}

\newif\ifcorrige
\corrigeounon %   \corrigeounon peut être \corrigetrue ou \corrigefalse

\newcounter{nbrlignes}
\newcounter{nbrpointilles}
\newcommand{\completerparpointilles}[1]{%
    \loop 
    \ifnum\value{nbrlignes}<#1
    \stepcounter{nbrlignes}%
    \noindent\houdotfill\par
    \repeat}

\ifcorrige
\newcommand{\houdotfill}{\hfill}
\newenvironment{reponse}[1][1]
    {%
        \setcounter{nbrpointilles}{#1}%
        \par\noindent
    }
    {%
        \par\setcounter{nbrlignes}{\prevgraf}%
        \completerparpointilles{\value{nbrpointilles}}%
    }
\else
\newcommand{\houdotfill}{\dotfill}
\newenvironment{reponse}[1][1]
    {\par\setcounter{nbrlignes}{0}%
    \completerparpointilles{#1}%
    \comment}
    {\endcomment
    \par}
\fi

%\linespread{1.2}

\begin{document}
1 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[1]
La population en 2013 était de 7.2 milliards d'habitants.
\end{reponse}

2 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[5]
Afin d'éviter des sauts de page intempestifs et garder le même nombre de pages sur mon document, je souhaite que le nombre de lignes entre mes questions ne changent pas. En effet, il arrive qu'à une ligne près, une nouvelle page soit créée ; et c'est ce que je veux éviter.
\end{reponse}

3 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[7]
Afin d'éviter des sauts de page intempestifs et garder le même nombre de pages sur mon document, je souhaite que le nombre de lignes entre mes questions ne changent pas. En effet, il arrive qu'à une ligne près, une nouvelle page soit créée ; et c'est ce que je veux éviter.
\end{reponse}
oui
\end{document}

Maintenant créer le deuxième fichier, c'est un fichier batch devoircompilateur.bat sous windows (ou équivalent)

Ouvrir dans l'éditeur Overleaf
pdflatex -jobname=devoiravril \let\corrigeounon\corrigefalse \input{devoiravril}

pdflatex -jobname=corrigeavril \let\corrigeounon\corrigetrue \input{devoiravril}

Il suffit de double-cliquer ce fichier ou lancer dans un terminal et le tour est joué.

3 - Un fichier .tex, un fichier .pdf (À compléter)

Cet méthode est une version automatisée de la première méthode : c'est LaTeX, avec son environnement filecontents qui va créer le deuxième fichier devoiravril.tex. L'option force à utiliser seulement lorsque il y des modifications sur le fichier devoiravril.tex

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{verbatim}

\newif\ifcorrige

\newcounter{nbrlignes}
\newcounter{nbrpointilles}
\newcommand{\completerparpointilles}[1]{%
    \loop 
    \ifnum\value{nbrlignes}<#1
    \stepcounter{nbrlignes}%
    \noindent\houdotfill\par
    \repeat}
\newcommand{\houdotfill}{}
\newcommand{\reponse}{}

%\linespread{1.2}

\begin{document}
\begin{filecontents*}[nosearch,force]{devoiravril}
    \ifcorrige
\renewcommand{\houdotfill}{\hfill}
\renewenvironment{reponse}[1][1]
    {%
        \setcounter{nbrpointilles}{#1}%
        \par\noindent
    }
    {%
        \par\setcounter{nbrlignes}{\prevgraf}%
        \completerparpointilles{\value{nbrpointilles}}%
    }
\else
\renewcommand{\houdotfill}{\dotfill}
\renewenvironment{reponse}[1][1]
    {\par\setcounter{nbrlignes}{0}%
    \completerparpointilles{#1}%
    \comment}
    {\endcomment
    \par}
\fi
1 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[1]
La population en 2013 était de 7.2 milliards d'habitants.
\end{reponse}

2 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[5]
Afin d'éviter des sauts de page intempestifs et garder le même nombre de pages sur mon document, je souhaite que le nombre de lignes entre mes questions ne changent pas. En effet, il arrive qu'à une ligne près, une nouvelle page soit créée ; et c'est ce que je veux éviter.
\end{reponse}

3 - Quelle était la population mondiale en 2013 ?

\begin{reponse}[7]
Afin d'éviter des sauts de page intempestifs et garder le même nombre de pages sur mon document, je souhaite que le nombre de lignes entre mes questions ne changent pas. En effet, il arrive qu'à une ligne près, une nouvelle page soit créée ; et c'est ce que je veux éviter.
\end{reponse}
oui
\end{filecontents*}
\input{devoiravril}
\newpage
\corrigetrue
\input{devoiravril}
\end{document}
Lien permanent

Publiée 27 Mar '20, 19:20

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 27 Mar '20, 20:42

J'ai modifié la réponse, la première méthode est corrigée.

(27 Mar '20, 20:04) touhami touhami's gravatar image

Une autre méthode utilise les boites de sauvegarde.

(27 Mar '20, 20:24) touhami touhami's gravatar image

@touhami. Je suppose (mais je n'ai pas essayé) que, puisqu'il peut se lancer sur un terminal, le contenu du fichier batch peut parfaitement être accepté par un terminal Debian, non ?

(27 Mar '20, 23:19) fred02840 fred02840's gravatar image

fred02840 C'est ce que je suppose moi aussi, le pauvre windowsien ;-)

(28 Mar '20, 00:12) touhami touhami'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.