[eqnarray] Supprimer tout espace vertical (avant et après)

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Re: [eqnarray] Supprimer tout espace vertical (avant et aprè

Messagepar Deviling » Dimanche 13 Février 2011, 23:45

pg a écrit:il vaut mieux, au lieu de \renewcommand, utiliser \DeclareRobustCommand, c'est plus prudent


Merci pour tout.
J'ai quand même un peu du mal à suivre notamment avec \DeclareRobustCommand.
C'est plus "prudent" car cela déclare la macro robust, mais concrètement cela fait quoi ?
Faudrait-il alors l'utiliser à la place de newcommand/renewcommand ou ils ont encore un intérêt.

De plus cela permettrait-il de résoudre les deux problèmes suivants (ou alors comment faire) :
Code: Tout sélectionner
\renewcommand*{\par}[1]{\right( #1 \left)}
\renewcommand*{\mp}{\ensuremath{\mp}}


Dans le premier, il m'est impossible de redéfinir \par...
Dans le second, j'ai une boucle infinie, donc si je suis forcé de donner un autre nom...
Deviling
Hecto-utilisateur
 
Messages: 63
Inscription: Dimanche 23 Janvier 2011, 20:40
Statut actuel: Post-bac | Ecole d'ingénieur

Publicité

Re: [eqnarray] Supprimer tout espace vertical (avant et aprè

Messagepar pg » Lundi 14 Février 2011, 21:55

Certaines macros ont besoin d'être robustes pour fonctionner correctement dans des endroits où elles seront écrites dans un fichier externe (par exemple les titres de sections sont écrites dans le fichier de table des matières pour fabriquer la table des matières). Pour des exemples où la robustesse importe : "\section{Calcul du vecteur $\overrightarrow{AB}$}", "\section{Classe de similitude de la matrice $\begin{pmatrix}a&b\\c&d\end{pmatrix}$}", etc.

Pour les macros personnelles, il vaut mieux se cantonner à \newcommand. Par contre, il faut faire attention à \renewcommand qui peut causer des problèmes si on ne sait pas ce que l'on fait (en particulier, il faut savoir ce que fait la commande qu'on écrase pour savoir si c'est dangereux de la redéfinir). Par exemple \par est une commande fondamentale de TeX et LaTeX et ne doit pas être redéfinie (elle sert à terminer les paragraphes tout comme le fait une ligne blanche dans le fichier source). Un autre nom du type \paren réglera ton problème pour les parenthèses, bien qu'il ne soit pas sûr du tout qu'on gagne en clarté à utiliser \paren{...} au lieu de \left(...\right).

Le problème avec \mp est que la redéfinition utilise la définition originelle donc LaTeX entre dans une boucle infinie. Un moyen de faire ce genre de chose est de sauvegarder l'ancienne macro avec \let puis de la réutiliser dans la redéfinition :

Code: Tout sélectionner
\let\mporiginal\mp
\renewcommand*{\mp}{\ensuremath{\mporiginal}}
pg
Modérateur
 
Messages: 2592
Inscription: Jeudi 14 Juin 2007, 23:31

Re: [eqnarray] Supprimer tout espace vertical (avant et aprè

Messagepar Deviling » Lundi 14 Février 2011, 22:11

Merci énormément.
Ayant déclaré de nombreuses macros, il ne me reste qu'à vérifier si certaines ont besoin d'être robuste.
Encore merci pour tes explications.
Deviling
Hecto-utilisateur
 
Messages: 63
Inscription: Dimanche 23 Janvier 2011, 20:40
Statut actuel: Post-bac | Ecole d'ingénieur

Re: [eqnarray] Supprimer tout espace vertical (avant et aprè

Messagepar Deviling » Lundi 21 Février 2011, 23:41

pg a écrit:Pour la redéfinition de \[...\], il vaut mieux, au lieu de \renewcommand, utiliser \DeclareRobustCommand, c'est plus prudent (et c'est d'ailleurs ce que fait amsmath qui redéfinit \[...\] comme étant {equation*}):

Code: Tout sélectionner
\DeclareRobustCommand{\[}{\begin{gather*}}
\DeclareRobustCommand{\]}{\end{gather*}}


J'ai un problème :
Code: Tout sélectionner
\documentclass[a4paper, oneside, 11pt]{article}

\usepackage[frenchb]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsmath}

\newcommand*{\noskip}{\setlength{\abovedisplayskip}{5pt}\setlength{\belowdisplayskip}{5pt}}
\DeclareRobustCommand{\[}{\noskip\begin{align*}}
\DeclareRobustCommand{\]}{\end{align*}}

\begin{document}
bla
\[bla\end{align*}
bla
\end{document}

fonctionne, mais pas
Code: Tout sélectionner
\documentclass[a4paper, oneside, 11pt]{article}

\usepackage[frenchb]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsmath}

\newcommand*{\noskip}{\setlength{\abovedisplayskip}{5pt}\setlength{\belowdisplayskip}{5pt}}
\DeclareRobustCommand{\[}{\noskip\begin{align*}}
\DeclareRobustCommand{\]}{\end{align*}}

\begin{document}
bla
\[bla\]
bla
\end{document}
Deviling
Hecto-utilisateur
 
Messages: 63
Inscription: Dimanche 23 Janvier 2011, 20:40
Statut actuel: Post-bac | Ecole d'ingénieur

Re: [eqnarray] Supprimer tout espace vertical (avant et aprè

Messagepar pg » Mardi 22 Février 2011, 10:35

C'est ma faute, j'aurais dû tester avant d'écrire. J'avais oublié que {gather*} et {align*} lisent tout leur argument avant et que la technique utilisée ne peut fonctionner que dans un environnement. Ici, tu peux t'en sortir ainsi :

Code: Tout sélectionner
\documentclass{article}

\usepackage{amsmath}

\AtBeginDocument{\setlength{\abovedisplayskip}{5pt}\setlength{\belowdisplayskip}{5pt}}

\makeatletter
\def\highlighting@hack{\[\[}% pour la coloration syntaxique
\def\collect@until@bracket#1\]{\def\@the@body@{#1}\]}
\DeclareRobustCommand{\[}{\collect@until@bracket}
\DeclareRobustCommand{\]}{\begin{align*}\@the@body@\end{align*}}
\makeatother

\begin{document}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
\[
  A & = B \\
    & = C
\]
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla.

\end{document}

J'ai mis les changement aux displayskips dans un \AtBeginDocument car, par soucis d'homogénéité, il faut qu'il affectent tout le document.
pg
Modérateur
 
Messages: 2592
Inscription: Jeudi 14 Juin 2007, 23:31

Re: [eqnarray] Supprimer tout espace vertical (avant et aprè

Messagepar Deviling » Mardi 22 Février 2011, 14:16

Merci beaucoup ! C'est nickel !
Deviling
Hecto-utilisateur
 
Messages: 63
Inscription: Dimanche 23 Janvier 2011, 20:40
Statut actuel: Post-bac | Ecole d'ingénieur

Précédente

Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Ahrefs [Bot], Google Adsense [Bot], Grapeshot [Crawler] et 16 invités