Espace avant et après makebox dans une newcommand

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
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.
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 24
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

[Résolu] Espace avant et après makebox dans une newcommand

Message non lu par kriztho »

Bonjour à tous,

Je souhaite créer un texte avec des "mots à trou" que les élèves doivent remplir.
Pour cela j'ai créé une nouvelle commande pour l'utiliser plusieurs fois. Cette commande créée une boîte dont la largeur est calculée et est remplie par un trait plein.

Code : Tout sélectionner

\newlength\lgtxt
\newlength\lgbt
\newcommand{\txtpt}[1]{
	\settowidth\lgtxt{#1}
	\setlength\lgbt{\lgtxt}
	\makebox[\lgbt]{\hrulefill}
}
Voici un exemple simple d'application :

Code : Tout sélectionner

Etiam porta sem \txtpt{malesuada magna} mollis euismod.

Etiam porta sem \makebox{malesuada magna} mollis euismod.
La deuxième ligne est faite pour avoir une comparaison.

A l'affichage je vois qu'il y a un espace avant et après la boite qui sont assez importants. Je ne comprends pas d'où viennent ces espaces supplémentaires et comment les supprimer.

Le résultat en pièce jointe :
makebox.pdf
(24.86 Kio) Téléchargé 30 fois
Merci de votre aide.
Dernière modification par kriztho le lundi 17 mai 2021, 15:43, modifié 1 fois.
MB
Administrateur
Administrateur
Messages : 7535
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace avant et après makebox dans une newcommand

Message non lu par MB »

Bonjour, il ne s'agit à priori que d'un problème d'espaces parasites.
Le code suivant devrait fonctionner.

Code : Tout sélectionner

\documentclass{minimal}
\newlength\lgtxt
\newlength\lgbt
\newcommand{\txtpt}[1]{%
    \settowidth\lgtxt{#1}%
    \setlength\lgbt{\lgtxt}%
    \makebox[\lgbt]{\hrulefill}}

\begin{document}

Etiam porta sem \txtpt{malesuada magna} mollis euismod.

Etiam porta sem \makebox{malesuada magna} mollis euismod.

\end{document}
MB. (rejoignez pCloud afin d'obtenir 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 24
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Re: Espace avant et après makebox dans une newcommand

Message non lu par kriztho »

Génial MB ! Un grand merci !
Donc si je comprends bien le simple fait de placer le symbole % juste après les différentes lignes de la nouvelle commande permet de supprimer les espaces parasites et indésirables dans le rendu PDF ?
Cela permet de "simuler" que toutes les lignes de la nouvelle commande soit en fait sur une même ligne ?
C'est bien cela ?
MB
Administrateur
Administrateur
Messages : 7535
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace avant et après makebox dans une newcommand

Message non lu par MB »

Oui, les pourcentages en fin de ligne vont supprimer le retour chariot, qui est considéré par TeX comme un espace.
MB. (rejoignez pCloud afin d'obtenir 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 904
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Espace avant et après makebox dans une newcommand

Message non lu par un bon petit »

Il y a un registre de dimension de trop.
Ensuite, le sucre syntaxique de LaTeX est ici plus pénalisant qu'autre chose.
L'équivalent (plus économe) en TeX, sans mobiliser aucun registre :

Code : Tout sélectionner

\documentclass{minimal}
\newcommand*\txtpt[1]{%
	\begingroup
		\setbox0 = \hbox{#1}%
		\hbox to\wd0 {\hrulefill}%
	\endgroup}

\begin{document}
Etiam porta sem \txtpt{malesuada magna} mollis euismod.

Etiam porta sem \makebox{malesuada magna} mollis euismod.
\end{document}
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 24
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Re: Espace avant et après makebox dans une newcommand

Message non lu par kriztho »

Merci un bon petit pour cette alternative plus rigoureuse, mais pour le moment j'ai assez de mal avec LaTeX... Donc TeX sera peut-être pour une autre fois dans le futur...