gratifiant > comp.* > comp.text.tex

Pétiard François (15/04/2018, 18h27)
Bonjour

Je désire faire un fichier de style avec des options sous la forme
clé=valeur et où valeur peut être du texte codé en UTF8.
Ci-dessous un ECM qui ne marche pas : lorsque l'on demande d'afficher la
valeur d'une clé, les lettres accentuées se transforment en une bouillie
infâme.
Quelqu'un a-t-il une solution ?

Merci d'avance.

François

%%%%%%%%%%%%% ECM %%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}

\begin{filecontents}{testpack.sty}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{xkeyval}
\DeclareOptionX*{}
\def\test@Numero{}
\def\test@Date{}
\def\test@Theme{}
\define@key{cfg}{numero}[]{\gdef\test@Numero{#1}}
\define@key{cfg}{date}[]{\gdef\test@Date{#1}}
\define@key{cfg}{theme}[]{\gdef\test@Theme{#1}}
\edef\@tempa{\noexpand\setkeys{cfg}{\@ptionlist{te stpack.sty}}}
\@tempa
\ProcessOptionsX
\RequirePackage{lmodern}
\newcommand*{\useTestNumero}{\test@Numero}
\newcommand*{\useTestDate}{\test@Date}
\newcommand*{\useTestTheme}{\test@Theme}
\endinput
\end{filecontents}

\usepackage[numero=123,date={décembre 2018},theme={éàçèâêîôûüöë?}]{testpack}

\begin{document}
Numéro = \useTestNumero;

Date = \useTestDate;

Fil rouge = \useTestTheme
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%
GL (15/04/2018, 19h43)
Le 15/04/2018 à 18:27, Pétiard François a écrit :
> Bonjour
> Je désire faire un fichier de style avec des options sous la forme
> clé=valeur et où valeur peut être du texte codé en UTF8.
> Ci-dessous un ECM qui ne marche pas : lorsque l'on demande d'afficher la
> valeur d'une clé, les lettres accentuées se transforment en une bouillie
> infâme.
> Quelqu'un a-t-il une solution ?
> Merci d'avance.
> François


C'est parce que les options passent dans un \edef.
Le package kvoptions (d'Heiko Oberdiek) propose l'extension
{kvoptions-patch} pour résoudre ce cas :

% --------------------------------------------------
\documentclass{article}
\usepackage {kvoptions-patch}
\begin{filecontents}{testpack.sty}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
%\RequirePackage{xkeyval}
\usepackage {kvoptions}
\SetupKeyvalOptions {family=cfg}
\DeclareOptionX*{}
\def\test@Numero{}
\def\test@Date{}
\def\test@Theme{}
\define@key{cfg}{numero}[]{\gdef\test@Numero{#1}}
\define@key{cfg}{date}[]{\gdef\test@Date{#1}}
\define@key{cfg}{theme}[]{\gdef\test@Theme{#1}}
\edef\@tempa{\noexpand\setkeys{cfg}{\@ptionlist{te stpack.sty}}}
\@tempa
%\ProcessOptionsX
\ProcessKeyvalOptions*
\RequirePackage{lmodern}
\newcommand*{\useTestNumero}{\test@Numero}
\newcommand*{\useTestDate}{\test@Date}
\newcommand*{\useTestTheme}{\test@Theme}
\endinput
\end{filecontents}

\usepackage[numero=123,date={décembre 2018},theme={éàçèâêîôûüöë?}]{testpack}

\begin{document}
Numéro = \useTestNumero;

Date = \useTestDate;

Fil rouge = \useTestTheme
\end{document}
% ---------------------------------------

Remarque perso: je trouve que xkeyval est une vraie m***e.
Je me demande comment certains peuvent utiliser ce package
pour une tâche aussi basique que fixer des clé=valeur...
Pétiard François (16/04/2018, 06h14)
Le 15/04/2018 à 19:43, GL a écrit :
> Le 15/04/2018 à 18:27, Pétiard François a écrit :
> C'est parce que les options passent dans un \edef.
> Le package kvoptions (d'Heiko Oberdiek) propose l'extension
>  {kvoptions-patch} pour résoudre ce cas :
> Remarque perso: je trouve que xkeyval est une vraie m***e.
> Je me demande comment certains peuvent utiliser ce package
> pour une tâche aussi basique que fixer des clé=valeur...


Merci mais, désolé, ça ne marche pas ; j'ai toujours de la bouillie...

%-----------------------------------------------------------
\documentclass{article}
\usepackage{kvoptions-patch}
\begin{filecontents}{testpack.sty}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=cfg}
\def\test@Numero{}
\def\test@Date{}
\def\test@Theme{}
\define@key{cfg}{numero}[]{\gdef\test@Numero{#1}}
\define@key{cfg}{date}[]{\noexpand\gdef\test@Date{#1}}
\define@key{cfg}{theme}[]{\gdef\test@Theme{#1}}
\edef\@tempa{\noexpand\setkeys{cfg}{\@ptionlist{te stpack.sty}}}
\@tempa
\ProcessKeyvalOptions*
\RequirePackage{lmodern}
\newcommand*{\useTestNumero}{\test@Numero}
\newcommand*{\useTestDate}{\test@Date}
\newcommand*{\useTestTheme}{\test@Theme}
\endinput
\end{filecontents}

\usepackage[numero=123,date={décembre 2018},theme={éàçèâêîôûüöë?}]{testpack}

\begin{document}
Numéro = \useTestNumero;

Date = \useTestDate;

Thème = \useTestTheme
\end{document}
%--------------------------------------------------------------
jfbu (16/04/2018, 08h17)
Le 16/04/2018 à 06:14, Pétiard François a écrit :
> Le 15/04/2018 à 19:43, GL a écrit :
> Merci mais, désolé, ça ne marche pas ; j'ai toujours de la bouillie...


Bonjour,

vous devez ajouter \usepackage[utf8]{inputenc}
avant d'utiliser dans votre préambule les é, à etc...

Ce sera inutile avec le LaTeX2e qui vient avec TeXLive 2018
car il fera \usepackage[utf8]{inputenc} dans le format
par défaut

[..]
> \newcommand*{\useTestTheme}{\test@Theme}
> \endinput
> \end{filecontents}


\usepackage[utf8]{inputenc}

> \usepackage[numero=123,date={décembre 2018},theme={éàçèâêîôûüöë?}]{testpack}
> \begin{document}
> Numéro = \useTestNumero;
> Date = \useTestDate;
> Thème = \useTestTheme
> \end{document}
> %--------------------------------------------------------------


Cordialement,

Jean-François
Pétiard François (16/04/2018, 09h52)
Le 16/04/2018 à 08:17, jfbu a écrit :
> Bonjour,
> vous devez ajouter \usepackage[utf8]{inputenc}
> avant d'utiliser dans votre préambule les é, à etc...
> Ce sera inutile avec le LaTeX2e qui vient avec TeXLive 2018
> car il fera \usepackage[utf8]{inputenc} dans le format
> par défaut
> Cordialement,
> Jean-François


Bonjour

Et merci ! Ça marche bien maintenant.

(remarque : MiKTeX est à jour depuis le 9 avril mais je ne l'avais pas
mis à jour...)

Cordialement

François
GL (16/04/2018, 20h40)
Le 16/04/2018 à 09:52, Pétiard François a écrit :
[..]
GL (17/04/2018, 19h22)
Le 16/04/2018 à 06:14, Pétiard François a écrit :
> Le 15/04/2018 à 19:43, GL a écrit :
> Merci mais, désolé, ça ne marche pas ; j'ai toujours de la bouillie...


Ca je ne le comprends pas, chez moi aucun problème si on charge
{kvoptions-patch} avant le \usepackage [options] en question.
GL (17/04/2018, 19h22)
Le 16/04/2018 à 06:14, Pétiard François a écrit :
> Le 15/04/2018 à 19:43, GL a écrit :
> Merci mais, désolé, ça ne marche pas ; j'ai toujours de la bouillie...


Ca je ne le comprends pas, chez moi aucun problème si on charge
{kvoptions-patch} avant le \usepackage [options] en question.
Discussions similaires