Macro \removept

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.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 498
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

[Résolu] Macro \removept

Message non lu par zariski63 »

Bonjour !
Voilà je butte sur un truc qui m'échappe bien que cela soit expliqué dans le livre "Apprendre à programmer avec TeX".
On trouve cette macro :

Code : Tout sélectionner

\def\removept#1.#2pt{#1\ifnum#2>0 .#2\fi}
\newdimen\foo
\foo=15.7pt
\expandafter\removept\the\foo
Évidemment ça ne marche pas car il est dit que "pt" sont 2 caractères de catcode 12... (une solution est proposée mais pour l'instant c'est pas cela qui m'intéresse)
Pourtant, selon moi, le \expandafter va 1-développer \the\foo pour rendre 15.7pt et ensuite va agir \removept sur 15.7pt qui devrait donner 15.7.
Visiblement j'ai raté un truc sur les macros ... Mais lequel ?

Merci pour vos réponses.

CE
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 952
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: \removept

Message non lu par un bon petit »

Lorsqu'on écrit \def\removept#1.#2pt{#1\ifnum#2>0 .#2\fi} les tokens «p» et «t» ont un catcode de 11.
Lorsqu'on écrit \expandafter\removept\the\foo on obtient 15.7pt avec les tokens «p» et «t» de catcode 12.

La macro \removept ne peut donc pas capturer l'argument délimité #2 car le délimiteur « pt » de catcodes 11 ne correspond pas avec ce qui est donné où « pt » ont des catcodes de 12.

Voilà pourquoi « ça ne marche pas ». C'est exactement ce qui est expliqué dans le bouquin, ceci dit.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 498
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: \removept

Message non lu par zariski63 »

je vois le problème effectivement mais ce que je n'arrive pas à saisir c'est pourquoi dans 15.7pt après le \expandafter, p et t voit leur catcode passer à 12. J'ai dû manquer une règle ...
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 952
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: \removept

Message non lu par un bon petit »

zariski63 a écrit : samedi 01 mai 2021, 19:43J'ai dû manquer une règle ...
Oui, il y a une règle qui dit que \the<dimension> renvoie une nombre décimal suivi des tokens p et t de catcode 12. C'est comme ça, on ne peut rien y changer, c'est codé en dur dans TeX.

C'est dit dans le bouquin à la page 233 :
Screenshot_20210501_202558.png
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 498
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: \removept

Message non lu par zariski63 »

Raaaah je me disais aussi. Là tout devient clair !
Pardonnez moi pour ces questions qui, je le sens, vous semblent désolantes mais TeX n’est pas facile à apprivoiser.
Je vous remercie de prendre le temps de me répondre.
Bonne soirée.
CE