% Author.........: C. Pierquet % licence........: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf % Inspiration....: https://tex.stackexchange.com/questions/407449/typesetting-tangram-figures-in-latex \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{TangramTikz}[2023/01/26 v0.1.1 Tangram Puzzles with TikZ] % 0.1.1 Ajout de modèles % 0.1.0 Version initiale + quelques modèles %------Packages utiles \RequirePackage{tikz} \RequirePackage{xparse} \RequirePackage{simplekv} \RequirePackage{xstring} \RequirePackage{listofitems} %librairies tikz \usetikzlibrary{calc,shapes.geometric} %pieces and styles, [en] and [fr], and keys %https://tex.stackexchange.com/questions/407449/typesetting-tangram-figures-in-latex \tikzset{ TangBigTri/.pic={\path[pic actions] (0,0)--(2,0)--(2,2)--cycle;}, TangGrandTri/.pic={\path[pic actions] (0,0)--(2,0)--(2,2)--cycle;}, TangMedTri/.pic={\path[pic actions] (0,0)--(1,1)--(2,0)--cycle;}, TangMoyTri/.pic={\path[pic actions] (0,0)--(1,1)--(2,0)--cycle;}, TangSqua/.pic={\path[pic actions] (0,0)--(1,0)--(1,1)--(0,1)--cycle;}, TangCar/.pic={\path[pic actions] (0,0)--(1,0)--(1,1)--(0,1)--cycle;}, TangSmalTri/.pic={\path[pic actions] (0,0)--(1,0)--(1,1)--cycle;}, TangPetTri/.pic={\path[pic actions] (0,0)--(1,0)--(1,1)--cycle;}, TangPara/.pic={\path[pic actions] (0,0)--(1,0)--(2,1)--(1,1)--cycle;} } \tikzset{% TangPuzz/.style={transform shape,fill=#1,draw=#1}, TangPuzz/.default=black, TangSol/.style={transform shape,fill=#1,draw=white,line width=\TangBorder}, TangSol/.default=black } %the square / le carre \NewDocumentCommand\TangramSquare{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \pic[TangSol={\TanGListeCouleurs[1]}] at (0,0) {TangBigTri};% \pic[TangSol={\TanGListeCouleurs[1]},rotate=-90] at (2,2) {TangBigTri};% \pic[TangSol={\TanGListeCouleurs[4]},rotate=-90] at (2,0) {TangSqua};% \pic[TangSol={\TanGListeCouleurs[3]},rotate=180] at (4,0) {TangSmalTri};% \pic[TangSol={\TanGListeCouleurs[3]},rotate=90] at (2,-1) {TangSmalTri};% \pic[TangSol={\TanGListeCouleurs[5]},xscale=-1] at (2,-1) {TangPara};% \pic[TangSol={\TanGListeCouleurs[2]},rotate=180] at (3,-1) {TangMedTri};% }% {% \pic[#2] at (0,0) {TangBigTri};% \pic[#2,rotate=-90] at (2,2) {TangBigTri};% \pic[#2,rotate=-90] at (2,0) {TangSqua};% \pic[#2,rotate=180] at (4,0) {TangSmalTri};% \pic[#2,rotate=90] at (2,-1) {TangSmalTri};% \pic[#2,xscale=-1] at (2,-1) {TangPara};% \pic[#2,rotate=180] at (3,-1) {TangMedTri};% }% } %the pinguin / le pingouin %https://tex.stackexchange.com/questions/407449/typesetting-tangram-figures-in-latex \NewDocumentCommand\TangramPinguin{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \path (0,-1) pic[TangSol={\TanGListeCouleurs[3]}] {TangSmalTri} ++(1,0) pic[TangSol={\TanGListeCouleurs[4]}] {TangSqua} ++(1,1) pic[TangSol={\TanGListeCouleurs[1]},rotate=-45,yscale=-1] {TangBigTri} ++(-45:2) pic[TangSol={\TanGListeCouleurs[1]},rotate=-135] {TangBigTri} +({-sqrt(2)},0) pic[TangSol={\TanGListeCouleurs[5]},rotate=-135] {TangPara} ++(-2,{-2*sqrt(2)}) pic[TangSol={\TanGListeCouleurs[2]}] {TangMedTri} ++(2,1) pic[TangSol={\TanGListeCouleurs[3]},rotate=-90] {TangSmalTri} ; }% {% \path (0,-1) pic[#2] {TangSmalTri} ++(1,0) pic[#2] {TangSqua} ++(1,1) pic[#2,rotate=-45,yscale=-1] {TangBigTri} ++(-45:2) pic[#2,rotate=-135] {TangBigTri} +({-sqrt(2)},0) pic[#2,rotate=-135] {TangPara} ++(-2,{-2*sqrt(2)}) pic[#2] {TangMedTri} ++(2,1) pic[#2,rotate=-90] {TangSmalTri} ; }% } %the boat / le bateau %https://tex.stackexchange.com/questions/407449/typesetting-tangram-figures-in-latex \NewDocumentCommand\TangramBoat{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \path (0,0) pic[TangSol={\TanGListeCouleurs[2]},rotate=180] {TangMedTri} ++(-1,-1) pic[TangSol={\TanGListeCouleurs[5]}] {TangPara} ++(1,0) pic[TangSol={\TanGListeCouleurs[3]}] {TangSmalTri} ++(1,0) pic[TangSol={\TanGListeCouleurs[4]}] {TangSqua} ++(2,1) pic[TangSol={\TanGListeCouleurs[3]},rotate=180] {TangSmalTri} ++(-2.5,0) pic[TangSol={\TanGListeCouleurs[1]},rotate=80] {TangBigTri} ++(80:4) ++(170:2) pic[TangSol={\TanGListeCouleurs[1]},rotate=-100] {TangBigTri} ; }% {% \path (0,0) pic[#2,rotate=180] {TangMedTri} ++(-1,-1) pic[#2] {TangPara} ++(1,0) pic[#2] {TangSmalTri} ++(1,0) pic[#2] {TangSqua} ++(2,1) pic[#2,rotate=180] {TangSmalTri} ++(-2.5,0) pic[#2,rotate=80] {TangBigTri} ++(80:4) ++(170:2) pic[#2,rotate=-100] {TangBigTri} ; }% } %the house / la maison \NewDocumentCommand\TangramHome{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({sqrt(8)},0){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}](0,0){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}](-0.5,{sqrt(2)}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0.5+sqrt(8)},{sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}](0.5,{sqrt(2)+1}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({sqrt(2)},{sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({sqrt(8)},0){TangPetTri} }% {% \PieceTangram[#2]({sqrt(8)},0){TangGrandTri} \PieceTangram[#2](0,0){TangMoyTri} \PieceTangram[#2](-0.5,{sqrt(2)}){TangPara} \PieceTangram[#2]({0.5+sqrt(8)},{sqrt(2)}){TangGrandTri} \PieceTangram[#2](0.5,{sqrt(2)+1}){TangCar} \PieceTangram[#2]({sqrt(2)},{sqrt(2)}){TangPetTri} \PieceTangram[#2]({sqrt(8)},0){TangPetTri} }% } %the fir tree / le sapin \NewDocumentCommand\TangramFirTree{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({0},{0}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({-1.5},{1}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0.5},{3}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({2.5},{2}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-1.5},{2}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-0.5},{2}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-0.5},{3}){TangMoyTri} }% {% \PieceTangram[#2]({0},{0}){TangCar} \PieceTangram[#2]({-1.5},{1}){TangGrandTri} \PieceTangram[#2]({0.5},{3}){TangGrandTri} \PieceTangram[#2]({2.5},{2}){TangPara} \PieceTangram[#2]({-1.5},{2}){TangPetTri} \PieceTangram[#2]({-0.5},{2}){TangPetTri} \PieceTangram[#2]({-0.5},{3}){TangMoyTri} }% } %the cat / le chat \NewDocumentCommand\TangramCat{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({2-sqrt(2)},{2+sqrt(2)}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[1]}](0,0){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({2-sqrt(2)},{2-sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({2},{0}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2-1.5*sqrt(2)},{2+1.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2-0.5*sqrt(2)},{2+2.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({2-sqrt(2)},{sqrt(2)}){TangMoyTri} }% {% \PieceTangram[#2]({2-sqrt(2)},{2+sqrt(2)}){TangCar} \PieceTangram[#2](0,0){TangGrandTri} \PieceTangram[#2]({2-sqrt(2)},{2-sqrt(2)}){TangGrandTri} \PieceTangram[#2]({2},{0}){TangPara} \PieceTangram[#2]({2-1.5*sqrt(2)},{2+1.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({2-0.5*sqrt(2)},{2+2.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({2-sqrt(2)},{sqrt(2)}){TangMoyTri} }% } %the swan / le cygne \NewDocumentCommand\TangramSwan{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({sqrt(2)},{sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({sqrt(2)},{sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({sqrt(2)+1},{sqrt(2)}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({0},{0}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({0},{2+sqrt(2)}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-1},{1+sqrt(2)}){TangPetTri} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({sqrt(2)},{sqrt(2)}){TangGrandTri} \PieceTangram[#2]({sqrt(2)},{sqrt(2)}){TangPetTri} \PieceTangram[#2]({sqrt(2)+1},{sqrt(2)}){TangCar} \PieceTangram[#2]({0},{0}){TangMoyTri} \PieceTangram[#2]({0},{2+sqrt(2)}){TangPara} \PieceTangram[#2]({-1},{1+sqrt(2)}){TangPetTri} }% } %the duck / le canard \NewDocumentCommand\TangramDuck{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({sqrt(2)},{sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({2*sqrt(2)},{0}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({sqrt(2)},{sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({sqrt(8)+0.5*sqrt(2)},{1+0.5*sqrt(2)}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({2.5*sqrt(2)-2},{2+0.5*sqrt(2)}){TangMoyTri} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({sqrt(2)},{sqrt(2)}){TangGrandTri} \PieceTangram[#2]({2*sqrt(2)},{0}){TangCar} \PieceTangram[#2]({sqrt(2)},{sqrt(2)}){TangPetTri} \PieceTangram[#2]({2.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({sqrt(8)+0.5*sqrt(2)},{1+0.5*sqrt(2)}){TangPara} \PieceTangram[#2]({2.5*sqrt(2)-2},{2+0.5*sqrt(2)}){TangMoyTri} }% } %the pyramid / la pyramide \NewDocumentCommand\TangramPyramid{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-0.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({-sqrt(2)},{sqrt(2)}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({0},{2*sqrt(2)}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0},{sqrt(2)}){TangPetTri} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({-0.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({-sqrt(2)},{sqrt(2)}){TangPara} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangCar} \PieceTangram[#2]({0},{2*sqrt(2)}){TangMoyTri} \PieceTangram[#2]({0},{sqrt(2)}){TangPetTri} }% } %the rocket / la fusee \NewDocumentCommand\TangramRocket{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({2},{2}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({0},{2}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({0.5},{-1}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-0.5},{-1}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0.5},{-1}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({1.5},{0}){TangPara} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({2},{2}){TangGrandTri} \PieceTangram[#2]({0},{2}){TangMoyTri} \PieceTangram[#2]({0.5},{-1}){TangCar} \PieceTangram[#2]({-0.5},{-1}){TangPetTri} \PieceTangram[#2]({0.5},{-1}){TangPetTri} \PieceTangram[#2]({1.5},{0}){TangPara} }% } %the candle / la bougie \NewDocumentCommand\TangramCandle{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({1.5*sqrt(2)},{1.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({1.5*sqrt(2)},{2.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({sqrt(2)-1},{1+2*sqrt(2)}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({sqrt(2)-0.5},{1+2*sqrt(2)}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({sqrt(2)},{2+2*sqrt(2)}){TangPara} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangGrandTri} \PieceTangram[#2]({1.5*sqrt(2)},{1.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({1.5*sqrt(2)},{2.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({sqrt(2)-1},{1+2*sqrt(2)}){TangMoyTri} \PieceTangram[#2]({sqrt(2)-0.5},{1+2*sqrt(2)}){TangCar} \PieceTangram[#2]({sqrt(2)},{2+2*sqrt(2)}){TangPara} }% } %the shirt / la chemise \NewDocumentCommand\TangramShirt{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{2}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({2},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-1},{2}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({1},{2}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({1},{2}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0},{2}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({2},{3}){TangPara} }% {% \PieceTangram[#2]({0},{2}){TangGrandTri} \PieceTangram[#2]({2},{0}){TangGrandTri} \PieceTangram[#2]({-1},{2}){TangMoyTri} \PieceTangram[#2]({1},{2}){TangPetTri} \PieceTangram[#2]({1},{2}){TangCar} \PieceTangram[#2]({0},{2}){TangPetTri} \PieceTangram[#2]({2},{3}){TangPara} }% } %the fish / le poisson \NewDocumentCommand\TangramFish{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0},{0}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({0},{0}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-1},{1}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({sqrt(2)},{0}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({1.5*sqrt(2)-2},{2+0.5*sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({1.5*sqrt(2)},{-0.5*sqrt(2)}){TangGrandTri} }% {% \PieceTangram[#2]({0},{0}){TangPetTri} \PieceTangram[#2]({0},{0}){TangPara} \PieceTangram[#2]({-1},{1}){TangMoyTri} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({sqrt(2)},{0}){TangCar} \PieceTangram[#2]({1.5*sqrt(2)-2},{2+0.5*sqrt(2)}){TangGrandTri} \PieceTangram[#2]({1.5*sqrt(2)},{-0.5*sqrt(2)}){TangGrandTri} }% } %the sailboat / le voilier \NewDocumentCommand\TangramSailboat{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({-2},{0.35}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0},{0}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-2+sqrt(2)},{0}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0},{1+2*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({-1-2+sqrt(2)},{0}){TangPara} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({-2},{0.35}){TangGrandTri} \PieceTangram[#2]({0},{0}){TangPetTri} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangCar} \PieceTangram[#2]({-2+sqrt(2)},{0}){TangMoyTri} \PieceTangram[#2]({0},{1+2*sqrt(2)}){TangPetTri} \PieceTangram[#2]({-1-2+sqrt(2)},{0}){TangPara} }% } %the kangaroo / le kangourou \NewDocumentCommand\TangramKangaroo{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({2},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2},{-0.5}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2},{3}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({0},{-2}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-0.5*sqrt(2)},{-2-0.5*sqrt(2)}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({1-0.5*sqrt(2)},{-1-0.5*sqrt(2)}){TangCar} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({2},{0}){TangGrandTri} \PieceTangram[#2]({2},{-0.5}){TangPetTri} \PieceTangram[#2]({2},{3}){TangPetTri} \PieceTangram[#2]({0},{-2}){TangPara} \PieceTangram[#2]({-0.5*sqrt(2)},{-2-0.5*sqrt(2)}){TangMoyTri} \PieceTangram[#2]({1-0.5*sqrt(2)},{-1-0.5*sqrt(2)}){TangCar} }% } %the dog / le chien \NewDocumentCommand\TangramDog{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({0},{1.75}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({2-0.5*sqrt(2)},{0.5*sqrt(2)}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({2.5},{2.5}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2.5},{2.5+sqrt(2)}){TangPetTri} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({0},{1.75}){TangPara} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangGrandTri} \PieceTangram[#2]({2-0.5*sqrt(2)},{0.5*sqrt(2)}){TangMoyTri} \PieceTangram[#2]({2.5},{2.5}){TangCar} \PieceTangram[#2]({2.5},{2.5+sqrt(2)}){TangPetTri} }% } %the rabbit / le lapin (0.1.1) \NewDocumentCommand\TangramRabbit{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({-sqrt(2)},{-sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0},{-0.5}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-sqrt(2)},{-2}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({0},{0}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({0.2},{1}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({0.2},{1}){TangPara} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({-sqrt(2)},{-sqrt(2)}){TangGrandTri} \PieceTangram[#2]({0},{-0.5}){TangPetTri} \PieceTangram[#2]({-sqrt(2)},{-2}){TangPetTri} \PieceTangram[#2]({0},{0}){TangCar} \PieceTangram[#2]({0.2},{1}){TangMoyTri} \PieceTangram[#2]({0.2},{1}){TangPara} }% } %the plane / l'avion (0.1.1) \NewDocumentCommand\TangramPlane{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{2}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({2},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2+0.5*sqrt(2)},{-0.5*sqrt(2)}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({2},{0}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({-1},{-0.75}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-1},{-0.75}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({sqrt(2)-2},{0.25}){TangMoyTri} }% {% \PieceTangram[#2]({0},{2}){TangGrandTri} \PieceTangram[#2]({2},{0}){TangGrandTri} \PieceTangram[#2]({2+0.5*sqrt(2)},{-0.5*sqrt(2)}){TangPetTri} \PieceTangram[#2]({2},{0}){TangPara} \PieceTangram[#2]({-1},{-0.75}){TangCar} \PieceTangram[#2]({-1},{-0.75}){TangPetTri} \PieceTangram[#2]({sqrt(2)-2},{0.25}){TangMoyTri} }% } %the rooster / le coq (0.1.1) \NewDocumentCommand\TangramRooster{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({2},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{-1}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({1.6},{-0.4}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-2},{1}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({1},{0}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({1+sqrt(2)},{1}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({-2},{1}){TangPara} }% {% \PieceTangram[#2]({2},{0}){TangGrandTri} \PieceTangram[#2]({0},{-1}){TangGrandTri} \PieceTangram[#2]({1.6},{-0.4}){TangPetTri} \PieceTangram[#2]({-2},{1}){TangMoyTri} \PieceTangram[#2]({1},{0}){TangCar} \PieceTangram[#2]({1+sqrt(2)},{1}){TangPetTri} \PieceTangram[#2]({-2},{1}){TangPara} }% } %the jogger / le coureur (0.1.1) \NewDocumentCommand\TangramJogger{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({sqrt(2)},{-sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({-1},{1}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({sqrt(2)-1},{1}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({0},{-sqrt(2)}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0.9},{-sqrt(2)-0.9}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({-sqrt(2)-1},{-sqrt(2)-1}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-sqrt(2)-0.5},{-sqrt(2)-0.5}){TangPetTri} }% {% \PieceTangram[#2]({sqrt(2)},{-sqrt(2)}){TangGrandTri} \PieceTangram[#2]({-1},{1}){TangGrandTri} \PieceTangram[#2]({sqrt(2)-1},{1}){TangCar} \PieceTangram[#2]({0},{-sqrt(2)}){TangMoyTri} \PieceTangram[#2]({0.9},{-sqrt(2)-0.9}){TangPetTri} \PieceTangram[#2]({-sqrt(2)-1},{-sqrt(2)-1}){TangPara} \PieceTangram[#2]({-sqrt(2)-0.5},{-sqrt(2)-0.5}){TangPetTri} }% } %the dancer / le danseur (0.1.1) \NewDocumentCommand\TangramDancer{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({3.5},{3.5}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({1.5},{3.5}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({2},{2}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({0.5},{0}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({2},{1.5}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({2.5},{0}){TangPetTri} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({3.5},{3.5}){TangGrandTri} \PieceTangram[#2]({1.5},{3.5}){TangCar} \PieceTangram[#2]({2},{2}){TangPara} \PieceTangram[#2]({0.5},{0}){TangPetTri} \PieceTangram[#2]({2},{1.5}){TangMoyTri} \PieceTangram[#2]({2.5},{0}){TangPetTri} }% } %the camel / le chameau (0.1.1) \NewDocumentCommand\TangramCamel{ s O{TangPuzz} }{%*=colorcorrection,[key for pic] \IfBooleanTF{#1}% {% \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0},{0}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[2]}]({-2},{0}){TangMoyTri} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({-2},{0}){TangPetTri} \PieceTangram[TangSol={\TanGListeCouleurs[4]}]({0},{0}){TangCar} \PieceTangram[TangSol={\TanGListeCouleurs[1]}]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangGrandTri} \PieceTangram[TangSol={\TanGListeCouleurs[5]}]({sqrt(2)},{0.25+sqrt(2)}){TangPara} \PieceTangram[TangSol={\TanGListeCouleurs[3]}]({1+0.5*sqrt(2)},{1.5*sqrt(2)-0.25}){TangPetTri} }% {% \PieceTangram[#2]({0},{0}){TangGrandTri} \PieceTangram[#2]({-2},{0}){TangMoyTri} \PieceTangram[#2]({-2},{0}){TangPetTri} \PieceTangram[#2]({0},{0}){TangCar} \PieceTangram[#2]({0.5*sqrt(2)},{0.5*sqrt(2)}){TangGrandTri} \PieceTangram[#2]({sqrt(2)},{0.25+sqrt(2)}){TangPara} \PieceTangram[#2]({1+0.5*sqrt(2)},{1.5*sqrt(2)-0.25}){TangPetTri} }% } %macros for tangram creation / commandes pour créer le tangram \NewDocumentCommand\TangramTikzCreateEN{ m }{% \readlist*\TanGListeCouleurs{\TangColors}% \ifboolKV[TGRMTikz]{Puzzle}{#1[TangPuzz={\TangColor}]}{}% \ifboolKV[TGRMTikz]{Correction}{#1[TangSol={\TangColor}]}{}% \ifboolKV[TGRMTikz]{ColorCorrection}{#1*}{}% } \NewDocumentCommand\TangramTikzCreateFR{ m }{% \readlist*\TanGListeCouleurs{\TangCouleurs}% \ifboolKV[TGRMTikz]{Puzzle}{#1[TangPuzz={\TangCouleur}]}{}% \ifboolKV[TGRMTikz]{Correction}{#1[TangSol={\TangCouleur}]}{}% \ifboolKV[TGRMTikz]{CorrectionCouleur}{#1*}{}% } \defKV[TGRMTikz]{%keys [en] and [fr] ListeCouleurs=\xdef\TangCouleurs{#1}, ColorList=\xdef\TangColors{#1},% Couleur=\xdef\TangCouleur{#1},% Color=\xdef\TangColor{#1},% Sep=\xdef\TangBorder{#1} } \setKVdefault[TGRMTikz]{%keys by default [en] and [fr] Puzzle=true,% Correction=false,% ColorCorrection=false,% CorrectionCouleur=false,% ListeCouleurs={red,orange,blue,green,purple},% ColorList={red,orange,blue,green,purple},% Couleur=black,% Color=black,% Sep=1pt } %the independent command / la commande autonome \NewDocumentCommand\TangramTikz{ O{} D<>{} m }{% \useKVdefault[TGRMTikz]% \setKV[TGRMTikz]{#1}% \begin{tikzpicture}[line join=bevel,#2]% %SQUARE \IfStrEq{#3}{Square}{\TangramTikzCreateEN{\TangramSquare}}{}% \IfStrEq{#3}{Carre}{\TangramTikzCreateFR{\TangramSquare}}{}% %PINGUIN \IfStrEq{#3}{Pinguin}{\TangramTikzCreateEN{\TangramPinguin}}{}% \IfStrEq{#3}{Pingouin}{\TangramTikzCreateFR{\TangramPinguin}}{}% %BOAT \IfStrEq{#3}{Boat}{\TangramTikzCreateEN{\TangramBoat}}{}% \IfStrEq{#3}{Bateau}{\TangramTikzCreateFR{\TangramBoat}}{}% %HOME \IfStrEq{#3}{Home}{\TangramTikzCreateEN{\TangramHome}}{}% \IfStrEq{#3}{Maison}{\TangramTikzCreateFR{\TangramHome}}{}% %FIRTREE \IfStrEq{#3}{FirTree}{\TangramTikzCreateEN{\TangramFirTree}}{}% \IfStrEq{#3}{Sapin}{\TangramTikzCreateFR{\TangramFirTree}}{}% %CAT \IfStrEq{#3}{Cat}{\TangramTikzCreateEN{\TangramCat}}{}% \IfStrEq{#3}{Chat}{\TangramTikzCreateFR{\TangramCat}}{}% %SWAN \IfStrEq{#3}{Swan}{\TangramTikzCreateEN{\TangramSwan}}{}% \IfStrEq{#3}{Cygne}{\TangramTikzCreateFR{\TangramSwan}}{}% %PYRAMID \IfStrEq{#3}{Pyramid}{\TangramTikzCreateEN{\TangramPyramid}}{}% \IfStrEq{#3}{Pyramide}{\TangramTikzCreateFR{\TangramPyramid}}{}% %DUCK \IfStrEq{#3}{Duck}{\TangramTikzCreateEN{\TangramDuck}}{}% \IfStrEq{#3}{Canard}{\TangramTikzCreateFR{\TangramDuck}}{}% %ROCKET \IfStrEq{#3}{Rocket}{\TangramTikzCreateEN{\TangramRocket}}{}% \IfStrEq{#3}{Fusee}{\TangramTikzCreateFR{\TangramRocket}}{}% %CANDLE \IfStrEq{#3}{Candle}{\TangramTikzCreateEN{\TangramCandle}}{}% \IfStrEq{#3}{Bougie}{\TangramTikzCreateFR{\TangramCandle}}{}% %SHIRT \IfStrEq{#3}{Shirt}{\TangramTikzCreateEN{\TangramShirt}}{}% \IfStrEq{#3}{Chemise}{\TangramTikzCreateFR{\TangramShirt}}{}% %FISH \IfStrEq{#3}{Fish}{\TangramTikzCreateEN{\TangramFish}}{}% \IfStrEq{#3}{Poisson}{\TangramTikzCreateFR{\TangramFish}}{}% %SAILBOAT \IfStrEq{#3}{Sailboat}{\TangramTikzCreateEN{\TangramSailboat}}{}% \IfStrEq{#3}{Voilier}{\TangramTikzCreateFR{\TangramSailboat}}{}% %KANGAROO \IfStrEq{#3}{Kangaroo}{\TangramTikzCreateEN{\TangramKangaroo}}{}% \IfStrEq{#3}{Kangourou}{\TangramTikzCreateFR{\TangramKangaroo}}{}% %DOG \IfStrEq{#3}{Dog}{\TangramTikzCreateEN{\TangramDog}}{}% \IfStrEq{#3}{Chien}{\TangramTikzCreateFR{\TangramDog}}{}% %RABBIT \IfStrEq{#3}{Rabbit}{\TangramTikzCreateEN{\TangramRabbit}}{}% \IfStrEq{#3}{Lapin}{\TangramTikzCreateFR{\TangramRabbit}}{}% %FLIGHT \IfStrEq{#3}{Plane}{\TangramTikzCreateEN{\TangramPlane}}{}% \IfStrEq{#3}{Avion}{\TangramTikzCreateFR{\TangramPlane}}{}% %ROOSTER \IfStrEq{#3}{Rooster}{\TangramTikzCreateEN{\TangramRooster}}{}% \IfStrEq{#3}{Coq}{\TangramTikzCreateFR{\TangramRooster}}{}% %JOGGER \IfStrEq{#3}{Jogger}{\TangramTikzCreateEN{\TangramJogger}}{}% \IfStrEq{#3}{Coureur}{\TangramTikzCreateFR{\TangramJogger}}{}% %DANCER \IfStrEq{#3}{Dancer}{\TangramTikzCreateEN{\TangramDancer}}{}% \IfStrEq{#3}{Danseur}{\TangramTikzCreateFR{\TangramDancer}}{}% %CAMEL \IfStrEq{#3}{Camel}{\TangramTikzCreateEN{\TangramCamel}}{}% \IfStrEq{#3}{Chameau}{\TangramTikzCreateFR{\TangramCamel}}{}% \end{tikzpicture}% } %manual creation / creation manuelle \NewDocumentCommand\PieceTangram{ O{TangPuzz} D<>{} D(){0,0} m }{%booléen+options pic+place pic+nom piece \pic[#1,#2] at (#3) {#4};% } \NewDocumentEnvironment{EnvTangramTikz}{ O{} D<>{} }% {% \useKVdefault[TGRMTikz]% \setKV[TGRMTikz]{#1}% \begin{tikzpicture}[line join=bevel,#2]% }% {% \end{tikzpicture}% } \endinput