Je souhaite faire un document dans lequel je pourrais faire apparaître la correction. À l'aide de 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 ? |
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 Publiée 04 Avr '20, 03:31 floyd973 |
La commande primitive 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 :
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 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} Publiée 26 Mar '20, 22:12 touhami 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
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 Lire ce fabuleux document: https://ctan.org/tex-archive/info/apprendre-a-programmer-en-tex?lang=en ainsi que la liste des primitives: https://www.tug.org/utilities/plain/cseq.html
(27 Mar '20, 06:35)
pluton
OK merci. Je regarderai.
(27 Mar '20, 09:02)
floyd973
@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
@floyd973 : je viens d'ouvrir un fil consacré aux différentes sources permettant d'apprendre à programmer en TeX.
(27 Mar '20, 13:39)
Pathe ♦♦
Affichage de 5 parmi 6
Afficher 1 commentaire(s) en plus
|
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. 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. Publiée 27 Mar '20, 12:50 floyd973 |
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 1
Vous pouvez faire
(27 Mar '20, 11:54)
touhami
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
|
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
.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.
Ok. mais il me reste une question :
le nombre de lignes de pointillés initial
est-il toujours constante ou non ?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.
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)