Espace dans une macro — Les-mathematiques.net The most powerful custom community solution in the world

Espace dans une macro

Bonjour,

Lorsque je définis la macro \newframedtheorem{Prop}{Propri\'et\'e} j'aimerais coder un espace vertical entre Propriété n°tant et le début de la propriété. Savez-vous comment l'on fait ?

Merci.

Réponses

  • Bonjour,

    Il semblerait que oui. Pourrais-tu te donner la peine de fournir un exemple complet minimal ? J'ai perdu du temps à en fabriquer un (je n'utilise pas ntheorem, habituellement). Merci d'avance.
  • voici un exemple :
    \documentclass[11pt,dvips]{article} 
    \usepackage{hyperref}
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{lmodern}
    \usepackage[top=2cm,bottom=2cm,left=1cm,%
    right=1cm]{geometry}
    \usepackage{framed}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{ulem}
    \usepackage{mathrsfs}
    \usepackage{fancybox}
    \usepackage{multicol}
    \usepackage{xcolor}
    \usepackage{epsfig}
    \usepackage{pifont}
    \usepackage[framed]{ntheorem}
    \usepackage[frenchb]{babel}
    \setlength{\theorempreskipamount}{0pt}
    \setlength{\theorempostskipamount}{0pt}
    \theoremstyle{break}
    \theorembodyfont{\upshape}
    \newtheorem*{Dem}{D\'emonstration}
    \begin{document} 
    	\begin{Dem}
    	$P_A(B)=\dfrac{P(A\cap B)}{P(A)}$ et $P_B(A)=\dfrac{P(A\cap B)}{P(B)}$.
    	Donc $P(A\cap B)=P(A)\times P_A(B)=P(B)\times P_B(A)$.
    \end{Dem}
    \end{document}
    
  • Hum hum, ton exemple n'utilise pas \newframedtheorem...

    Un exemple complet minimal est censé être minimal ; ceci implique qu'il faut omettre toutes les instructions de chargement de packages non pertinentes pour le problème, et plus généralement, les paramétrages non pertinents. Tu aurais donc pu donner quelque chose comme cela :
    \documentclass{article}
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{lmodern}
    \usepackage[french]{babel}
    \usepackage{amsmath}
    \usepackage{framed}
    \usepackage[framed]{ntheorem}
    
    \setlength{\theorempreskipamount}{0pt}
    \setlength{\theorempostskipamount}{0pt}
    
    \theoremstyle{break}
    \theorembodyfont{\upshape}
    
    \newframedtheorem{Dem}{D\'emonstration}
    
    \begin{document}
    
    \begin{Dem}
      $P_A(B)=\dfrac{P(A\cap B)}{P(A)}$ et $P_B(A)=\dfrac{P(A\cap B)}{P(B)}$.
      Donc $P(A\cap B)=P(A)\times P_A(B)=P(B)\times P_B(A)$.
    \end{Dem}
    
    \end{document}
    
    (On peut encore réduire, enlever par exemple le \theorembodyfont{\upshape}, mais pour le reste on va ensuite s'éloigner des « bonnes pratiques » pour écrire en français, donc ceci me paraît convenable pour un forum francophone.)

    Quelques remarques supplémentaires :
    • ne passe pas d'option 'dvips' ou 'pdftex' à \documentclass, cela ne présente que des inconvénients de nos jours ;
    • il faut charger hyperref en dernier, sauf cas exceptionnels comme cleveref qui doit être chargé après lui (voir sur TeX.SE) ;
    • il vaut mieux charger babel assez tôt, car sa présence influence d'autres packages ;
    • tu utilises cette vieillerie d'epsfig ?
    • l'option 'french' est préférée à 'frenchb' pour babel de nos jours, de plus je conseille de la passer à \documentclass car d'autres packages en font bon usage (p. ex., cleveref) ;
    • quel est l'intérêt d'écrire D\'emonstration plutôt que Démonstration ?
    • \theorempreskipamount et \theorempostskipamount sont obsolètes d'après le manuel de ntheorem, voir les sections Deprecated: Skips until Version 1.32 et Framed and Shaded Theorems ;
    • l'utilisation de \dfrac dans les équations en ligne fiche en l'air les interlignes.

    En ignorant le dernier point, tu peux faire comme ceci (tu rajouteras sans doute l'option 'a4paper' et le chargement de geometry pour ton document personnel) :
    \documentclass[french]{article}
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{lmodern}
    \usepackage{babel}
    \usepackage{amsmath}
    \usepackage{framed}
    \usepackage[framed]{ntheorem}
    
    \makeatletter
    % Adapté d'après le style 'break' (cf. ntheorem.sty)
    \newtheoremstyle{mybreak}%
      {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
              ##1\ ##2\theorem@separator}\kern 6pt\hbox{\strut}}}]}%
      {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
              ##1\ ##2\ (##3)\theorem@separator}\kern 6pt\hbox{\strut}}}]}
    \makeatother
    
    \theoremstyle{mybreak}
    \theorembodyfont{\upshape}
    \theoreminframepreskip{0pt}
    \theoreminframepostskip{0pt}
    \newframedtheorem{Dem}{Démonstration}
    
    \begin{document}
    
    \begin{Dem}
      $P_A(B)=\dfrac{P(A\cap B)}{P(A)}$ et $P_B(A)=\dfrac{P(A\cap B)}{P(B)}$.
      Donc $P(A\cap B)=P(A)\times P_A(B)=P(B)\times P_B(A)$.
    \end{Dem}
    
    \end{document}
    
    Tu aurais peut-être intérêt à regarder du côté du package tcolorbox qui permet de faire des choses un peu moins austères (par ailleurs, je suis un peu étonné que tu souhaites encadrer les démonstrations, ou bien est-ce seulement pour certaines très importantes ?).90902
  • A quoi sert dvips ? Pourquoi dîtes-vous qu'aujourd'hui ça ne présente que des inconvénients ?

    Merci.
  • Je n'encadre pas les démonstrations, seulement les définitions et les propriétés. Ce qui me gênait c'était de ne pas savoir mettre un espace entre Démonstration (ou Définition ou Propriété) et le début du texte.
  • dvips est un programme qui convertit le format DVI produit par les commandes 'tex fichier.tex', 'latex fichier.tex', 'pdflatex -output-format dvi fichier.tex', etc. (il y a aussi des variantes avec les commandes lualatex et xelatex) vers le format PostScript. Pour pouvoir afficher les caractères placés dans un fichier DVI, il faut trouver les dessins de ces caractères, lesquels ne sont pas dans le fichier DVI (le DVI dit des choses comme « à tel endroit, il faut afficher le caractère en position 65 de la police ec-lmr10 », c'est pour ça que c'est un format très léger). Cela nécessite grosso modo d'avoir une distribution TeX installée, donc les imprimantes non martiennes ne comprennent pas ce format et les afficheurs DVI nécessitent toujours une installation TeX pour fonctionner, à ma connaissance (on pourrait se contenter de seulement la partie nécessaire [polices...] d'une distro TeX, mais ce serait du boulot à maintenir pour un intérêt très limité).

    Donc en gros, pour afficher ou imprimer un fichier DVI, il faut le faire traduire par un driver DVI. dvips en est un qui produit du PostScript, les programmes comme xdvi, dviwin, windvi, Yap (au moins un des trois derniers n'est plus maintenu) en sont aussi, qui servent à afficher sur écran le contenu d'un fichier DVI.

    La partie de la chaîne de compilation qui vient en amont du driver s'appelle le moteur. Le programme TeX de Knuth, pdfTeX, LuaTeX, XeTeX sont respectivement les moteurs utilisés par les commandes :
    • tex ;
    • latex, pdftex, pdflatex ;
    • luatex, lualatex ;
    • xetex, xelatex.
    C'est du moins le cas avec TeX Live actuellement, à ma connaissance ; il pourrait y avoir des variations dans le temps et selon les distributions TeX.

    Lorsqu'on utilise pdfTeX, LuaTeX ou XeTeX pour produire directement du PDF, le programme utilisé combine moteur et driver, mais le besoin pour certains packages LaTeX (fichiers .sty) de savoir quel driver sera utilisé dans la suite de la chaîne de compilation reste présent. En effet, TeX étant un vieux programme, il y a des choses qui ne sont pas gérées nativement au niveau du format DVI, mais la commande \special prévue par Knuth permet néanmoins au moteur de sortir « ce qu'il faut » pour qu'on puisse profiter des nouveautés au bout du compte.

    Par exemple, le format DVI n'a pas nativement la notion de couleur, ne permet pas nativement d'inclure des images, de faire des rotations ou même une bête mise à l'échelle (\scalebox). Mais tout cela peut être décrit avec des \special, il suffit donc d'utiliser un driver qui sait les interpréter derrière. Même chose pour les particularités du format PDF (liens hypertextes, bookmarks, formulaires, métadonnées...) ; ce format n'existait même pas quand Knuth a écrit TeX et inventé le format DVI.

    Tout ça pour dire que certains packages (notamment hyperref, mais pas que) ont besoin de savoir quel driver va être utilisé dans la suite de la chaîne de compilation pour produire une sortie bien adaptée (ce qu'on met dans un \special{...} dépend grandement du driver utilisé par la suite). Donc il y a une époque où l'on passait l'option 'dvips' à hyperref ou à \documentclass (cette dernière transmet l'option aux packages qui la reconnaissent) lorsqu'on adoptait la chaîne de compilation 'latex -> dvips', et l'option 'pdftex' lorsqu'on produisait directement du PDF à partir du fichier .tex avec pdfTeX. Mais ceci n'est plus souhaitable à mon avis, car les packages sensibles à ces aspects ont de bons réglages par défaut, en général. Grâce à ces réglages par défaut, on peut compiler un même document de diverses façons ('latex -> dvips', 'pdlatex', 'lualatex', etc.) avec un minimum de changements. À l'inverse, si le fichier .tex indique explicitement un certain driver (ex. : dvips) et qu'on en utilise un différent derrière, il se peut que le résultat soit assez décevant.

    Je ne prétends pas qu'il n'y a aucun cas où la spécification du driver est utile (j'ai moi-même tenté 'dvisvgm' récemment dans un autre fil... sans grand succès, d'ailleurs), mais pour les cas très courants tels que 'dvips' et 'pdftex', ce n'est à mon avis ni utile ni souhaitable de nos jours.

    Edit : en bleu.
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!