Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comment charger différents packages selon les options d'un .sty ?

58 views
Skip to first unread message

Fabrice

unread,
May 18, 2013, 4:28:25 PM5/18/13
to
Bonjour,

je voudrais m'�crire un package qui prendrait par exemple 3 options :
latex, pdflatex, xetex. Ce package chargera un preambule diff�rent pour
chaque moteur afin de pouvoir compiler les m�mes sources d'une base.

la compilation �choue car je ne peux pas mettre de Requirepackage dans
la zone option.

Comment puis-je m'en sortir ?

voici l'ecm ci-dessous.

cordialement,
Fabrice.

% fichier essai.tex

\documentclass{article}
\usepackage[xelatex]{PyMath}

\begin{document}
voil�
\end{document}

% fichier PyMath.sty

\NeedsTeXFormat{LaTeX2e}

\def\fileversion{1.0}%
\def\filedate{2013/05/17}%
\ProvidesPackage{PyMath}[\filedate\space\fileversion\space PyMath package]

% Traitement des options

\DeclareOption{latex}{%
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[francais]{babel}
}

\DeclareOption{pdflatex}{%
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[francais]{babel}
\RequirePackage{auto-pst-pdf}
}

\DeclareOption{xelatex}{%
\RequirePackage{xltxtra}
\RequirePackage[francais]{babel}
}

\ProcessOptions

GL

unread,
May 18, 2013, 8:52:01 PM5/18/13
to
Le 18/05/2013 22:28, Fabrice a �crit :
C'est le coup classique.

Deux solution :

La premi�re, pas bien propre (� mon go�t) :
\DeclareOption{latex}%
{\AtEndOfPackage{%
\RequirePackage [utf8]{inputenc}%
\RequirePackage [T1]{fontenc} etc }}


La deuxi�me, plus proprette :

\DeclateOption{latex}{\@monbeaupackageoptionlatextrue }

blah blah ... \ProcessOptions

et l� : (apr�s \ProcessOptions)

\if@monbeaupackageoptionlatex \RequirePackage [utf8]{inpuenc}
etc.
\fi

Ca peut se faire encore mieux avec kvoptions :

\DeclareBoolOption {latex}

et ensuite : \ifmonpackage@latex ... \fi



Mais si �a d�pend seulement du moteur, et non de l'option,
faites donc carr�ment :

\usepackage {iftex}

\ifXeTeX .... \fi
\ifPDFTeX .... \fi


voir la documentation de iftex.sty.

Bonne nuit.

Fabrice

unread,
May 19, 2013, 6:24:00 AM5/19/13
to
Le 19/05/2013 02:52, GL a �crit :
Merci GL (et n'oubliez pas de dormir, j'aurai pu attendre quelques heures),
je vais utiliser la derni�re solution pour le d�but du pr�ambule ainsi :

\RequirePackage{etex}
\RequirePackage{iftex}
\ifXeTeX
\RequirePackage{xltxtra}
\RequirePackage[francais]{babel}
\else
\ifPDFTeX
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[francais]{babel}
\RequirePackage{auto-pst-pdf}
\else
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[francais]{babel}
\fi
\fi

(j'esp�re qu'on peut imbriquer les if ainsi)

D'ailleurs, comment rajouter lualatex si l'un des futurs utilisateurs
veut l'utiliser ? lualatex s'utilise plus comme xelatex ou comme
pdflatex ? (je veux pouvoir utiliser utf8 et pstricks)



puis j'utiliserai l'une des deux m�thodes pr�c�dentes (la proprette ou
kvoptions).

kvoptions a l'air pas mal mais c'est mon premier package et je ne sais
pas comment l'utiliser.
Je n'ai pas compris la doc.
j'aimerai que l'utilisateur n'ait pas � faire un \usepackage{kvoptions}
mais o� le mettre si je veux l'utiliser ?
Dans mon pymath.sty ? Mais dans ce cas, les options sont d�j� entr�es
avec le format keyval alors que le package kvoptions n'est pas en action !

Merci encore pour cette premi�re r�ponse,
cordialement,
Fabrice.

GL

unread,
May 19, 2013, 7:26:15 AM5/19/13
to
Le 19/05/2013 12:24, Fabrice a �crit :
> Le 19/05/2013 02:52, GL a �crit :
>> Le 18/05/2013 22:28, Fabrice a �crit :
>
> Merci GL (et n'oubliez pas de dormir, j'aurai pu attendre quelques heures),
> je vais utiliser la derni�re solution pour le d�but du pr�ambule ainsi :

C'�tait samedi soir... joker !
Mais j'ai bien dormi ce matin, merci.

