% Author.........................: C. Pierquet % licence........................: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf % Poker v1 cards Image's Licence.: LGPL-2.1 license https://github.com/htdebeer/SVG-cards % Poker v2 cards Image's Licence.: Public Domain https://tekeye.uk/playing_cards/svg-playing-cards % Poker v3 cards Image's Licence.: Public Domain https://www.me.uk/cards/ % Poker v4 cards Image's Licence.: CC BY-SA 4.0 https://commons.wikimedia.org/wiki/File:Computer_screen_playing_cards_deck.svg % Poker v5 cards Image's Licence.: Public Domain https://www.me.uk/cards/ % Poker fr cards Image's Licence.: LGPL-2.1 license https://svg-cards.sourceforge.net/ % Poker bi cards Image's Licence.: LGPL-3 license https://github.com/tfbkny/blackjack % Tarot v1 cards Image's Licence.: Public Domain https://freesvg.org/deck-of-french-tarot-playing-cards % Uno v1 cards Image's Licence.: MIT License https://eperezcosano.github.io/uno-part1/ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{JeuxCartes}[2023/09/13 v0.2.8 Jeux de cartes] % 0.2.8 Correction de bugs mineurs % 0.2.7 Retour en arrière design v2 tarot (pb de licence) % 0.2.5 Correction d'un dysfonctionnement avec le J qui peut désormais être utilisé en MiniCarte avec le Joker [en] + MiniMains [en] % 0.2.4 Style avec cartes françaises + + modification des clés avec l'ajout de + Suppression xcolor % 0.2.3 Ajout d'une option pour présenter une main "inversée" + style % 0.2.2 Correction de 2 cartes de pokerv4 % 0.2.2 Ajout d'un style pour le poker % 0.2.1 Correction d'un bug avec une carte de poker... % 0.2.0 Modification des images (en mode pdf !) + Poker + réduction taille Tarot % 0.1.7 Correction d'un bug avec les noms de Uno % 0.1.5 Ajout pour le Poker % 0.1.4 Réduction de la taille des images % 0.1.3 Ajout de cartes Uno (CC1.0 par AlexDer) + modification des commandes + rami % Amélioration de la qualité des cartes de Tarot (sans augmenter la taille) % 0.1.2 Modification du nom (et de la source) des images de Tarot (CC0) % 0.1.1 Ajout de commandes pour des mini-cartes % 0.1 Version initiale %------Packages utiles \RequirePackage{graphicx} \RequirePackage{tikz} \RequirePackage{pgffor} \RequirePackage{listofitems} \RequirePackage{xstring} \RequirePackage{simplekv} \RequirePackage{xinttools} \RequirePackage{randomlist} \RequirePackage{pifont} %librairies tikz \usetikzlibrary{calc,scopes} %------Commande en ligne (includegraphics) via raisebox/rotatebox ou tikz \defKV[AffCarteJeu]{% Hauteur=\def\AffCarteJeuHauteur{#1},% DecalageX=\def\AffCarteJeuDecalageX{#1},% DecalageY=\def\AffCarteJeuDecalageY{#1},% Rotation=\def\AffCarteJeuRotation{#1},% AlignementV=\def\AffCarteJeuAlignementV{#1},% TypeJeu=\def\AffCarteJeuType{#1},% StyleJeu=\def\AffCarteJeuStyle{#1} } \setKVdefault[AffCarteJeu]{% Hauteur=4.25,% Tikz=false,%pour placer la commande dans un environnement tikz ou en raisebox, TikzAutonome=true,%pour déjà mettre l'image dans du tikz DecalageX=0,% DecalageY=0,% Rotation=0,% AlignementV=0.5,% TypeJeu=Poker,% StyleJeu=v1 } \NewDocumentCommand\AffCarteJeu{ O{} m }{%1=options,2=cartenommée (OK) \useKVdefault[AffCarteJeu]% \setKV[AffCarteJeu]{#1}% %cas poker \IfStrEq{\AffCarteJeuType}{Poker}%poker et ensuite style {% %cas pokerv1 \IfStrEq{\AffCarteJeuStyle}{v1}%pokerv1 {\def\CartePrefixe{CaJ-PokeRv1-}}{}% %cas pokerv2 \IfStrEq{\AffCarteJeuStyle}{v2}%pokerv2 {\def\CartePrefixe{CaJ-PokeRv2-}}{}% %cas pokerv3 \IfStrEq{\AffCarteJeuStyle}{v3}%pokerv3 {\def\CartePrefixe{CaJ-PokeRv3-}}{}% %cas pokerv4 \IfStrEq{\AffCarteJeuStyle}{v4}%pokerv4 {\def\CartePrefixe{CaJ-PokeRv4-}}{}% %cas pokerv5 \IfStrEq{\AffCarteJeuStyle}{v5}%pokerv5 {\def\CartePrefixe{CaJ-PokeRv5-}}{}% %cas pokerfr \IfStrEq{\AffCarteJeuStyle}{fr}%pokerfr {\def\CartePrefixe{CaJ-PokeRfr-}}{}% %cas pokerbicycle \IfStrEq{\AffCarteJeuStyle}{bicycl}%pokerbic {\def\CartePrefixe{CaJ-PokeRbic-}}{}% }% {}% %cas tarot \IfStrEq{\AffCarteJeuType}{Tarot}%tarot (un seul style) {\def\CartePrefixe{CaJ-TaroTv1-}}{}% %cas uno \IfStrEq{\AffCarteJeuType}{Uno}%uno (un seul style) {\def\CartePrefixe{CaJ-UnOv1-}}{}% %transformation valign en tikz \def\OptionTikzCBB{current bounding box.center}% \IfStrEq{\AffCarteJeuAlignementV}{0}% {\def\OptionTikzCBB{current bounding box.south}}{}% \IfStrEq{\AffCarteJeuAlignementV}{1}% {\def\OptionTikzCBB{current bounding box.north}}{}% %affichage \ifboolKV[AffCarteJeu]{Tikz}% {% \ifboolKV[AffCarteJeu]{TikzAutonome}% {% {\tikz[baseline=(\OptionTikzCBB)] \draw (\AffCarteJeuDecalageX,\AffCarteJeuDecalageY) node[above right=0pt,inner sep=0pt,outer sep=0pt,rotate=\AffCarteJeuRotation] {\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}} ;}% }% {% \begin{scope}[shift={(\AffCarteJeuDecalageX,\AffCarteJeuDecalageY)}]% \draw (0,0) node[above right=0pt,inner sep=0pt,outer sep=0pt,rotate=\AffCarteJeuRotation] {\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}} ;% \end{scope}% }% }% {% \rotatebox[origin=c]{\AffCarteJeuRotation}{\raisebox{-\AffCarteJeuAlignementV\height}{\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}}}% }% } %------commande main simple (cartes côte à côte) \defKV[AffMainSimpleCartes]{% Hauteur=\def\MainSimpleHauteur{#1},% TypeJeu=\def\MainSimpleJeuType{#1},% StyleJeu=\def\MainSimpleJeuStyle{#1} } \setKVdefault[AffMainSimpleCartes]{% Hauteur=4.25,% TypeJeu=Poker,% StyleJeu=v1 } \NewDocumentCommand\AffCartesJeu{ O{} m }{%1=options,2=listecartes (OK) \useKVdefault[AffMainSimpleCartes]% \setKV[AffMainSimpleCartes]{#1}% %calculs et traitement des variables \setsepchar{§}% \readlist*\ListeCartesMain{#2}% \def\NbCartesMain{\ListeCartesMainlen}%nbcartes %main côte à côte \foreach \i in {1,...,\ListeCartesMainlen}{% \itemtomacro\ListeCartesMain[\i]\CarteMain% \AffCarteJeu[TypeJeu=\MainSimpleJeuType,StyleJeu=\MainSimpleJeuStyle,Hauteur=\MainSimpleHauteur]{\CarteMain}% }% } %------commande main cartes \defKV[AffMainCartes]{% Hauteur=\def\MainHauteur{#1},% EspH=\def\MainDecalH{#1},% EspV=\def\MainDecalV{#1},% Rotation=\def\MainRotation{#1},% TypeJeu=\def\MainJeuType{#1},% StyleJeu=\def\MainJeuStyle{#1},% AlignementV=\def\MainAlignementV{#1} } \setKVdefault[AffMainCartes]{% Hauteur=4.25,% EspH=1,% EspV=0,% Rotation=10,% Eventail=false,% TypeJeu=Poker,% StyleJeu=v1,% AlignementV=0.5,% Inverse=false } \NewDocumentCommand\MainCartesJeu{ O{} m }{%1=options,2=listecartes (OK) \useKVdefault[AffMainCartes]% \setKV[AffMainCartes]{#1}% %calculs et traitement des variables \ignoreemptyitems% \setsepchar{§}% \readlist*\ListeCartesMain{#2}% \def\NbCartesMain{\ListeCartesMainlen}%nbcartes %le cas du poker \IfStrEq{\MainJeuType}{Poker}%poker {% \def\HauteurGenerique{8.5}% \IfStrEq{\MainJeuStyle}{v1}%pokerv1 {\def\CarteMainPrefixe{CaJ-PokeRv1-}}{}% \IfStrEq{\MainJeuStyle}{v2}%poker2 {\def\CarteMainPrefixe{CaJ-PokeRv2-}}{}% \IfStrEq{\MainJeuStyle}{v3}%poker3 {\def\CarteMainPrefixe{CaJ-PokeRv3-}}{}% \IfStrEq{\MainJeuStyle}{v4}%poker4 {\def\CarteMainPrefixe{CaJ-PokeRv4-}}{}% \IfStrEq{\MainJeuStyle}{v5}%poker5 {\def\CarteMainPrefixe{CaJ-PokeRv5-}}{}% \IfStrEq{\MainJeuStyle}{fr}%pokerfr {\def\CarteMainPrefixe{CaJ-PokeRfr-}}{}% \IfStrEq{\MainJeuStyle}{bicycl}%pokerbic {\def\CarteMainPrefixe{CaJ-PokeRbic-}}{}% }% {}% \IfStrEq{\MainJeuType}{Tarot}%tarot {\def\HauteurGenerique{5.5}\def\CarteMainPrefixe{CaJ-TaroTv1-}}{}% \IfStrEq{\MainJeuType}{Uno}%uno {\def\HauteurGenerique{8.5}\def\CarteMainPrefixe{CaJ-UnOv1-}}{}% %echelle globale \def\EchelleCarteDecalage{\fpeval{\MainHauteur/\HauteurGenerique}}% %transformation valign en tikz \def\OptionTikzCBB{current bounding box.center}% \IfStrEq{\MainAlignementV}{0}% {\def\OptionTikzCBB{current bounding box.south}}{}% \IfStrEq{\MainAlignementV}{1}% {\def\OptionTikzCBB{current bounding box.north}}{}% %environnement tikzpicture \begin{tikzpicture}[baseline=(\OptionTikzCBB)]% \ifboolKV[AffMainCartes]{Inverse}% {% \foreach \i in {\ListeCartesMainlen,\inteval{\ListeCartesMainlen-1},...,1} }% {% \foreach \i in {1,...,\ListeCartesMainlen} }% {% \itemtomacro\ListeCartesMain[\i]\CarteMain% \ifboolKV[AffMainCartes]{Eventail}% {% \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}% \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}% \def\DecAngleMain{\fpeval{0.5*\NbCartesMain*\MainRotation}}% \AffCarteJeu[TypeJeu=\MainJeuType,StyleJeu=\MainJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainRotation}]{\CarteMain}% }% {% \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}% \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}% \AffCarteJeu[TypeJeu=\MainJeuType,StyleJeu=\MainJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMain}% }% }%finpour \end{tikzpicture}% } %------commande main aléatoire \defKV[AffMainAleaCartes]{% Hauteur=\def\MainAleaHauteur{#1},% EspH=\def\MainAleaDecalH{#1},% EspV=\def\MainAleaDecalV{#1},% Rotation=\def\MainAleaRotation{#1},% TypeJeu=\def\MainAleaJeuType{#1},% StyleJeu=\def\MainAleaJeuStyle{#1},% AlignementV=\def\MainAleaAlignementV{#1} } \setKVdefault[AffMainAleaCartes]{% Hauteur=4.25,% EspH=1,% EspV=0,% Rotation=10,% Eventail=false,% TypeJeu=Poker,% StyleJeu=v1,% AlignementV=0.5,% Inverse=false } \xdef\CartesJeuPoker{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK}% \xdef\CartesJeuBelote{7P,8P,9P,10P,VP,DP,RP,AP,7T,8T,9T,10T,VT,DT,RT,AT,7C,8C,9C,10C,VC,DC,RC,AC,7K,8K,9K,10K,VK,DK,RK,AK}% \xdef\CartesJeuBataille{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR}% \xdef\CartesJeuRami{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR,2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR}% \xdef\CartesJeuTarot{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,CP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,CT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,CC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,CK,DK,RK,AK,1AT,2AT,3AT,4AT,5AT,6AT,7AT,8AT,9AT,10AT,11AT,12AT,13AT,14AT,15AT,16AT,17AT,18AT,19AT,20AT,21AT,Exc}% \xdef\CartesJeuUno{0B,1B,1B,2B,2B,3B,3B,4B,4B,5B,5B,6B,6B,7B,7B,8B,8B,9B,9B,PTB,PTB,CSB,CSB,P2B,P2B,0V,1V,1V,2V,2V,3V,3V,4V,4V,5V,5V,6V,6V,7V,7V,8V,8V,9V,9V,PTV,PTV,CSV,CSV,P2V,P2V,0J,1J,1J,2J,2J,3J,3J,4J,4J,5J,5J,6J,6J,7J,7J,8J,8J,9J,9J,PTJ,PTJ,CSJ,CSJ,P2J,P2J,0R,1R,1R,2R,2R,3R,3R,4R,4R,5R,5R,6R,6R,7R,7R,8R,8R,9R,9R,PTR,PTR,CSR,CSR,P2R,P2R,P4,P4,P4,P4,Coul,Coul,Coul,Coul}% \NewList{CartesJeuMelange} \NewDocumentCommand\MainCartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes (OK) \useKVdefault[AffMainAleaCartes]% \setKV[AffMainAleaCartes]{#1}% %calculs et traitement des variables \IfStrEq{\MainAleaJeuType}{Poker}%poker {% \def\HauteurGenerique{8.5}%hauteur générique \def\CarteMainType{Poker}%on stocke le typejeu poker \xdef\CarteDebutRand{\fpeval{randint(0,52-#2)}}% }% {}% \IfStrEq{\MainAleaJeuType}{Bataille}%bataille {% \def\HauteurGenerique{8.5}%hauteur générique \def\CarteMainType{Poker}%on stocke le typejeu Bataille \xdef\CarteDebutRand{\fpeval{randint(0,54-#2)}}% }% {}% \IfStrEq{\MainAleaJeuType}{Belote}%belote {% \def\HauteurGenerique{8.5}%hauteur générique \def\CarteMainType{Poker}%on stocke le typejeu poker \xdef\CarteDebutRand{\fpeval{randint(0,32-#2)}}% }% {}% \IfStrEq{\MainAleaJeuType}{Rami}%rami {% \def\HauteurGenerique{8.5}%hauteur générique \def\CarteMainType{Poker}%on stocke le typejeu poker \xdef\CarteDebutRand{\fpeval{randint(0,108-#2)}}% }% {}% \IfStrEq{\MainAleaJeuType}{Uno}%uno {\def\HauteurGenerique{8.5}\def\CarteMainType{Uno}\xdef\CarteDebutRand{\fpeval{randint(0,108-#2)}}}{}% \IfStrEq{\MainAleaJeuType}{Tarot}%tarot {\def\HauteurGenerique{6.375}\def\CarteMainType{Tarot}\xdef\CarteDebutRand{\fpeval{randint(0,78-#2)}}}{}% %échelle relative des cartes \def\EchelleCarteDecalage{\fpeval{\MainAleaHauteur/\HauteurGenerique}}% %transformation valign en tikz \def\OptionTikzCBB{current bounding box.center}% \IfStrEq{\MainAleaAlignementV}{0}% {\def\OptionTikzCBB{current bounding box.south}}{}% \IfStrEq{\MainAleaAlignementV}{1}% {\def\OptionTikzCBB{current bounding box.north}}{}% %melange du jeu \ClearList{CartesJeuMelange}% \IfStrEq{\MainAleaJeuType}{Poker}%si c'est le poker {% \xintFor* ##1 in {\xintCSVtoList{\CartesJeuPoker}}% \do{\InsertRandomItem{CartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MainAleaJeuType}{Bataille}%si c'est la bataille {% \xintFor* ##1 in {\xintCSVtoList{\CartesJeuBataille}}% \do{\InsertRandomItem{CartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MainAleaJeuType}{Rami}%si c'est le rami {% \xintFor* ##1 in {\xintCSVtoList{\CartesJeuRami}}% \do{\InsertRandomItem{CartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MainAleaJeuType}{Belote}%si c'est la belote {% \xintFor* ##1 in {\xintCSVtoList{\CartesJeuBelote}}% \do{\InsertRandomItem{CartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MainAleaJeuType}{Tarot}%si c'est le tarot {% \xintFor* ##1 in {\xintCSVtoList{\CartesJeuTarot}}% \do{\InsertRandomItem{CartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MainAleaJeuType}{Uno}%si c'est le uno {% \xintFor* ##1 in {\xintCSVtoList{\CartesJeuUno}}% \do{\InsertRandomItem{CartesJeuMelange}{##1}}% }% {}% %environnement tikzpicture \begin{tikzpicture}[baseline=(\OptionTikzCBB)]% \ifboolKV[AffMainAleaCartes]{Inverse}% {% \foreach \i in {#2,\inteval{#2-1},...,1} }% {% \foreach \i in {1,...,#2} }% {%début du foreach \GetItem{CartesJeuMelange}{\inteval{\CarteDebutRand+\i-1}}{CarteMainChoisie}% \ifboolKV[AffMainAleaCartes]{Eventail}% {% \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalV*(\i-1)}}% \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalH*(\i-1)}}% \def\DecAngleMain{\fpeval{0.5*#2*\MainAleaRotation}}% \AffCarteJeu[TypeJeu=\CarteMainType,StyleJeu=\MainAleaJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainAleaHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainAleaRotation}]{\CarteMainChoisie}% }% {% \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalH*(\i-1)}}% \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalV*(\i-1)}}% \AffCarteJeu[TypeJeu=\CarteMainType,StyleJeu=\MainAleaJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainAleaHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMainChoisie}% }% }%finforeach \end{tikzpicture}% } %------commande pour remonter le Q ttfamily \DeclareRobustCommand*{\RaiseBoxByDepth}{% \raisebox{\depth}% } %------commande mini-cartes \defKV[AffMiniCartes]{% Largeur=\def\MiniCarteLargeur{#1},% FondAtout=\def\MiniCarteFondAtout{#1} } \setKVdefault[AffMiniCartes]{% Largeur=0.55cm,% FondAtout=yellow } \NewDocumentCommand\AffMiniCarteJeu{ O{} m }{%1=options,2=nbcartes \useKVdefault[AffMiniCartes]% \setKV[AffMiniCartes]{#1}% %découpage de l'argument \StrCut{#2}{.}\csVal\csCplt% %couleur de fond \def\csFond{white}% \def\csCoul{black}% %le cas du 10.11...21 \IfStrEq{\csVal}{10}{\def\csVal{\scalebox{0.5}[1]{10}}}{}% \IfStrEq{\csVal}{11}{\def\csVal{\scalebox{0.5}[1]{11}}}{}% \IfStrEq{\csVal}{12}{\def\csVal{\scalebox{0.5}[1]{12}}}{}% \IfStrEq{\csVal}{13}{\def\csVal{\scalebox{0.5}[1]{13}}}{}% \IfStrEq{\csVal}{14}{\def\csVal{\scalebox{0.5}[1]{14}}}{}% \IfStrEq{\csVal}{15}{\def\csVal{\scalebox{0.5}[1]{15}}}{}% \IfStrEq{\csVal}{16}{\def\csVal{\scalebox{0.5}[1]{16}}}{}% \IfStrEq{\csVal}{17}{\def\csVal{\scalebox{0.5}[1]{17}}}{}% \IfStrEq{\csVal}{18}{\def\csVal{\scalebox{0.5}[1]{18}}}{}% \IfStrEq{\csVal}{19}{\def\csVal{\scalebox{0.5}[1]{19}}}{}% \IfStrEq{\csVal}{20}{\def\csVal{\scalebox{0.5}[1]{20}}}{}% \IfStrEq{\csVal}{21}{\def\csVal{\scalebox{0.5}[1]{21}}}{}% %le cas de Excuse \IfStrEq{#2}{Exc}% {\def\csSymb{\ding{168}}\def\csCoul{blue}\def\csVal{\scalebox{0.33}[1]{EXC}}}{}% %le cas du Joker \IfStrEq{\csVal}{JO}% {\def\csSymb{\ding{166}}\def\csVal{\scalebox{0.5}[1]{JO}}}{}% %le cas de la dame [en] Q \IfStrEq{\csVal}{Q}% {\def\csVal{\RaiseBoxByDepth{\scalebox{1}[0.8]{Q}}}}{}% %si c'est un coeur \IfStrEq{\csCplt}{C}% {\def\csSymb{\ding{170}}\def\csCoul{red}}{}% %si c'est un carreau \IfStrEq{\csCplt}{K}% {\def\csSymb{\ding{169}}\def\csCoul{red}}{}% %si c'est un coeur \IfStrEq{\csCplt}{P}% {\def\csSymb{\ding{171}}}{}% %si c'est un trèfle \IfStrEq{\csCplt}{T}% {\def\csSymb{\ding{168}}}{}% %si c'est un atout 68 \IfStrEq{\csCplt}{AT}% {\def\csFond{\MiniCarteFondAtout}\def\csSymb{\ding{88}}}{}% %si c'est un rouge \IfStrEq{\csCplt}{R}% {\def\csCoul{red}}{}% %minicarte \tikz[baseline=(char.base)]\node[anchor=north west,line width=0.7pt,draw=gray,rectangle,rounded corners=3pt,inner sep=1.5pt,fill=\csFond,text=\csCoul,font=\ttfamily,minimum width=\MiniCarteLargeur](char){\vphantom{A}\csVal\scalebox{0.75}[0.75]{\csSymb}};% } %------commande mini-main-cartes \defKV[AffMiniMainCartes]{% Largeur=\def\MiniMainLargeur{#1},% FondAtout=\def\MiniMainFondAtout{#1} } \setKVdefault[AffMiniMainCartes]{% Largeur=0.55cm,% FondAtout=yellow } \NewDocumentCommand\MainMiniCartesJeu{ O{} m }{%1=options,2=liste \useKVdefault[AffMiniMainCartes]% \setKV[AffMiniMainCartes]{#1}% \ignoreemptyitems% \setsepchar{§}% \readlist*\MiniCartesMain{#2}% \foreachitem\MiniCarteAffich\in\MiniCartesMain{% \AffMiniCarteJeu[FondAtout=\MiniMainFondAtout,Largeur=\MiniMainLargeur]{\MiniCarteAffich}% }% } %------commande mini-main aléatoire \defKV[MiniMainAleaCartes]{% Largeur=\def\MiniMainAleaLargeur{#1},% TypeJeu=\def\MiniMainAleaType{#1},% FondAtout=\def\MiniMainAleaFondAtout{#1} } \setKVdefault[MiniMainAleaCartes]{% Largeur=0.55cm,% TypeJeu=Poker,% FondAtout=yellow } \xdef\MiniCartesJeuPoker{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K}% \xdef\MiniCartesJeuPokerEN{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K}% \xdef\MiniCartesJeuBelote{7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K}% \xdef\MiniCartesJeuBeloteEN{7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K}% \xdef\MiniCartesJeuBataille{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,JO.N,JO.R}% \xdef\MiniCartesJeuBatailleEN{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K,JO.N,JO.R}% \xdef\MiniCartesJeuTarot{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,C.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,C.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,C.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,C.K,D.K,R.K,A.K,1.AT,2.AT,3.AT,4.AT,5.AT,6.AT,7.AT,8.AT,9.AT,10.AT,11.AT,12.AT,13.AT,14.AT,15.AT,16.AT,17.AT,18.AT,19.AT,20.AT,21.AT,Exc}% \xdef\MiniCartesJeuRami{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,JO.N,JO.R,2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,JO.N,JO.R}% \xdef\MiniCartesJeuRamiEN{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K,JO.N,JO.R,2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K,JO.N,JO.R}% \NewList{MiniCartesJeuMelange} \NewDocumentCommand\MainMiniCartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes \useKVdefault[MiniMainAleaCartes]% \setKV[MiniMainAleaCartes]{#1}% %melange du jeu \ClearList{MiniCartesJeuMelange}% %Cartes [fr] \IfStrEq{\MiniMainAleaType}{Poker}%si c'est le poker {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuPoker}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{Bataille}%si c'est la bataille {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBataille}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{Belote}%si c'est le belote {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBelote}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{Tarot}%si c'est le tarot {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuTarot}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{Rami}%si c'est le rami {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuRami}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% %Cartes [en] \IfStrEq{\MiniMainAleaType}{PokerEN}%si c'est le poker {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuPokerEN}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{BatailleEN}%si c'est la bataille {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBatailleEN}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{BeloteEN}%si c'est le belote {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBeloteEN}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% \IfStrEq{\MiniMainAleaType}{RamiEN}%si c'est le rami {% \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuRamiEN}}% \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}% }% {}% %création de la main \foreach \i in {1,...,#2}{% \GetItem{MiniCartesJeuMelange}{\inteval{\i-1}}{MiniCarteMainChoisie}% \AffMiniCarteJeu[FondAtout=\MiniMainAleaFondAtout,Largeur=\MiniMainAleaLargeur]{\MiniCarteMainChoisie}% }%finpour } \endinput