Discussion:
Paramètre dans newtheoremstyle
(trop ancien pour répondre)
moky
2009-08-05 07:50:57 UTC
Permalink
Bonjour à toutes et à tous



Seconde question sur les \newtheoremstyle.

Je voudrais définir plein de styles de théorèmes qui ne diffèrent que
par la couleur d'affichage.



\newtheoremstyle{PourLesCouleurs}%
{9pt}{9pt}%
{\green}% <---- Remplacer \green par "#1"
{}%
{\bfseries}{}%
{0pt}%
{}%

\theoremstyle{PourLesCouleurs}
\newtheorem{vert}{Ceci est en couleur !} <--- mettre un paramètre
\newtheorem{rouge}{Ceci est en couleur !} <--- mettre un paramètre


Si je ne peux pas faire de paramètres dans \newtheoremstyle, alors je
devrai en définir un par couleur, mais cela me semble être un crime
contre la factorisation de code ;)

Au vu de ce que je lis ici, j'ai l'impression que je devrais mettre ma
couleur dans \thmnote, mais je ne vois pas très bien comment m'y prendre.
http://en.wikibooks.org/wiki/LaTeX/Theorems



Merci pour les idées

Bonne journée
Laurent
GL
2009-08-05 08:24:26 UTC
Permalink
Post by moky
Bonjour à toutes et à tous
Seconde question sur les \newtheoremstyle.
Je voudrais définir plein de styles de théorèmes qui ne diffèrent que
par la couleur d'affichage.
\newtheoremstyle{PourLesCouleurs}%
{9pt}{9pt}%
{\green}% <---- Remplacer \green par "#1"
{}%
{\bfseries}{}%
{0pt}%
{}%
\theoremstyle{PourLesCouleurs}
\newtheorem{vert}{Ceci est en couleur !} <--- mettre un paramètre
\newtheorem{rouge}{Ceci est en couleur !} <--- mettre un paramètre
Si je ne peux pas faire de paramètres dans \newtheoremstyle, alors je
devrai en définir un par couleur, mais cela me semble être un crime
contre la factorisation de code ;)
Au vu de ce que je lis ici, j'ai l'impression que je devrais mettre ma
couleur dans \thmnote, mais je ne vois pas très bien comment m'y prendre.
http://en.wikibooks.org/wiki/LaTeX/Theorems
Merci pour les idées
Bonne journée
Laurent
Avec ntheorem (bon d'accord, la doc est pas top, mais le package est pas mal) :

\theoremstyle{LaTeX}
\newtheorem{THM}{Théorème}

\theorembodyfont{\itshape\color{green}}
\newtheorem{greenTHM}{Théorème}

D'où plus généralement :

%-----------ECM-------------------------------------------------------
\documentclass[a4paper,12pt]{book}
\usepackage[french]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{ntheorem}
\usepackage{color,etoolbox}

\def\do#1{%
\theorembodyfont{\itshape\color{#1}}%
\newtheorem{#1THM}{Théorème}%
}\docsvlist{red,green,blue,yellow,cyan}


\begin{document}

\begin{redTHM}
Un petit texte que je voudrais voir en red.
\end{redTHM}

\begin{greenTHM}
Un petit texte que je voudrais voir en green.
\end{greenTHM}

\begin{blueTHM}
Un petit texte que je voudrais voir en blue.
\end{blueTHM}

\begin{yellowTHM}
Un petit texte que je voudrais voir en yellow.
\end{yellowTHM}

\begin{cyanTHM}
Un petit texte que je voudrais voir en cyan.
\end{cyanTHM}

Au revoir.

\end{document}
\endinput
Manuel Pégourié-Gonnard
2009-08-05 09:55:34 UTC
Permalink
Post by moky
Si je ne peux pas faire de paramètres dans \newtheoremstyle, alors je
devrai en définir un par couleur, mais cela me semble être un crime
contre la factorisation de code ;)
Non, pas forcément : ce qu'il faut, c'est faire une commande qui définit
les théorèmes plutôt que d'en définir 10 à la main. De cette façon, pas
de duplication des paramètres utilisés pour les définitions.
Il me semble qu'on peut faire la même chose sans ntheorem, non ? Le
point étant surtout l'utilisation de csvlist pour ne pas avoir à se
répéter. (Au fait, je ne connaissais pas csvlist, j'aurais fait avec un
\@for de LaTeX, mais c'est plus sympa comme ça en effet, merci pour
l'exemple).
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
GL
2009-08-05 10:21:20 UTC
Permalink
Post by Manuel Pégourié-Gonnard
Il me semble qu'on peut faire la même chose sans ntheorem, non ? Le
point étant surtout l'utilisation de csvlist pour ne pas avoir à se
répéter. (Au fait, je ne connaissais pas csvlist, j'aurais fait avec un
l'exemple).
C'est \docsvlist (qui devrait plutôt s'appeler \docsvloop pour analogie avec
\dolistloop mais bon...)

etoolbox est une petite perle.
J'ai construit plus généralement \csvloop et \csvloop* dans etextools.sty qui
reste purement développable :

\csvloop*[\do]{un,deux,trois}

http://mirrors.ircam.fr/pub/CTAN/macros/latex/contrib/etextools/etextools-examples.pdf
moky
2009-08-05 13:02:14 UTC
Permalink
Post by GL
etoolbox est une petite perle.
J'ai construit plus généralement \csvloop et \csvloop* dans
\csvloop*[\do]{un,deux,trois}
Merci pour la réponse. Je crois que sur base de ça, je pourrai résoudre
le problème réel que j'ai.

En fait je dois non seulement changer de couleur, mais aussi d'intitulé,
et au passage, j'aimerais que mes theorèmes aient des noms plus parlants
que "redTHM".

Par exemple, je voudrais que le théorème bleu s'appelle "pourquoidonc"
et affiche "Comment ? Pourquoi ?" au lieu de "Théorème".

La ligne
\newtheorem{#1THM}{Théorème}%
de ton exemple doit donc être encore un peu complexifiée.

Bref.

J'ai résolu mon problème comme ceci :

++++++++++++++++++++++++++++++++++++++++++++++++++++++

#! /usr/bin/python
# -*- coding: utf8 -*-


class ParametreNewTheorem():
def __init__(self,nom,intitule,couleur):
self.nom = nom
self.intitule = intitule
self.couleur = couleur

def newtheorem(self):
print "\\newtheorem{pour_%s}[contBla]{%s}"%(self.nom,self.intitule)
def newenvironment(self):
print "\\newenvironment{"+self.nom+"}{\\bgroup \\"+self.couleur+"
\\begin{pour_"+self.nom+"}}{\end{pour_"+self.nom+"}\egroup}"

def DefsExclamations():
print "\\newcounter{contBla}"
print "\\renewcommand{\\thecontBla}{}"
print
"\\newtheoremstyle{exclamations}{9pt}{9pt}{}{}{\\bfseries}{}{\\newline}{}"
print "\\theoremstyle{exclamations}"

liste = [ ParametreNewTheorem("idee","Idée !","green"),
ParametreNewTheorem("pourquoidonc","Comment ? Pourquoi ?","blue"),
ParametreNewTheorem("probleme","Y'a une faute ?","red") ]

for a in liste :
a.newtheorem()
for a in liste :
a.newenvironment()

DefsExclamations()

+++++++++++++++++++++++++++++++++++++++++++

Puis j'ai fait un \input de la sortie dans mon fichier LaTeX.

Ce n'est pas très (La)TeXien, mais ça ne me déplait pas :)


Bonne aprème
Laurent
GL
2009-08-08 22:19:55 UTC
Permalink
Post by moky
Post by GL
etoolbox est une petite perle.
J'ai construit plus généralement \csvloop et \csvloop* dans
\csvloop*[\do]{un,deux,trois}
Merci pour la réponse. Je crois que sur base de ça, je pourrai résoudre
le problème réel que j'ai.
En fait je dois non seulement changer de couleur, mais aussi d'intitulé,
et au passage, j'aimerais que mes theorèmes aient des noms plus parlants
que "redTHM".
Par exemple, je voudrais que le théorème bleu s'appelle "pourquoidonc"
et affiche "Comment ? Pourquoi ?" au lieu de "Théorème".
Puis j'ai fait un \input de la sortie dans mon fichier LaTeX.
Ce n'est pas très (La)TeXien, mais ça ne me déplait pas :)
Je ne te le fais pas dire !

C'était pourtant facile avec mon exemple :
\def\do#1[#2][#3]{%
\theorembodyfont{\itshape\color{#2}}%
\newtheorem{#1}{#3}%
}\docsvlist{pourquoidonc[blue][{Comment ? Pourquoi ?}],...}

Tu peux même t'amuser avec keycommand :
\newkeycommand\defmythm[title,color,name]{%
\theorembodyfont{\itshape\commandkey{color}}
\newtheorem{\commandkey{name}}{\commandkey{title}}}

Loading...