Initialisation du projet LuaTeX
authorJean-Michel Sarlat <jm.sarlat@gmail.com>
Sat, 28 Jan 2012 08:38:37 +0000 (09:38 +0100)
committerJean-Michel Sarlat <jm.sarlat@gmail.com>
Sat, 28 Jan 2012 08:38:37 +0000 (09:38 +0100)
dobble/dobble.lua [new file with mode: 0644]
dobble/dobble.pdf [new file with mode: 0644]
dobble/dobble.tex [new file with mode: 0644]
dobble/dobble.zip [new file with mode: 0644]
dobble/index.xml [new file with mode: 0644]
index.xml [new file with mode: 0644]
web.xml [new file with mode: 0644]

diff --git a/dobble/dobble.lua b/dobble/dobble.lua
new file mode 100644 (file)
index 0000000..0446178
--- /dev/null
@@ -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 (file)
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 (file)
index 0000000..33de8e9
--- /dev/null
@@ -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 (file)
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 (file)
index 0000000..49a41c1
--- /dev/null
@@ -0,0 +1,4 @@
+<simple>
+    <titre>Jeu Dobble</titre>
+    <auteur>Maxime Chupin</auteur>
+</simple>
diff --git a/index.xml b/index.xml
new file mode 100644 (file)
index 0000000..9bc864a
--- /dev/null
+++ b/index.xml
@@ -0,0 +1,3 @@
+<simple>
+    <titre>Lua(La)TeX</titre>
+</simple>
diff --git a/web.xml b/web.xml
new file mode 100644 (file)
index 0000000..02554dc
--- /dev/null
+++ b/web.xml
@@ -0,0 +1,4 @@
+<web>
+  <titre>Lua(La)TeX</titre>
+  <auteur>Syracuse</auteur>
+</web>
\ No newline at end of file

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.