From: Jean-Michel Sarlat Date: Sat, 28 Jan 2012 08:38:37 +0000 (+0100) Subject: Initialisation du projet LuaTeX X-Git-Url: https://melusine.eu.org/syracuse/G/git/?p=luatex.git;a=commitdiff_plain;h=1d28821dd142d1027f3e20a3813435296f5d1eb8;ds=sidebyside Initialisation du projet LuaTeX --- 1d28821dd142d1027f3e20a3813435296f5d1eb8 diff --git a/dobble/dobble.lua b/dobble/dobble.lua new file mode 100644 index 0000000..0446178 --- /dev/null +++ b/dobble/dobble.lua @@ -0,0 +1,77 @@ +math.randomseed(os.time()) +function dobble(prefixe,p) + -- prefixe : préfixe des fichiers d'image + -- (symboles présents sur les cartes) pdf + -- les noms fichiers doivent être de la forme prefixe001.pdf etc. + -- p : nombre premier (génération de 1+p+p² cartes à partir + -- du même nombre de symboles + -- on va générer un tableau où chaque case correspond + -- à une carte et contient la liste des numéros de symbole à mettre + local cartes={}; + -- première carte + cartes[0]={}; + for i=0,p do + cartes[0][i]=i; + end + printcard(cartes[0],p,prefixe); + -- p+p*p suivantes + for i=1,p do + -- p premières + cartes[i]={}; + for j=0,p do + if j==0 then + cartes[i][j]=0; + else + -- on place les symboles aléatoirement + table.insert(cartes[i],intrand(j),i*p+j); + end + end + printcard(cartes[i],p,prefixe); + -- p*p suivantes + for j=1,p do + cartes[p+(i-1)*p+j]={}; + for k=0,p do + if k==0 then + cartes[p+(i-1)*p+j][k]=i; + else + -- on place les symboles aléatoirement + table.insert(cartes[p+(i-1)*p+j],intrand(k),(k)*p+((k*i+j-1)%p)+1); + end + end + printcard(cartes[p+(i-1)*p+j],p,prefixe); + end + end + return cartes; +end + +function printcard(carte,p,prefixe) + -- prend une carte en entrée (tableau de p+1 éléments) + -- et génère le code tex d'une page à partir des images + -- nommées suivant le prefixe + tex.sprint("\\newpage\\begin{tikzpicture}[remember picture, overlay]\\coordinate(Or) at (current page.north west);"); + -- cadre de la carte + tex.sprint("\\draw[rounded corners=0.5cm, line width=.2cm] ($(Or)+(0.1,-0.1)$) rectangle ($(Or)+(7.9,-7.9)$);"); + -- entier aléatoire pour l'élément au centre + local has=intrand(p+1); + local compt=0; + for i=0,p do + -- l'image au contre + if i== has then + tex.sprint("\\node[scale="..scalerand(0.7,1.3)..",rotate="..intrand(360).."] at ($(Or)+(4,-4)$) {\\includegraphics[width=1cm]{"..prefixe..string.format("%02d",carte[i]+1).."}};"); + else + -- les autres tout le tour, taille aléatoire, rayon variant, rotation aléatoire + tex.sprint("\\node[scale="..scalerand(0.7,1.3)..",rotate="..intrand(360).."] at ($("..(360/(p)*compt)..":"..scalerand(2.3,3)..")+(Or)+(4,-4)$) {\\includegraphics[width=1cm]{"..prefixe..string.format("%02d",carte[i]+1).."}};"); + compt=compt+1; + end + end + tex.sprint("\\end{tikzpicture}"); +end + + +function intrand(p) -- retourne un entier entre 0 et p-1 + return math.floor(p*math.random()); +end + +function scalerand(a,b) -- retourne un nombre aléatoire entre a et b + return a+(b-a)*math.random(); +end \ No newline at end of file diff --git a/dobble/dobble.pdf b/dobble/dobble.pdf new file mode 100644 index 0000000..0a833c1 Binary files /dev/null and b/dobble/dobble.pdf differ diff --git a/dobble/dobble.tex b/dobble/dobble.tex new file mode 100644 index 0000000..33de8e9 --- /dev/null +++ b/dobble/dobble.tex @@ -0,0 +1,30 @@ +% Génération du jeu dobble grâce à luaTeX + +\documentclass{article} + +\usepackage[paperheight=8cm,paperwidth=8cm,margin=0cm]{geometry} +\usepackage{graphicx} + + +\directlua{ + dofile("dobble.lua"); +} + +\usepackage{tikz} +\usetikzlibrary{calc} + +%% commande permettant de générer les cartes +%% les images doivent être nommées comme suit : prefixe01.pdf, +%% prefixe02.pdf etc. +%% le premier argument de la commande est alors mon/chemin/prefixe +%% le second lui est le nombre premier de génération du dobble (7 +%% pour le classique) +\newcommand\dobble[2]{% + \directlua{ + dobble("#1","#2"); + } +}% + +\begin{document} +\dobble{images/bclogo}{7} +\end{document} diff --git a/dobble/dobble.zip b/dobble/dobble.zip new file mode 100644 index 0000000..fbee755 Binary files /dev/null and b/dobble/dobble.zip differ diff --git a/dobble/index.xml b/dobble/index.xml new file mode 100644 index 0000000..49a41c1 --- /dev/null +++ b/dobble/index.xml @@ -0,0 +1,4 @@ + + Jeu Dobble + Maxime Chupin + diff --git a/index.xml b/index.xml new file mode 100644 index 0000000..9bc864a --- /dev/null +++ b/index.xml @@ -0,0 +1,3 @@ + + Lua(La)TeX + diff --git a/web.xml b/web.xml new file mode 100644 index 0000000..02554dc --- /dev/null +++ b/web.xml @@ -0,0 +1,4 @@ + + Lua(La)TeX + Syracuse + \ No newline at end of file