Remplacer du texte par des points, avec la même longueur

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

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.
Romain Janvier
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 146
Inscription : lundi 23 août 2010, 14:57

Remplacer du texte par des points, avec la même longueur

Message par Romain Janvier »

Bonjour,

Ca fait un moment que je cherche, mais je n'ai toujours pas trouvé comment faire.

Dans Beamer, j'aimerai bien pourvoir masquer les reponses de certaines questions, ou certains mots de vocabulaire, et les reveler au moment voulu. Pour cela il y a la commande \uncover qui marche très bien, puisque qu'elle reserve l'espace à l'avance.

Seulement voila, je n'aime pas ce grand blanc au milieu des phrases. Je prefererai les remplacer par des "..." de la bonne longueur. J'ai fait la commande suivante (il faut calc):

Code : Tout sélectionner

\newsavebox{\reponse}
\newlength{\repwidth}
\newcounter{previousslide}%
\newcommand\uncoverdot[2]{%
\setcounter{previousslide}{#1-1}%
\savebox{\reponse}{#2}%
\settowidth{\repwidth}{\usebox{\reponse}}%
\only<-\value{previousslide}>{\makebox[\repwidth]{\dotfill}}%
\only<#1->{#2}%
}


Cela marche bien tant que la reponse reste sur une seule ligne. Il suffit de taper \uncoverdot{4}{médiatrice} et "médiatrice" remplacera les points à partir du 4e transparent.
Mais si le texte est trop long ou en fin de ligne, cela ne marche pas puisque les ... vont tous à la ligne suivante.

Est-ce que vous auriez une autre solution?
Merci.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: Remplacer du texte par des points, avec la meme longueur

Message par rebouxo »

Moi non, mais il y a eu sur fctt une discussion sur ce sujet :

ceci

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

Romain Janvier
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 146
Inscription : lundi 23 août 2010, 14:57

Re: Remplacer du texte par des points, avec la meme longueur

Message par Romain Janvier »

Merci beaucoup.

C'est pas mal du tout. Il faut que je reprenne cela, parce que je ne veux pas qu'on voit le nombre de mots ou de lettres, mais comme je ne connais pas tex... Il va falloir que je m'y mette.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: Remplacer du texte par des points, avec la même longueur

Message par rebouxo »

En faite il me semblait qu'il y avait eu une discussion plus récente sur le sujet. Mais je ne l'ai pas retrouvé.

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

Romain Janvier
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 146
Inscription : lundi 23 août 2010, 14:57

Re: Remplacer du texte par des points, avec la même longueur

Message par Romain Janvier »

J'ai essayé de faire ma propre macro, en utilisant multido et en mettant autant de . que necessaire pour remplir l'espace nécessaire, mais j'ai des problemes de cesure...

fadila
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 213
Inscription : samedi 12 août 2006, 10:02
Localisation : Nantes

Re: Remplacer du texte par des points, avec la même longueur

Message par fadila »

Bonjour
Est-ce que ceci peut t'aider ?
viewtopic.php?t=2320
A bientot

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: Remplacer du texte par des points, avec la même longueur

Message par pg »

Javier Bezos vient de publier sur comp.text.tex un code qui permet de faire ce genre de choses de manière transparente, si on compile avec pdflatex (deux compilations sont nécessaires). Voici le code :
dots_mots_invisibles.png

Code : Tout sélectionner

%http://groups.google.fr/group/comp.text.tex/msg/2def75815e19ca68
\documentclass{article}

\usepackage[latin1]{inputenc}
\usepackage{xcolor}
\usepackage{soul}% utiliser soulutf8 avec \usepackage[utf8]{inputenc}

\makeatletter

\newcount\ulpos@poscnt
\newcount\ulpos@ulcnt

\def\ulpos@ulnum{\z@}

\def\ulpos@{ulpos@@\ulpos@ulnum-}

\def\ulsavepos#1#2#3#4{%
   \ifnum\ulpos@ulnum=#1 %
     \ifnum#4<\ulpos@ypos
       \count@\ulpos@xprev
       \advance\count@-\ulpos@xbase
       \expandafter\xdef\csname\ulpos@\ulpos@ulprev\endcsname{\the\count@}%
       \edef\ulpos@xbase{#3}%
       \edef\ulpos@ulprev{#2}%
     \fi
   \else
     \ifnum\ulpos@ulnum>\z@
       \count@\ulpos@xprev
       \advance\count@-\ulpos@xbase
       \expandafter\xdef\csname\ulpos@\ulpos@ulprev\endcsname{\the\count@}%
     \fi
     \def\ulpos@ulprev{#2}%
     \def\ulpos@ulnum{#1}%
     \def\ulpos@xbase{#3}%
   \fi
   \def\ulpos@xprev{#3}%
   \def\ulpos@ypos{#4}}

\AtEndDocument{%
   \global\advance\ulpos@ulcnt\@ne
   \protected@write\@auxout{}% Dummy. Forces calc of last ul.
       {\string\ulsavepos{\the\ulpos@ulcnt}{0}{0}{0}}%
    \def\ulsavepos#1#2#3#4{}}

\def\ulpos@stepput{\ulpos@step\ulpos@put}
\def\ulpos@step{\global\advance\ulpos@poscnt\@ne}

\def\ulpos@put{%
   \hb@xt@\z@\bgroup
     \@ifundefined{\ulpos@\the\ulpos@poscnt}{}%
       {\edef\ulwidth{\@nameuse{\ulpos@\the\ulpos@poscnt}sp}%
        \ulpos@draw}%

\global\expandafter\let\csname\ulpos@\the\ulpos@poscnt\endcsname\@undefined
     \hss % Must be here, not before, not after
     \pdfsavepos
     \protected@write\@auxout{}%
       {\string\ulsavepos{\ulpos@ulnum}{\the\ulpos@poscnt}%
       {\noexpand\the\pdflastxpos}{\noexpand\the\pdflastypos}}
   \egroup}

\def\ulpos@kern{.02em }

\def\defineulpos#1#2{%
   \DeclareRobustCommand*#1{%
     \def\SOUL@preamble{%
       \def\ulpos@draw{#2}%
       \global\advance\ulpos@ulcnt\@ne
       \xdef\ulpos@ulnum{\the\ulpos@ulcnt}%
       \ulpos@poscnt\z@
       \SOUL@setkern{-\ulpos@kern}%
       \ulpos@stepput
       \SOUL@setkern\ulpos@kern}%
    \def\SOUL@everyspace####1{\ulpos@stepput####1\space\ulpos@stepput}%
    \def\SOUL@postamble{%
      \SOUL@setkern\ulpos@kern
      \ulpos@stepput
      \SOUL@setkern{-\ulpos@kern}}%
    \def\SOUL@everyhyphen{%
      \ulpos@step \ulpos@step
      \discretionary
        {\SOUL@setkern\SOUL@hyphkern
         \SOUL@sethyphenchar
         \global\advance\ulpos@poscnt\m@ne
         \ulpos@put
         \ulpos@step}%
        {\ulpos@put}%
        {}}%
   \def\SOUL@everysyllable{}%
   \def\SOUL@everytoken{\the\SOUL@token}%
\SOUL@}}

% Styles
% ------------

\defineulpos\ap{%
  \mbox{%
    \color{teal}%
    \raisebox{-.5ex}{\xleaders\hbox to.2em{{\color{gray}\hss$_.$\hss}}\hskip\ulwidth}}}

\makeatother

\begin{document}

Voici une phrase mystère : {\color{white}\ap{bla bla bla bla bla bla bla anticonstitutionnellement}}.

Voici une phrase mystère : bla bla bla bla bla bla bla anticonstitutionnellement.

\end{document} 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

StephC
Utilisateur débutant
Utilisateur débutant
Messages : 5
Inscription : vendredi 20 mars 2020, 14:55
Statut actuel : Autre

Re: Remplacer du texte par des points, avec la même longueur

Message par StephC »

Bonjour pg,
Magnifique votre code, je teste, et cela fonctionne parfaitement pour changer de ligne et/ou de page. Donc un grand merci.
En fait,
Je reviens vers vous pour savoir si, il est possible d'ajouter une option aux commandes, ou une autre commande, qui permettrait de donner le texte comme dans

Voici une phrase mystère : bla bla bla bla bla bla bla anticonstitutionnellement.

mais souligné avec les mêmes pointillés ou ligne hachuré, en fait les mêmes paramètres qu'avec la commande \ap, lorsque on écrit :

Voici une phrase mystère : {\color{white}\ap{bla bla bla bla bla bla bla anticonstitutionnellement}}

de façon à ce que le texte apparaisse ainsi que les pointillés en dessous du texte?

Je suis allé sur Texnia et sur cop.text.tex pour chercher des réferences sur Jose Bezos, mais je m'y perds, je ne comprends pas du tout le code TeX.

Merci bien.

PS: j'ai vu qu'il existe le package dashundergaps mais j'ai la première version, et je n'arrive pas à supprimer la numérotation lié à la commande \gap. Je suis sous linux, sans vraiment m'y connaître, pour éviter le plus possible les logiciels privés, et les virus ou antivirus lié à Windows. Sur le dépot, de linuxmint, j'ai seulement cette version de latex, un peu vieille (enfin je le crois)

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: Remplacer du texte par des points, avec la même longueur

Message par pg »

Pas sûr de bien comprendre, mais si le but est de faire apparaître à la fois le texte et les pointillés, il suffit d'enlever le \color{white} :

Code : Tout sélectionner

Voici une phrase mystère : \ap{bla bla bla bla bla bla bla anticonstitutionnellement}.
ap.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

StephC
Utilisateur débutant
Utilisateur débutant
Messages : 5
Inscription : vendredi 20 mars 2020, 14:55
Statut actuel : Autre

Re: Remplacer du texte par des points, avec la même longueur

Message par StephC »

C'est parfaitement ce que je voulais dire, vous m'avez parfaitement bien compris, même si effectivement ce n'était pas très clair.
Merci beaucoup, pour cela.

Puis-je me permettre une autre question concernant le package dashundergaps. Avez-vous tester la deuxième version ou plus de ce package? Si oui, a-t-il du point de vue de la commande dont on parle (faire des pointillées à la taille d'un texte avec possibilité de changer de ligne ou de page) un intérêt? Si non merci encore pour votre réponse précédente.

Quoiqu'il en soit, il faudra bien que je mette ma version de texlive-full à jour puisque j'ai une version qui semble dater de 5 ans:
apt-cache policy texlive donne:
texlive:
Installé : (aucun) %Je m'interroge sur cette ligne que je trouve bizarre. Je vais aller voir sur le forum ce qui ce dit à ce sujet.
Candidat : 2015.20160320-1ubuntu0.1
Table de version :
2015.20160320-1ubuntu0.1 500
500 http://ubuntu.univ-nantes.fr/ubuntu xenial-updates/universe amd64 Packages
500 http://ubuntu.univ-nantes.fr/ubuntu xenial-updates/universe i386 Packages
500 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages
500 http://security.ubuntu.com/ubuntu xenial-security/universe i386 Packages
2015.20160320-1 500
500 http://ubuntu.univ-nantes.fr/ubuntu xenial/universe amd64 Packages
500 http://ubuntu.univ-nantes.fr/ubuntu xenial/universe i386 Packages

Encore merci à vous.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: Remplacer du texte par des points, avec la même longueur

Message par pg »

dashundergaps a l'air pas mal et fait la même chose, mais ne vaut sûrement pas le coup de mettre à jour sa distribution pour cela. Si la solution précédente convient, inutile d'aller chercher ailleurs.

StephC
Utilisateur débutant
Utilisateur débutant
Messages : 5
Inscription : vendredi 20 mars 2020, 14:55
Statut actuel : Autre

Re: Remplacer du texte par des points, avec la même longueur

Message par StephC »

Encore merci.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: Remplacer du texte par des points, avec la même longueur

Message par rebouxo »

En faite installer une Texlive en plus de celle des dépôts ne pose aucun problème. Et vu l'ancienneté de celle de ta distrib' cela vaudrait le coup.
https://www.tug.org/texlive/doc/texlive ... ve-fr.html
Une doc en français, et il y a certainement d'autres document sur le site de Denis Bitouzé.

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.