IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation (La)TeX avancée Discussion :

Macro texte à trous


Sujet :

Programmation (La)TeX avancée

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 39
    Points
    39
    Par défaut Macro texte à trous
    Bonjour, je souhaiterai créer une macro qui me permette de créer facilement des textes à trous pour distribuer à mes élèves.
    Comme j'en ai un peu marre des vulgaires copier/coller et je remplace des morceaux de texte par des dotfill.
    Je souhaiterai une macro qui prennent en argument le texte et qui , selon si un booléen est vrai ou faux, affiche le texte ou le remplace par des pointillés.
    Je comprends qu'il me faux utiliser une condition Si... faire..., ce que je ne comprends pas c'est comment calculer la longueur des pointillés qui vont remplacer le texte (que la taille du "trou" soit suffisamment grande pour pouvoir le combler proprement).

    Quelqu'un aurait-il une idée ? D'avance merci et bon nouvel an à tous.

  2. #2
    Membre averti
    Avatar de Namrod
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2012
    Messages : 215
    Points : 349
    Points
    349
    Par défaut
    Voilà quelque chose de très basique qui devrait fonctionner dans la plupart des cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    \documentclass[a4paper,11pt,french]{article}
     
    %% Préambule
     
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[french]{babel}
     
    \newif\iftrou\troutrue
    \newlength{\trouwidth}
     
    \newcommand{\trou}[1]{%
    \iftrou%
    	\settowidth{\trouwidth}{#1}%
    	\hbox to \trouwidth{\dotfill}%
    \else%
    	#1%
    \fi
    }
     
     
    %% Fin préambule
     
    \begin{document}
     
    Blablabla \trou{blabla} blablabla.
     
    \end{document}
    Pour faire apparaître le texte et non les pointillé, il suffit de modifier \newif\iftrou\troutrue en \newif\iftrou\troufalse.

    Bonne soirée !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 39
    Points
    39
    Par défaut
    ça marche très bien, merci beaucoup.
    Mais je voudrais comprendre comment ça marche...
    C'est la commande \settowidth qui attribue la longueur de #1 à la variable \trouwidth c'est cela ?

  4. #4
    Membre averti
    Avatar de Namrod
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2012
    Messages : 215
    Points : 349
    Points
    349
    Par défaut
    Citation Envoyé par Dexter80 Voir le message
    ça marche très bien, merci beaucoup.
    Mais je voudrais comprendre comment ça marche...
    C'est la commande \settowidth qui attribue la longueur de #1 à la variable \trouwidth c'est cela ?
    Oui, c'est exactement ça ! Ensuite, on crée une boîte de la largeur de la chaîne de caractères à l'intérieur de laquelle on place la commande \dotfill, de façon à ce que les points ne remplissent que la boîte et non toute la ligne.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 39
    Points
    39
    Par défaut
    comme l'écriture des élèves prend plus de place que les caractères informatiques, est-il possible de multiplier la longueur de la chaîne par un coefficient 1.5 par exemple ?

  6. #6
    Membre averti
    Avatar de Namrod
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2012
    Messages : 215
    Points : 349
    Points
    349
    Par défaut
    Citation Envoyé par Dexter80 Voir le message
    comme l'écriture des élèves prend plus de place que les caractères informatiques, est-il possible de multiplier la longueur de la chaîne par un coefficient 1.5 par exemple ?
    Oui, tu peux faire ça avec la commande \setlength, comme cela par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    \newcommand{\trou}[1]{%
    \iftrou%
    	\settowidth{\trouwidth}{#1}%
    	\setlength{\trouwidth}{1.5\trouwidth}
    	\hbox to \trouwidth{\dotfill}%
    \else%
    	#1%
    \fi
    }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup

  8. #8
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Voici un code qui permet plus de souplesse dans l'utilisation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    \documentclass{article}
     
    \usepackage[utf8]{inputenc}
    \usepackage[francais]{babel}
    \usepackage[T1]{fontenc}
    \usepackage{amsmath}
    \usepackage{amsfonts}
    \usepackage{amssymb}
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%texte à trous en pointillés%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \makeatletter
    \newbox\MaBoite
    \newbox\Point
    \newlength\pointwd
    \setbox\Point=\hbox{.}
    \newcommand{\trou}{%
    \@ifstar\affiche\tr@u}
    \newcommand{\tr@u}[1]{%
    	\ifx\@empty#1\@empty%
    	\fi%
    	\noindent
    	\leavevmode%
    		\ifmmode%
    			\ifinner\savebox\MaBoite{$#1$}%maths en ligne
    			\else\savebox\MaBoite{$\displaystyle#1$}%maths hors ligne
    			\fi%
    		\else\savebox{\MaBoite}{#1}%
    		\fi%
    		\setlength\pointwd{0pt}%
    	\loop%
    		\ifdim\pointwd<\wd\MaBoite%
    		\rule{0pt}{\baselineskip}\usebox{\Point}\hskip-\fboxrule %
    		\advance\pointwd by 0.6\wd\Point %coefficient à ajuster 
    	\repeat%
    }
    \newcommand{\affiche}[1]{#1}%
    \makeatletter
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%fin macro%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \begin{document}
    \trou{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum
    ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris.
    Nam arcu libero, nonummy eget, id, vulputate a, magna. Donec
    vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus
    et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus}
     
    \trou*{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris.
    Nam arcu libero, nonummy eget, id, vulputate a, magna. Donec
    vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus
    et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus}
     
    \trou{Lorem ipsum dolor sit amet, adipiscing vitae, felis Curabitur dictum gravida mauris
    Nam arcu libero, nonummy eget, id}
     
    \noindent Conclusion : \trou{reponse attendue des élèves} on continue
     
    \noindent Conclusion : \trou*{reponse attendue des élèves} on continue
     
    $2x+\trou{3}=12$
     
    $2x+\trou*{3}=12$
    \[\sqrt{\frac{\trou{256}}{26}}\]
    \[\sqrt{\frac{\trou*{256}}{26}}\]
     
    \begin{itemize}
    \item\trou{un premier item}
    \item\trou{un deuxième}
    \item \trou{ainsi de suite}
    \end{itemize}
    \begin{itemize}
    \item\trou*{un premier item}
    \item\trou*{un deuxième}
    \item \trou*{ainsi de suite}
    \end{itemize}
     
    \trou{}
    \end{document}
    La présence ou non de l'étoile permet d'afficher ou non le texte. Fonctionne aussi en mode mathématique. Le coefficient 0.6 de la ligne 33 permet d'ajuster comme on le souhaite la "taille de trou". Mais dans ce cas, il y aura certainement une mise en page différente entre le document "prof" et le document "élève".

  9. #9
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2022
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Une commande encore plus souple ?
    Bonjour,
    Je débute cette année l'enseignement des maths en collège. Je connais un peu latex, je ne connais pas la syntaxe de programmation Latex mais je peux comprendre un algorithme.
    Voulant avoir une base de document me permettant de créer efficacement un doc élève à trous et un doc prof, j'ai suivi avec intérêt cette discussion : les deux méthodes fonctionnent mais je ne suis pas sûr d'avoir bien compris l'utilisation de la seconde :
    Faut il, pour passer de la version élève à la version prof, modifier toutes les commandes "trou" en "trou*" ou y a t'il un moyen de le faire pour l'intermédiaire d'une commande en préambule comme dans la première méthode ?

    Mon souhait ultime serait d'avoir une commande unique qui fonctionne avec du texte et des formules et qui puisse être activée par une commande en préambule (du type newif)

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Textes à trous avec Latex
    Par profmaths1 dans le forum Débuter
    Réponses: 1
    Dernier message: 24/06/2015, 12h04
  2. Texte à trous en fiche produit
    Par Bohran dans le forum Référencement
    Réponses: 4
    Dernier message: 18/08/2011, 11h31
  3. Créer un générateur de texte à trous
    Par Khleo dans le forum Langage
    Réponses: 8
    Dernier message: 13/05/2008, 19h16
  4. macro import text
    Par student007 dans le forum Access
    Réponses: 6
    Dernier message: 06/02/2006, 21h00
  5. Excel:probleme pour transformer du texte en nombre par macro
    Par pcheval dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/11/2005, 23h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo