Dans le code suivant, si j'insère une espace avant ou après le nom de l'environnement Ouvrir dans l'éditeur Overleaf
\documentclass[11pt]{article} \begin{document} \begin{center } ! LaTeX Error: Environment center undefined. \LaTeX est-il logique ? \LaTeX{}est-il rationnel ? Est-ce que \LaTeX{} est de l'alchimie ? \end{center } \end{document} Or, on sait que les espaces sont supprimés après les commandes. Dans le code ci-dessus, en omettant les accolades après la commande On sait qu'avec TeX :
Pour TeX une commande, appelée séquence de contrôle, est :
Ainsi, puisque dans un environnement LaTeX les espaces ne sont pas « mangés » par TeX, j'en déduis qu'un environnement peut avoir un nom composé de plusieurs mots comme par exemple : Ouvrir dans l'éditeur Overleaf
\begin{bidule truc} ... \end{bidule truc} Le code suivant l'illustre : Ouvrir dans l'éditeur Overleaf
\documentclass[11pt]{article} \newenvironment{bidule truc}{% \itshape }{% % Rien } \begin{document} \begin{bidule truc} autant d'espace entre bidule et truc sans avoir une seule erreur ! Mais après ou avant le nom : erreur ! \end{bidule truc} \end{document} Edit ce même jour à 11 h 00, ajout d'un deuxième exemple montrant que l'on peut définir un environnement dont le nom commence par une espace (ou par plusieurs) : Ouvrir dans l'éditeur Overleaf
\documentclass[11pt]{article} \newenvironment{ bidule truc}{% 3 espaces avant le premier mot \itshape }{% % Rien } \begin{document} \begin{ bidule truc}% 1 seul espace avant le premier mot sans erreur ! autant d'espace avant bidule sans avoir une seule erreur ! Mais apr\`es le nom : erreur ! \end{bidule truc}% erreur, il manque le premier espace \end{document} Et j'en conclus donc que le nom des environnements LaTeX n'obéit pas aux même règles que le nom des commandes TeX.
Affichage de 5 parmi 8
Afficher 3 commentaire(s) en plus
|
Les règles sont les mêmes. Par exemple, deux espaces consécutifs ou plus sont considérés comme un seul espace. ECM Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article} \usepackage{lmodern} \usepackage[T1]{fontenc} \usepackage{babel} \newenvironment{ foo bar }{\bfseries}{\vspace{1cm}\hrule\vspace{1cm}} \begin{document} Exemple 1 \begin{ foo bar } Foo bar texte \end{ foo bar } Exemple 2 \begin{ foo bar } Foo bar texte \end{ foo bar } Exemple 3 \begin{ foo bar } Foo bar texte \end{ foo bar } Exemple 4 \begin{ foo bar } Foo bar texte \end{ foo bar } \end{document}
C'est difficile de donner une réponse complète. En effet,
les environnements LaTeX utilisent, derrière la scène, la primitive Publiée 10 Aoû '19, 14:35 touhami |
Pour définir le nom d'un environnement, on peux utiliser pratiquement tous les caracteres que l'on souhaite (j'y reviendrais) y compris l'espace. dans l'exemple Votre deuxième exemple :
vous définissez le nom avec un espace entre bidule et truc. pour
Comme l'a dit @touhami les noms des environnements sont définis à coup de
Voici un exemple : Ouvrir dans l'éditeur Overleaf
\documentclass{article} \def\truc{bidule} \newenvironment{&@^_z{}\truc}{\bf}{} \newenvironment{^^61^^62^^63}{\itshape}{} \begin{document} \begin{&@^_z{}\truc} bidule \end{&@^_z{}\truc} \begin{&@^_z{}bidule} en remplacant \verb+\truc+\ par bidule \end{&@^_z{}bidule} \begin{abc} une autre facon \end{abc} \end{document}
Pour les commandes, c'est un peu plus compliqué, regardez ce code. Ouvrir dans l'éditeur Overleaf
\documentclass{article} \def\ toto#1{\it#1} \begin{document} %\show \ toto{tutu} \end{document} et le résultat de Ouvrir dans l'éditeur Overleaf
> \ =macro: toto#1->\it #1. On vient de définir
Autre exemple : Ouvrir dans l'éditeur Overleaf
\documentclass{article} \def\ta ta#1{\bf#1} \begin{document} %\show \ta ta{titi} \end{document} dans ce cas on définit une macro Publiée 23 Aoû '17, 14:15 Nikopol 1)
(23 Aoû '17, 21:02)
touhami
pour le 1 effectivement j'aurais du préciser, même si je trouve ça évident.
pour le 2 je ne suis pas d'accord 3) oui j'ai pas testé
(23 Aoû '17, 21:52)
Nikopol
1
Désolé, c'est ma faute, j'ai considéré le cas général de
(24 Aoû '17, 00:04)
touhami
Pas de soucis, on commet tous des erreurs, je n'ai pas poussé mes tests assez loin comme le
(24 Aoû '17, 00:27)
Nikopol
Le tilde est redéfini par LaTeX :
(24 Aoû '17, 13:30)
Nikopol
|
des espaces consécutives sont considérées comme une.
Voici l'idée derrière un environnement :
\newenvironment{ foo bar }
est équivalente (en quelque sorte) à\expandafter\newcommand\csname foo bar \endcsname
et\begin{ foo bar }
équivalente à\csname foo bar \endcsname bla bla
. Voir par exemple\documentclass[11pt]{article}
\begin{document}
\expandafter\newcommand\csname foo bar \endcsname{bon jour}
\csname foo bar\endcsname bla bla
\end{document}
@touhami, Pouvez-vous expliquer les commandes \expandafter , \csname et \endcsname ?
@AndréC Voulez vous poser un nouvelle question, ou dois je ajouter une petite réponse?
Le mieux il me semble est de poser une nouvelle question, car elle n'a rien à voir avec la question originelle. @touhami ça vous laissera plus de marge pour votre réponse que dans un commentaire ;)
@touhami, ce qui m'intéresse est d'avoir une réponse qui s'adresse au maximum de personnes et essentiellement à ceux qui débutent l'apprentissage de la programmation TeX et LaTeX pour lesquels il n'y a aucune évidence et où tout doit être expliqué le plus simplement possible.
Mais je n'exige rien car les réponses pédagogiques (les plus faciles à comprendre) sont les plus difficiles à écrire.
@touhami effectivement c'est amusant comme exemple mais pour le premier je dirais logique puisque
\empty
ne renvoie pas une chaine de caractères puisque vide, d'où l'erreur.@AndréC, je ne vois pas ce que vous voulez dire par "TeX et LaTeX ne gère pas les espaces de la même façon".
\csname
est une primitive de TeX. A votre question initiale une réponse à été donnée (que vous devriez valider). Maintenant si vous voulez une explication à\csname
poser une nouvelle question car ça ne correspond pas à la question originelle. Où mieux lisez le Texbook, vous semblez vouloir vous intéresser aux rouages de TeX, c'est donc à mon avis indispensable.