Je souhaite faire un document dans lequel je pourrais faire apparaître la correction.

À l'aide de ifthen, je crée un booléen qui, lorsqu'il sera « vrai », affichera la correction à la place des pointillés.

Mon problème est le suivant : comment faire pour garder le même nombre de lignes entre mes questions ?

Au départ le document se présente sous la forme suivante :

1 - Quelle était la population mondiale en 2013 ?

.....................................................................................................

.....................................................................................................

2 - Quelle sera la population en 2050 ?

.....................................................................................................

....................................................................................................

Je souhaite avoir ceci :

1 - Quelle était la population mondiale en 2013 ?

La population en 2013 était de 7.2 milliards d'habitants.

.....................................................................................................

2 - Quelle sera la population en 2050 ?

En 2050, la population sera de 9.6 milliards d'habitants.

.....................................................................................................

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.

Ainsi, j'aimerais que sous la réponse, il y ait le même nombre de lignes restantes. Au pire, je pourrais faire apparaître en blanc les lignes de pointillés restantes pour ne pas qu'elles s'affichent.

Pour cela j'avais pensé à créer une commande qui fasse le calcul suivant :

« nombre de lignes de pointillés initial » - « nombre de lignes qu'occupe la réponse » = « nombre de lignes de pointillés restantes »

J'imagine que pour cela il faut créer un compteur de ligne en cours ?

Connaissez-vous un package, ou un bout de code en TeX ou LaTeX capable de faire un tel calcul ?

Posée 26 Mar '20, 04:23

floyd973's gravatar image

floyd973
1211715
Taux d'acceptation : 0%

Modifiée 26 Mar '20, 08:01

Pathe's gravatar image

Pathe ♦♦
7.5k42204251

Si j'ai bien compris vous avez besoin d’estimer le nombre des lignes occupées par la réponse la plus longue. Dans ce cas « nombre de lignes de pointillés initial » = Constante = « nombre de lignes de cette réponse MAXI » + 1.

