Comment créer un booléen (« orientation ») et une variable (« \n » qui vaut 1 si Ouvrir dans l'éditeur Overleaf
\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); % Bague \if \cmdDES@CrayonGris@bague \draw[fill=gray!20,opacity=0.5] (-0.4,1.5)rectangle(0.4,2.5); % Vis \if \cmdDES@CrayonGris@orientation let \n = 1 \else let \n = 2 \fi \draw[fill=gray!20] (0.4*(-1)^{\n},1.9)--(0.6*(-1)^{\n},1.9)--(0.6*(-1)^{\n},1.8)--(0.8*(-1)^{\n},1.8)--(0.8*(-1)^{\n},2.2)--(0.6*(-1)^{\n},2.2)--(0.6*(-1)^{\n},2.1)--(0.4*(-1)^{\n},2.1)--cycle; %\draw[fill=gray!20] (0.4*(-1)^{\n},1.9)--(0.6,1.9)--(0.6,1.8)--(0.8,1.8)--(0.8,2.2)--(0.6,2.2)--(0.6,2.1)--(0.4,2.1)--cycle; \fi \end{scope} } \makeatother
Affichage de 5 parmi 9
Afficher 4 commentaire(s) en plus
|
La réponse à cette question a finalement été complétée dans une autre de mes questions avec la création de compteurs (variables). Dans le préambule, on écrit après les packages : Ouvrir dans l'éditeur Overleaf
... \newcount\n \newcount\c ... puis dans la création de la macro « CrayonGris » à l'emplacement adéquat : Ouvrir dans l'éditeur Overleaf
%affectation des valeurs 1 ou -1 selon la valeur du booléen "DES@CrayonGris@orientation" pour pouvoir dans mon cas réaliser un dessin à droite ou bien à gauche : \ifDES@CrayonGris@orientation % choix de la position de la vis sur la bague (droite=1 ; gauche=-1) \n = 1 \else \n = -1 \fi J'ai également eu besoin de faire le lien entre deux booléens de la manière suivante dans une seconde macro, intitulée « Compas » : Ouvrir dans l'éditeur Overleaf
\ifDES@Compas@orientationCompas % corrélation entre l'orientation gauche-droite pour la pointe du compas et de la vis sur la bague du crayon du compas \c = 1 \setkeys[DES]{CrayonGris}{orientation=true} \else \c = -1 \setkeys[DES]{CrayonGris}{orientation=false} \fi Autrement dit, les deux compteurs |
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.