L'étoile mystérieuse

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.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2668
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

L'étoile mystérieuse

Message non lu par gigiair »

Voici un petit document qui chez moi ne rend qu'une seule étoile, sur la première ligne du tableau, mais pas dans les suivantes.

Code : Tout sélectionner

\documentclass{article}
\begin{document}
$\begin{array}{c}
  *\\
  *
\end{array}$
\end{document}
L'étoile de la deuxième ligne ne provoque aucun affichage. J'ai TeXLive2021 installé, voici la liste rendue par \\listfiles dans le fichier log

Code : Tout sélectionner

 *File List*
 article.cls    2021/10/04 v1.4n Standard LaTeX document class
  size10.clo    2021/10/04 v1.4n Standard LaTeX file (size option)
l3backend-pdftex.def    2021-12-14 L3 backend support: PDF output (pdfTeX)
 ***********
Aucun message dans le log (cilquez pour lire sur un pastebin)

Je peux faire apparaître l'étoile en la remplaçant par \char42 ce qui devrait-être équivalent, ou doubler l'étoile, ou encore l'inclure dans un \makebox.
Ce qui m'étonne, c'est que ça ne se produit qu'à la deuxième ligne. Est-ce un effet de bord de \\\\ ? \tabularnewline ne change rien.
Voilà une étoile bien mystérieuse. Si Tintin passe par ici....
JJR.
LaTeXien migrateur.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1058
Inscription : jeudi 25 novembre 2010, 22:10

Re: L'étoile mystérieuse

Message non lu par marco56 »

Même résultat chez moi, avec la même config.
balf
Modérateur spécialisé
Modérateur spécialisé
Messages : 4061
Inscription : mercredi 02 janvier 2008, 23:18

Re: L'étoile mystérieuse

Message non lu par balf »

Bonsoir,
Moi itou, sous MiKTeX. En revanche, pour une raison que je ne m'explique pas bien, il suffit de charger amsmath pour que ca fonctionne au petit poil.

B. A.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 913
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: L'étoile mystérieuse

Message non lu par un bon petit »

gigiair a écrit : jeudi 30 décembre 2021, 19:17 Je peux faire apparaître l'étoile en la remplaçant par \char42 ce qui devrait-être équivalent, ou doubler l'étoile, ou encore l'inclure dans un \makebox.
Aucune de ces méthodes n'est la bonne. Après \\, il faut mettre un \relax ou bien un {}.
gigiair a écrit : jeudi 30 décembre 2021, 19:17 Est-ce un effet de bord de \\\\ ?
Ce n'est pas un « effet de bord », c'est le comportement normal et attendu de la macro \\ ! Et ce depuis des années, voire des décennies :mrgreen:

Comme toutes les macros admettant une version étoilée, la macro \\ (qui est rendue let-égale à \@arrayc dans un array) fait appel à la macro \@ifstar. Cette macro appelle l'ultra classique \@ifnextchar qui ignore les espaces avant de tomber (ou pas) sur le caractère cherché. Et donc, l'espace est ignoré puis l'étoile est lue et consommé par \\, ce qui fait qu'elle n’apparaît pas à la seconde ligne.

Bref, c'est le mécanisme archi-connu des caractères optionnels que l'on retrouve avec les crochets.
Pour la même raison, le code ci-dessous n'affiche pas le second [1pt] :

Code : Tout sélectionner

$\begin{array}{c}
  [1pt]\\
  [1pt]
\end{array}$
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 57
Inscription : samedi 06 février 2016, 11:08

Re: L'étoile mystérieuse

Message non lu par jmd »

On peut aussi mettre chaque étoile mystérieuse entre accolades, ce qui dissipe le mystère...
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, TeX Live
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2668
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: L'étoile mystérieuse

Message non lu par gigiair »

Pas vraiment, je ne comprend pas pourquoi la macro \\\\ peut être étoilée, ni ce que la version étoilée est censée faire ou apporter, ni pourquoi elle n'est plus active (semble-t-il) lorsque l'extension amsmath est chargée, Je n'ai jamais lu que le chargement de amsmath pouvait perturber l'écriture des tableaux.
Par ailleurs, le code rendu par \\show est le même avec ou sans l'extension amsmath, ce qui rend le mystère toujours aussi épais.
Pour moi, la meilleure solution pour échapper à ce problème est de charger l'extension amsmath.
JJR.
LaTeXien migrateur.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 913
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: L'étoile mystérieuse

Message non lu par un bon petit »

gigiair a écrit : dimanche 02 janvier 2022, 20:29 Pas vraiment, je ne comprend pas pourquoi la macro \\\\ peut être étoilée, ni ce que la version étoilée est censée faire ou apporter, ni pourquoi elle n'est plus active (semble-t-il) lorsque l'extension amsmath est chargée, Je n'ai jamais lu que le chargement de amsmath pouvait perturber l'écriture des tableaux.
Mais tu as grave raison.
J'avais pas regardé suffisamment dans le noyau LaTeX, on lit :

Code : Tout sélectionner

\protected\def\@arraycr{%
  ${\ifnum0=`}\fi\@ifstar\@xarraycr\@xarraycr}
Traduction : que la macro \\ soit étoilée ou pas, le comportement est le même et on appelle de toutes façons la macro \@xarraycr.
Je savais que \\ pouvait être étoilée sans avoir jamais eu la curiosité de chercher ce que ça faisait ; bon, j'ai la réponse, ça ne fait rien :lol: .
Question : pourquoi \\ est-elle construite pour être étoilée? Je n'ai pas la réponse. peut-être une raison historique ? Si quelqu'un a une réponse, je suis preneur.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 471
Inscription : dimanche 11 février 2007, 11:45

Re: L'étoile mystérieuse

Message non lu par touhami »

Bonjour.
gigiair a écrit : dimanche 02 janvier 2022, 20:29 Pas vraiment, je ne comprend pas pourquoi la macro \\peut être étoilée, ni ce que la version étoilée est censée faire ou apporter
L'étoile est la pour dire à LaTeX (ou TeX) de ne pas couper la page entre les deux lignes (inutile ici, car c'est un tableau).
gigiair a écrit : dimanche 02 janvier 2022, 20:29 Par ailleurs, le code rendu par \show est le même avec ou sans l'extension amsmath
C'est vrai, sauf que l'extension amsmath (plus précisément amsgen) a modifié la définition de la commande\@ifstar de façon que l'espace avant l'étoile n'est plus ignorée.
gigiair a écrit : dimanche 02 janvier 2022, 20:29 Pour moi, la meilleure solution pour échapper à ce problème est de charger l'extension amsmath.
À condition de ne pas oubliez de laisser une espace avant l'étoile.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2668
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: L'étoile mystérieuse

Message non lu par gigiair »

Chapeau ! La documentation des macros n'est pas évidente à trouver pour l'usager lambda.
JJR.
LaTeXien migrateur.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1991
Inscription : samedi 29 décembre 2007, 00:58

Re: L'étoile mystérieuse

Message non lu par projetmbc »

Et pourquoi ne pas utiliser ce qui suit ?

Code : Tout sélectionner

\documentclass{article}
\begin{document}
$\begin{array}{c}
  *\\
  {*}
\end{array}$
\end{document}
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2668
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: L'étoile mystérieuse

Message non lu par gigiair »

Il y a beaucoup d'autres solutions qui ont été évoquées précédemment. L'utilisateur lambda ne comprendra vraisemblablement pas la nécessité des accolades, il faut donc les commenter si le code est destiné à être relu.
On peut aussi ajouter \\null devant l'étoile.
JJR.
LaTeXien migrateur.