Utilisation de keyval

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.

Utilisation de keyval

Messagepar rebouxo » Jeudi 25 Juin 2015, 09:01

Je mets ici un exemple kimarche©. J'ai enfin compris comment fonctionne keyval.
Code: Tout sélectionner
\documentclass[french,10pt]{article}
 
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[paper=a4paper]{geometry}
\usepackage{babel}
\usepackage{kpfonts}
\usepackage{multicol}
\usepackage{pifont}
\usepackage{keyval}

\makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% DEFINITION DES CLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\define@key{orQCM}{nbcol}{\def\orQCM@nbcol{#1}}
\define@key{orQCM}{style}{\def\orQCM@style{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% VALEURS PAR DEFAUT DES CLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setkeys{orQCM}{nbcol=2,style=default}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Pour les cles comme style, les valeurs avec
%% lesquelles on compare sont stockés dans des
%% marco
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\orQCM@default{default}
\def\orQCM@rep{rep}
\def\orQCM@square{square}
%% Numérotation des item dans le QCM
\newcounter{cptorQCM}
\newenvironment{orQCM}[2][]
{%
\begingroup%
% Affectation des nouvelles clés dans l'environnement
\setkeys{orQCM}{#1}
% Le nombre  de colonnes est optionnel, et vaut deux par défaut.
% #1 argumet key=val
% #2 la question du QCM
% Issue d'une discussion avec pg sur mathematex
% On écrit #2
\noindent
   \begin{trivlist}\item  #2 :%
     \ifnum \orQCM@nbcol=1 \else\begin{multicols}{\orQCM@nbcol}\fi%
       \usecounter{cptorQCM}%
       \ifx \orQCM@style\orQCM@default%
       \renewcommand{\makelabel}[1]{\alph{cptorQCM}. ##1}
       \fi
       \ifx \orQCM@style\orQCM@rep%
       \renewcommand{\makelabel}[1]{\bsc{Rép.}~\Alph{cptorQCM}. ##1}
       \fi
       \ifx \orQCM@style\orQCM@square%
       \renewcommand{\makelabel}[1]{\ding{113} ##1}
       \fi
     }%
     {%
     \ifnum \orQCM@nbcol = 1 \else \end{multicols} \fi%
   \end{trivlist}%
   \endgroup
}%
\makeatother

\begin{document}


\begin{orQCM}[nbcol=1,style=rep]{Quelle est la couleur du cheval blans
  d'Henri IV}
\item Blanc
\item Vert
\item On ne sait pas
\item indéfinie
\end{orQCM}



La discussion suivante sur stackechange, m'a beaucoup aidé (entre autre parce qu'il y a un exemple commenté) : how to create a command with key values

  • Toutes les macros définit à la keyval (xkeyval, pgfkeys, et autres) fonctionnent sous le même principe : création des clés via \define@key, initialisation via le \setkeys.
  • La macro a un argument optionnel. Cet argument est passé à la commande \setkeys.
  • J'ai tout mis entre \begingroup \endgroup pour que les affections restent locale à l'environnement (ou à la commande).
  • Lorsque TeX lit une clé, celle-ci est transformée en la commande définit par dans le \define@key correspondant.
    Cette commande récupère l'argument compris entre le signe "=" et le signe "," ou le signe "]".
  • Les clés sont attachées à une macro via le premier argument de \define@keys, qui doit être le nom de la macro (ou de l'environnement) correspondant.
  • un inconvénient (pour celui qui conçoit la macro) est la taille et le nombre de macros.
  • On peut facilement créer des clés pour une classe ou une extension et un setup (que je pourrais créer

Le codage que je propose : est-ce qu'il y a des maladresses, voir des horreurs en terme de programmation ?
J'aurais bien aimé, utilisé xkeyval, car il dispose d'un type de clés où l'on choisit les valeurs (par exemple pour style) dans une liste (ici, default, rep, square), mais je n'ai pas réussi à le faire fonctionner ?

Bon, maintenant j'aimerais modifier \item pour qu'il prennent un argument optionnel. Typiquement, l'argument optionnel prendrait V ou F et construit une macro qui donne les bonnes réponses ? J'ai un peu bidouillé, mais rien de bien concluant, car \item n'a pas l'air facile à redéfinir. Est-ce que quelqu'un à un début d'idée ?

Olivier
PS : les systèmes à la keyval manquent cruellement d'exemples complets et simples. Le seul exemple que j'ai trouvé est la référence sur stackechange. Les doc ne proposent pas ou peu d'exemples accessibles et donnent souvent des informations qui sont soient très simples soit particulièrement TeXnique. Et il n'y a rien en français.
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6720
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Publicité

Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], ErwanD, Google [Bot], Google Adsense [Bot], Google Feedfetcher et 29 invités