> \RequirePackage{etex}
> \RequirePackage{iftex}
> \ifXeTeX
> \RequirePackage{xltxtra}
> \RequirePackage[francais]{babel}
> \else
> \ifPDFTeX
> \RequirePackage[utf8]{inputenc}
> \RequirePackage[T1]{fontenc}
> \RequirePackage[francais]{babel}
> \RequirePackage{auto-pst-pdf}
> \else
> \RequirePackage[utf8]{inputenc}
> \RequirePackage[T1]{fontenc}
> \RequirePackage[francais]{babel}
> \fi
> \fi
>
> (j'esp�re qu'on peut imbriquer les if ainsi)

Pas de probl�me.

> D'ailleurs, comment rajouter lualatex si l'un des futurs utilisateurs
> veut l'utiliser ? lualatex s'utilise plus comme xelatex ou comme
> pdflatex ? (je veux pouvoir utiliser utf8 et pstricks)

Si vous regardez rapidement la doc (ou le code) de iftex.sty, il y a
aussi : \ifLuaTeX qui est �gal � \iftrue si \directlua est d�fini.

> puis j'utiliserai l'une des deux m�thodes pr�c�dentes (la proprette ou
> kvoptions).
>
> kvoptions a l'air pas mal mais c'est mon premier package et je ne sais
> pas comment l'utiliser.
> Je n'ai pas compris la doc.

Si vous comprenez les options de LaTeX, celles de kvoptions s'en
d�duisent tr�s imm�diatement. kvoptions est un package... pour les
packages (en effet : il g�re les options de packages).

Mais si votre but est uniquement d'ex�cuter du code conditionnel
en fonction du moteur utilis�, kvoptions n'apportera rien.

Le seul truc un peu sioux de kvoptions est la d�claration :

\SetupKeyvalOptions {family=...,prefix=...,setkeys=\kvsetkeys}

Apr�s vous choisissez le type de vos options parmi :
string, void ou bool (il n'y a pas 36 possibilit�s ;-) )
et vous utilisez \ProcessKeyvalOptions � la place de \ProcessOptions.

> j'aimerai que l'utilisateur n'ait pas � faire un \usepackage{kvoptions}
> mais o� le mettre si je veux l'utiliser ?

\ProvidesPackage {monbeaupackage}[date version description]
\RequirePackage {kvoptions}

et c'est r�gl�.

> Dans mon pymath.sty ? Mais dans ce cas, les options sont d�j� entr�es
> avec le format keyval alors que le package kvoptions n'est pas en action !

kvoptions ne changera rien au m�canisme de gestion des options du noyau
LaTeX2e (sauf si vous chargez "kvoptions-patch" mais personne ne le fait
puisqu'alors il faudrait le charger avant m�me \documentclass...) donc
si vous appelez :

\usepackage [engine=pdftex]{monbeaupackage}

l'option, au sens de LaTeX, est "engine=pdftex" (qui est m�me e-deff�e)
mais \ProcessKeyvalOptions (qui sera donc ex�cut�e dans
"monbeaupackage" en lieu et place de \ProcessOptions, et donc apr�s le
chargement de kvoptions) fera le business n�cessaire pour partager
l'option (cl�) et sa modalit� (valeur).

Mais c'est � vous de voir ce dont vous avez besoin. Sachant que pour
un package "g�n�rique" (ie : qui charge d'autres packages) passer des
options � "monbeaupackage" pour les repasser ensuite aux packages
charg�s est un moyen tr�s s�r pour d'obtenir des "options clashes"...

> Merci encore pour cette premi�re r�ponse,
> cordialement,
> Fabrice.

Derien.

Pour info, kvoptions est surtout utile quand vous faites un package
qui comprend une commande de "setup" du type :
\hypersetup
\bookmarksetup
\geometry
\pdfcommentsetup
etc.

Dans ce cas la commande de "setup" est sous forme "cl�=valeur" et
les cl�s, ou certaines d'entre elles, peuvent �tre assign�e directement
au \usepackage.

Ainsi avec kvoptions et kvsetkeys vous g�rez tous les cas.

Si vous n'avez pas de commande de setup, l'int�r�t de kvoptions est
� mon avis discutable :
\usepackage [pdftex]{monbeaupackage}
est souvent pr�f�rable � un truc du style [engine=pdftex]...


Fabrice

unread,
May 19, 2013, 3:35:40 PM5/19/13
to
Merci GL,
Vos explications sont claires.
Je vais rester dans la simplicit� pour commencer.
On verra plus tard comme �volue le package.
cordialement,
Fabrice.
0 new messages