\documentclass[12pt,a4paper]{article}
\usepackage[latin1,utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lmodern}
\usepackage{fourier}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usepackage{xkeyval}
\usepackage{ifthen}
\makeatletter
%----------> \CrayonGris <----------
\definecolor{wood}{cmyk}{0.00,0.12,0.35,0.05}
\define@cmdkey [DES] {CrayonGris} {inclinaison}{}
\define@cmdkey [DES] {CrayonGris} {mine}{}
\define@cmdkey [DES] {CrayonGris} {corps}{}
\define@cmdkey [DES] {CrayonGris} {couleur}{}
\define@cmdkey [DES] {CrayonGris} {xscale}{}
\define@cmdkey [DES] {CrayonGris} {yscale}{}
\define@boolkey [DES] {CrayonGris} {bague}[true]{}
\define@boolkey+ [DES] [CrayonGris} {orientation}[true]{}
\presetkeys [DES] {CrayonGris} {inclinaison = 0, mine = red, corps = blue, couleur = wood, xscale=1, yscale=1}{}
%
\newcommand{\CrayonGris}[2][]{%
\setkeys[DES]{CrayonGris}{#1}
\begin{scope}[shift={(#2)},rotate=\cmdDES@CrayonGris@inclinaison, xscale=\cmdDES@CrayonGris@xscale, yscale=\cmdDES@CrayonGris@yscale]
% Pointe ouverte
\draw[fill=\cmdDES@CrayonGris@couleur] (-0.3,0.6) -- (0,0) -- (0.3,0.6) arc(-90:-180:0.1) arc(0:-180:0.1) arc(0:-180:0.1) arc(0:-90:0.1);
% Mine
\draw[fill=\cmdDES@CrayonGris@mine] (-0.1,0.2) -- (0.1,0.2) -- (0,0) -- cycle;
% Corps du crayon
\draw[fill=\cmdDES@CrayonGris@corps] (0.3,0.6) arc(-90:-180:0.1) arc(0:-180:0.1) arc(0:-180:0.1) arc(0:-90:0.1) -- (-0.3,6) -- (0.3,6) -- cycle;
% Traits verticaux
\draw (-0.2,6) -- (-0.2,0.65) (0,6) -- (0,0.65) (0.2,6) -- (0.2,0.65);
Merci d'essayer de fournir un ECM (https://texnique.fr/osqa/faq/#custom-id-ecm )
\define@boolkey+ [DES] [CrayonGris} {orientation}[true]{}
est faux ->[
et}
^{\n}
n'est pas possible dans une coordonnée tikz. Mais pourquoi si compliqué? Avec n = -1 et 1:(0.4*\n,1.9)
?Pourquoi avez-vous besoin d'un booléen pour l'orientation? N'est-ce que pas le même comme
xscale=-1
?Le booléen utilisé en option dans la macro doit permettre de décider si on dessine l'élément vers la droite (n = 1) ou bien vers la gauche (n = -1).
@pdesmons Quelle est la différence entre n=+-1 ou xscale=+-1 ?
xscale est une échelle d'agrandissement/réduction des valeurs "en abscisse".
Le problème provient de ma mauvaise utilisation du package xkeyval, du test conditionnel et de l'affectation de la variable n car mon code ne compile plus dès que je rajoute la partie qui correspond à "bague" et "vis" même après la simplification proposée pour n avec +-1.
@pdesmons : si votre problème est résolu, pourriez-vous rédiger une solution ? Le package xkeyval est très utile, et nul doute qu'une réponse intéresserait les usagers du présent site.