(26 Mar '20, 10:02) touhami touhami's gravatar image

oui, c'est cela, je veux estimer le nombre de lignes occupées par la réponse (pas forcément la plus longue). Par exemple, j'aimerai une commande qui comptabilise le nombre de lignes que va faire ce paragraphe (ici 4 lignes). Malheureusement, je ne maitrise pas TEX , et je pense que pour une telle commande il faudra faire appel a TEX ou éventuellement LATEX, mais je ne sais pas comment m'y prendre.

(26 Mar '20, 17:07) floyd973 floyd973's gravatar image

Ok. mais il me reste une question : le nombre de lignes de pointillés initial est-il toujours constante ou non ?

(26 Mar '20, 17:36) touhami touhami's gravatar image

Non, le nombre de pointillés est fonction de la réponse qui peux nécessiter un nombre de lignes différent selon la question. Par exemple si c'est une question fermé, alors une seule ligne sera nécessaire. Au départ, quand la variable booleen sera sur "false", il y aura affiché uniquement les questions avec les lignes de pointillés dont le nombre sera différent en fonction des réponses que j'estimerais plus ou moins longues (parfois 2 lignes , parfois 3 ou 4 lignes etc.

(26 Mar '20, 18:15) floyd973 floyd973's gravatar image

Quand la variable booléen sera sur true, à ce moment j'aurais affiché ma question avec en dessous la correction.Exemple :

Quand booléen false

question 1

............

............

Question 2

..........

..........

..........

..........

..........

Quand booléen true

question 1

Réponse1

............ (ON garde cette ligne de pointillés restante pour éviter une modification de la mise en page avec saut de page)

Question 2

Réponse 2

sur deux lignes

..........

..........

......... (reste donc 3 lignes de poitilles)

(26 Mar '20, 18:15) floyd973 floyd973's gravatar image

La commande primitive \prevgraf fait exactement ça. Elle spécifie le nombre de lignes dans le (sous) paragraphe récemment complété.

Note l'espace interlignes intervient aussi à la composition des pages et peut donc affecter les sauts de page. Il est recommandé d'utiliser une valeur plus grande : \linespread{1.2}

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}[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}

\end{document}

Edit La commande \completerparpointilles est redéfinie et une nouvelle commande \houdotfill est introduite.

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\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}
Lien permanent

Publiée 26 Mar '20, 22:12

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 27 Mar '20, 12:25

C'est exactement ce que je cherchais. Beaucoup plus simple à comprendre et à gérer que le package answers. quelles documentations pourriez-vous me conseiller pour apprendre toutes ces primitives et commandes (newif, prevgraf, fi etc). J'aimerai être capable d'en faire autant en autonomie.

(27 Mar '20, 01:16) floyd973 floyd973's gravatar image

Dernier point. Comment faire pour devenir aussi efficace que vous ? TEX me faire vraiment peur ! Comment faire pour dompter ce langage ? Ça à l'air tellement facile pour certains.

(27 Mar '20, 01:19) floyd973 floyd973's gravatar image

OK merci. Je regarderai.

(27 Mar '20, 09:02) floyd973 floyd973's gravatar image

@floyd973 Vous pouvez commencer avec TeX pour l'Impatient.

TeX BY TOPIC en anglais, mais très pratique.

En fin, la référence définitive : The TeXbook.

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

@floyd973 : je viens d'ouvrir un fil consacré aux différentes sources permettant d'apprendre à programmer en TeX.

(27 Mar '20, 13:39) Pathe ♦♦ Pathe's gravatar image
Affichage de 5 parmi 6 Afficher 1 commentaire(s) en plus
Ouvrir dans l'éditeur Overleaf
\newif\ifcorrige
\corrigetrue   % décommenter pour afficher les réponses
\newcounter{nbrlignes}
\newcounter{nbrpointilles}
\newcommand{\completerparpointilles}[1]{%
\loop 
\ifnum\value{nbrlignes}<#1
\stepcounter{nbrlignes}%
\ifcorrige
\phantom{\noindent\dotfill}\par % si mode correction activé,on conserve l'espace occupée par les lignes mais en ne les faisant pas apparaître.
\else % sinon les pointilles apparaissent normalement
\noindent\dotfill\par
\fi
\repeat}

\ifcorrige
\newenvironment{reponse}[1][1]
    {%  
    \parindent=0pt
    \setcounter{nbrpointilles}{#1}%
    \par
}
{%
    \par\setcounter{nbrlignes}{\prevgraf}%
    \completerparpointilles{\value{nbrpointilles}}%
}
 \else
 \newenvironment{reponse}[1][1]
{%
\parindent=0pt
\par\setcounter{nbrlignes}{0}%
\completerparpointilles{#1}%
\comment}
{\endcomment
\par}
\fi
Lien permanent
Cette réponse est marquée comme « Wiki ».

Publiée 27 Mar '20, 11:35

floyd973's gravatar image

floyd973
1211715
Taux d'acceptation : 0%

@touhami : j'ai juste rajouté 2 ou 3 lignes.

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

Vous pouvez faire

\newcommand{\completerparpointilles}[1]{% \loop \ifnum\value{nbrlignes}<#1 \stepcounter{nbrlignes}% \noindent\ifcorrige\hfill\else\dotfill\fi\par \repeat}

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

Je sais pas pourquoi j'y ai pas pensé. Cette méthode est tout à fait logique. La mienne , c'est plutôt du bidouillage.

(27 Mar '20, 12:08) floyd973 floyd973's gravatar image

Peut-être devrais-je ouvrir une nouvelle discussion ? Si je fais tout cela c'est pour éviter d'utiliser le package answers que je trouve assez complexe après avoir essayé de comprendre le code de sa documentation.

package answers

Quand le booléen ifcorrige serait true , je cherche du coup à générer le corrigé soit sur le même pdf ou bien générer un second pdf avec le corrigé. A mon avis, il faudrait que je créé 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.

Lien permanent

Publiée 27 Mar '20, 12:50

floyd973's gravatar image

floyd973
1211715
Taux d'acceptation : 0%

1

@floyd973 : le mieux serait d'ouvrir un nouveau fil de discussion.

(27 Mar '20, 13:19) Pathe ♦♦ Pathe's gravatar image

Ou encore

Ouvrir dans l'éditeur Overleaf
 \newif\ifcorrige
 %\corrigetrue    % decommenter pour afficher les réponses

\newcounter{nbrlignespointilles}
\newcommand{\lpointilles}[1]{%
\setcounter{nbrlignespointilles}{0}
\loop 
\ifnum\value{nbrlignespointilles}<#1
\stepcounter{nbrlignespointilles}%
\dotfill\par
\repeat}

\newcounter{nbrlignestotal}

\ifcorrige
\newenvironment{reponse}[1]
{%  
    \parindent=0pt
    \blue
    \par
    \setcounter{nbrlignestotal}{#1}
}
{%
    \par%
    \lpointilles{\number\numexpr \value{nbrlignestotal}-\prevgraf}%
}
 \else
 \newenvironment{reponse}[1]
{%
\parindent=0pt
\lpointilles{#1}%
\comment}
{\endcomment
\par}
\fi
Lien permanent

Publiée 04 Avr '20, 03:31

floyd973's gravatar image

floyd973
1211715
Taux d'acceptation : 0%

Modifiée 04 Avr '20, 03:42

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.