Discussion:
Difference entre hfill et hfil
(trop ancien pour répondre)
Eddy
2003-10-01 21:17:40 UTC
Permalink
Bonjour,

Pourriez-vous m'expliquer la différence entre \hfill et \hfil ?
(Je suppose qu'entre \vfill et \vfil ce sera pareil.)

Je n'ai pas trouvé sur la faq du groupe. Quand aux recherches sur Google
elles sont souvent pénibles quand il s'agit de commandes latex car la
plupart des résultats correspondent à des textes dans lesquels ces
commandes sont utilisées mais qui ne traitent en rien des dites commandes.
Si au passage vous avez des astuces pour des recherches efficaces sur des
commandes latex, je suis preneur.

Merci.
--
Eddy
Pour répondre par courriel, remplacez 'isp.invalid' par 'belgacom.net'
To reply by e-mail, replace 'isp.invalid' by 'belgacom.net'
Nicolas Friedli
2003-10-01 22:02:16 UTC
Permalink
Post by Eddy
Pourriez-vous m'expliquer la différence entre \hfill et \hfil ?
(Je suppose qu'entre \vfill et \vfil ce sera pareil.)
Si je ne m'abuse, \vfill, \vfil et \vfilll sont identiques, mais \vfil
est infiniment plus faible de \vfill, elle même infiniment plus faible
que\vfilll !

En d'autres termes, le code a\vfill b \vfill c donnera a en haut de
page, b au milieu, c en bas ; idem pour \vfil et \vfilll.

En revanche, a\vfil b \vfill c sera donnera a en haut de page, b à la
ligne suivante, c en bas ; ou encore :
a\vfill b \vfilll c -> idem
a\vfil b \vfilll c -> idem

Je ne sais pas si c'est clair, mais sela me semble correct :-)
--
nf
Jean-Come Charpentier
2003-10-02 00:44:57 UTC
Permalink
Post by Eddy
Bonjour,
Pourriez-vous m'expliquer la différence entre \hfill et \hfil ?
(Je suppose qu'entre \vfill et \vfil ce sera pareil.)
\hfill et \hfil sont des primitives de TeX donc ce que je vais dire
n'est pas tout à fait vrai : c'est juste pour bien faire comprendre le
principe.

Muni de cette précaution oratoire, j'affirme sans sourire que \hfil
c'est \hskip 0pt plus 1fil et que \hfill, c'est \hskip 0pt plus 1fill.
En d'autres termes des ressorts horizontaux qui ont une taille nulle par
défaut mais qui sont capable de s'étirer infiniment. La différence c'est
que l'infini fil est infiniment plus petit que l'infini fill. Exemple
pour bien comprendre. Si je tape la ligne :
G\hfil M\hfill D
La ligne GMD va vouloir s'étendre autant qu'elle le peut, c'est-à-dire
ici pour occuper toute la largeur de la page. Pour cela, elle peut le
faire entre le G et le M et entre le M et le D. On peut dire qu'elle le
fait effectivement au niveau de ces deux endroits mais infiniment plus
entre le M et le D qu'entre le G et le M. En pratique, le G et le M
seront à touche touche et le D rejeté complètement à doite.

Comme on peut s'en douter \vfil et \vfill se comportent de la même
façon mais en vertical.
Post by Eddy
Je n'ai pas trouvé sur la faq du groupe. Quand aux recherches sur Google
elles sont souvent pénibles quand il s'agit de commandes latex car la
plupart des résultats correspondent à des textes dans lesquels ces
commandes sont utilisées mais qui ne traitent en rien des dites commandes.
Si au passage vous avez des astuces pour des recherches efficaces sur des
commandes latex, je suis preneur.
Ben justement, ce n'est pas trop « LaTeX » de faire comme cela. Il
vaudrait plutôt mieux se trouver une doc traitant plutôt de TeX.

Jean-Côme Charpentier
Eddy
2003-10-03 13:31:25 UTC
Permalink
Le Thu, 02 Oct 2003 02:44:57 +0200, Jean-Come Charpentier a écrit:

Merci Jean-Côme et Nicolas pour vos réponses. Elles sont éclairantes
mais la brume dans mon cerveau est très épaisse :(
Je me permets encore une question (si vous êtes pressé, passez mes
divagations et allez directement en fin de message).

[...]
Post by Jean-Come Charpentier
G\hfil M\hfill D
La ligne GMD va vouloir s'étendre autant qu'elle le peut, c'est-à-dire
ici pour occuper toute la largeur de la page. Pour cela, elle peut le
faire entre le G et le M et entre le M et le D. On peut dire qu'elle le
fait effectivement au niveau de ces deux endroits mais infiniment plus
entre le M et le D qu'entre le G et le M. En pratique, le G et le M
seront à touche touche et le D rejeté complètement à doite.
[...]

Après ma première lecture, je m'attendais à ce que
G \hfil M \hfil D
donne le même résultat que
G \hfill M \hfill D
puisque les forces "relatives" entre G et M et M et D sont égales. Après
essai, je dois bien constater que ce n'est pas vrai: l'utilisation des 2
\hfil ne remplit pas toute la largeur de page et le M se retrouve bien au
milieu de G et D mais pas au milieu de toute la ligne.

J'en retiens donc que \hfil est plus "faible" que \hfill. Sauf que ...

Là où je reste complètement hyper-perplexifié c'est quand j'essaye la
même chose sans le G ni le D:
\hfil M \hfil place le M au milieu de *toute* la largeur de page;
\hfil M \hfill aussi (pourquoi pas plus à gauche?);
\hfill M \hfil a le comportement attendu (M complètement à droite);
\hfill M \hfill place aussi le M complètement à droite (et pas au milieu).

Clairement c'est lié à l'absence d'élément avant le premier \hfil(l)
et après le dernier; d'ailleurs y mettre des ~ comme dans
~\hfill M \hfill~
ramène le comportement attendu.

Tout cela est probablement logique -ça *doit* l'être- mais le vieux
débutant LaTeX que je suis (9 mois d'utilisation presque quotidienne tout
de même) ne s'y retrouve jamais qu'à posteriori. Pour moi, LaTeX reste
encore trop souvent imprévisible et c'est très frustrant.

La seule façon d'éliminer cette frustration est la connaissance mais
peut-on espérer comprendre LaTeX sans plonger tôt ou tard dans les
abysses de TeX?
Post by Jean-Come Charpentier
Ben justement, ce n'est pas trop « LaTeX » de faire comme cela. Il
vaudrait plutôt mieux se trouver une doc traitant plutôt de TeX.
Quelle(s) commande(s) LaTeX utiliser en remplacement de \hfill et \vfill
alors?
--
Eddy
Pour répondre par courriel, remplacez 'isp.invalid' par 'belgacom.net'
To reply by e-mail, replace 'isp.invalid' by 'belgacom.net'
-- Thomas vO --
2003-10-03 14:41:57 UTC
Permalink
salut,
Post by Eddy
Quelle(s) commande(s) LaTeX utiliser en remplacement de \hfill et \vfill
alors?
\hspace et \vspace, avec \stretch en argument s'il le faut ...

-- Thomas vO --
Eddy
2003-10-03 16:13:43 UTC
Permalink
Post by -- Thomas vO --
salut,
Post by Eddy
Quelle(s) commande(s) LaTeX utiliser en remplacement de \hfill et \vfill
alors?
\hspace et \vspace, avec \stretch en argument s'il le faut ...
Merci beaucoup.
Un petit coup d'oeil dans la faq pour (re)voir la syntaxe et ça marche
même de façon prévisible (pour moi).
--
Eddy
Pour répondre par courriel, remplacez 'isp.invalid' par 'belgacom.net'
To reply by e-mail, replace 'isp.invalid' by 'belgacom.net'
Nicolas Markey
2003-10-03 15:36:38 UTC
Permalink
Post by Eddy
Après ma première lecture, je m'attendais à ce que
G \hfil M \hfil D
donne le même résultat que
G \hfill M \hfill D
puisque les forces "relatives" entre G et M et M et D sont égales. Après
essai, je dois bien constater que ce n'est pas vrai: l'utilisation des 2
\hfil ne remplit pas toute la largeur de page et le M se retrouve bien au
milieu de G et D mais pas au milieu de toute la ligne.
Non non, \hfil prend bien toute la place qu'on lui donne. La raison est
tout autre.
Post by Eddy
J'en retiens donc que \hfil est plus "faible" que \hfill. Sauf que ...
Oui, ca, oui. Infiniment, meme.
Post by Eddy
\hfil M \hfil place le M au milieu de *toute* la largeur de page;
\hfil M \hfill aussi (pourquoi pas plus à gauche?);
\hfill M \hfil a le comportement attendu (M complètement à droite);
\hfill M \hfill place aussi le M complètement à droite (et pas au milieu).
Y a plusieurs choses :
1) en debut de paragraphe, LaTeX place une boite vide sur laquelle ton
premier ressort peut s'appuyer. Sinon, il n'aurait aucun effet.
2) en fin de paragraphe, LaTeX supprime l'eventuel espace (sauf espace
insecable) qui termine le paragraphe, place egalement une boite vide,
mais il ajoute aussi un \parfillskip, qui vaut par defaut 1\fil (c'est
a dire la meme chose que \hfil).

Cela explique le comportement de LaTeX sur tous tes essais.
Post by Eddy
Clairement c'est lié à l'absence d'élément avant le premier \hfil(l)
et après le dernier; d'ailleurs y mettre des ~ comme dans
~\hfill M \hfill~
ramène le comportement attendu.
Oui. Par contre,
~\hfil M \hfil~
met le M au tiers de la ligne, puisqu'un troisieme \hfil est ajoute en fin
de paragraphe.


A+
--
Nico
Eddy
2003-10-03 16:28:23 UTC
Permalink
Post by Nicolas Markey
1) en debut de paragraphe, LaTeX place une boite vide sur laquelle ton
premier ressort peut s'appuyer. Sinon, il n'aurait aucun effet.
2) en fin de paragraphe, LaTeX supprime l'eventuel espace (sauf espace
insecable) [...]
Y compris l'espace créé par un \hfil(l) ? C'est bien cela?
Post by Nicolas Markey
[...] qui termine le paragraphe, place egalement une boite vide,
mais il ajoute aussi un \parfillskip, qui vaut par defaut 1\fil (c'est
a dire la meme chose que \hfil).
Cela explique le comportement de LaTeX sur tous tes essais.
Si la réponse à la question insérée ci-dessus est affirmative alors je
crois avoir compris. Par exemple, dans le paragraphe
\hfill M \hfill
le dernier \hfill étant un espace, il serait remplacé par parfillskip ce
qui revient finalement à
\hfill M \hfil
et la force relative de \hfill envoie le M en fin de ligne.
(Le même genre de raisonnement explique en effet tous les exemples que
j'avais donnés.)

Merci pour tes explications.

La quantité et la qualité des infos partagées sur ce groupe sont vraiment
étonnantes.
--
Eddy
Pour répondre par courriel, remplacez 'isp.invalid' par 'belgacom.net'
To reply by e-mail, replace 'isp.invalid' by 'belgacom.net'
Jean-Come Charpentier
2003-10-03 18:30:51 UTC
Permalink
Post by Eddy
Post by Nicolas Markey
1) en debut de paragraphe, LaTeX place une boite vide sur laquelle ton
premier ressort peut s'appuyer. Sinon, il n'aurait aucun effet.
2) en fin de paragraphe, LaTeX supprime l'eventuel espace (sauf espace
insecable) [...]
Y compris l'espace créé par un \hfil(l) ? C'est bien cela?
C'est bien cela. En termes un peu plus techniques, les ressorts sont
supprimés au niveau des points de coupure mais pas les blancs fixes.
Comme vous le suspectiez dans votre premier message, pour bien
comprendre tout cela, il faut se plonger (un peu) dans TeX. Cela dit, on
peut utiliser les commandes LaTeX en comprenant bien ce qu'elles font
évidemment mais sans toutefois devoir aller dans les entrailles de TeX.

Jean-Côme Charpentier

Continuer la lecture sur narkive:
Loading...