[luatex] Des exemples ?

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

[luatex] Des exemples ?

Message par projetmbc »

Bonsoir,
quelqu'un aurait-il des exemples "simples" montrant l'utilité de luatex ? Tout ce que j'ai vu m'a paru très compliqué.

Existe-t-il un "luatex pour les nuls" ?

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: luatex-Des exemples ?

Message par MB »

Il y a ce document (en anglais) qui est intéressant. Sinon, on trouve ici l'exemple assez simple suivant :

Code : Tout sélectionner

\documentclass{article}
\usepackage[utf8]{luainputenc}

\begin{document}
A random number:
\begin{luacode}
tex.print(math.random())
\end{luacode}
\end{document}
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [luatex] Des exemples ?

Message par pg »


MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

On peut aussi consulter ce document pdf. Pour afficher un nombre aléatoire, je penche plutôt pour le code suivant :

Code : Tout sélectionner

\documentclass{minimal}
\usepackage[utf8]{luainputenc}
\begin{document}
A random number: \directlua{tex.print(math.random())}.
\end{document}
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

Merci pour les exemples simples.

Côté lien, je trouve que celui-ci est une horreur car il propose tout de suite des méthodes techniques avant de proposer des choses basiques.

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

projetmbc a écrit :Côté lien, je trouve que celui-ci est une horreur car il propose tout de suite des méthodes techniques avant de proposer des choses basiques.
Ce lien concerne d'ailleurs plutôt LuaTeX alors que les utilisateur de LaTeX vont probablement utiliser davantage LuaLaTeX.

Sinon, il serait intéressant de développer avec lualatex l'algorithme d'Euclide afin d'éviter de passer par Python comme je le faisais ici. Par contre, pour l'instant je ne m'en sors pas trop :

Code : Tout sélectionner

\documentclass{minimal}
\usepackage[utf8]{luainputenc}
\begin{document}

\newcommand{\euclide}[2]{%
\directlua{a = #1
b = #2
if a < b then a,b = b,a end}
Calcul du pgcd de \directlua{tex.print(a)} et de \directlua{tex.print(b)}.}

\euclide{240}{137}

\end{document}
Pour l'instant je rencontre les problèmes suivants :
  • je ne parviens pas à insérer un retour à la ligne (\\) dans une commande \directlua{} ce qui me serait utile pour faire des tableaux,
  • dans le même genre, la division euclidienne en lua s'effectue via le signe % ce qui doit poser également des problèmes ...
Pas facile de trouver de la documentation (même en anglais).
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

Ne pourrait-on pas à plusieurs demander au prêt de la communauté LuaTex de forunir des exemples classiques et basiques ?

Pour le moment, j'ai surtout l'impression que les exemples sont juste là pour montrer la puissance de LuaTex. Il se peut aussi que Google ne nous amène pas vers de bons exemples étant donnés sa façon de gérer les pages, cela ne m'étonnerait pas (dès que l'on cherche des choses techniques non populaires, Google est très mauvais).

Je trouve cela dommage car je pense que LuaLatex devrait permettre énormément de choses (même si cela ne m'empêchera pas de continuer mon projet qui lui sera dans le même esprit mais en utilisant Python).

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

projetmbc a écrit :Ne pourrait-on pas à plusieurs demander au prêt de la communauté LuaTex de forunir des exemples classiques et basiques ?
Je me suis inscrit sur la mailing-list histoire de voir si c'est actif ou pas mais pour l'instant il n'existe pas grand chose permettant l'accès à une 'communauté luatex'. En tous cas, en ce qui me concerne, je vais essayer de faire fonctionner cet exemple avec Euclide.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

Pourquoi pas passer par l'association Gutenberg ?

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

projetmbc a écrit :Pourquoi pas passer par l'association Gutenberg ?
Je ne connais pas spécialement.

Sinon, j'ai résolu le problème du % (division euclidienne lua) en utilisant math.floor. Par contre, je n'arrive toujours pas à aller à la ligne (et donc à faire des tableaux).

Code : Tout sélectionner

\documentclass{minimal}
\usepackage[utf8]{luainputenc}
\begin{document}

\newcommand{\euclide}[2]{%
\directlua{a = #1
b = #2
if a < b then a,b = b,a end
r = a-math.floor(a/b)*b
line = a .. ' tab ' .. b .. ' tab ' .. r .. ' endline.'
lines = {line}
while r >0 do
	a,b,r = b,r,a-math.floor(a/b)*b
	line = a .. ' tab ' .. b .. ' tab ' .. r .. ' endline.'
	table.insert(lines,line)
end}
\directlua{tex.sprint(lines)}}

\euclide{240}{137}

\end{document}
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

J'ai essayé et j'ai eu droit au message suivant où pgcdNotFinished est le nom de mon fichier tex qui reprend ton code :

Code : Tout sélectionner

Runaway argument?
{\directlua {a = ##1 b = ##2 if a < b then a,b = b,a end r = a-math.f\ETC.
! File ended while scanning use of \@argdef.
<inserted text> 
                \par 
<*> pgcdNotFinished
                   
? 

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

Tu peux essayer ce code (qui permet des retours à la ligne) :

Code : Tout sélectionner

\documentclass{minimal}
\usepackage[utf8]{luainputenc}
\parindent = 0pt
\begin{document}

\newcommand{\euclide}[2]{%
\directlua{a = #1
b = #2
if a < b then a,b = b,a end
r = a-math.floor(a/b)*b
tex.sprint(a .. ' tab ' .. b .. ' tab ' .. r .. [[\noexpand\newline]])
while r > 0 do
	a,b,r = b,r, a-math.floor(a/b)*b
	tex.sprint(a .. ' tab ' .. b .. ' tab ' .. r .. [[\noexpand\newline]])
end}}

\euclide{240}{137}

\end{document}
C'est à compiler avec lualatex.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

Ce code marche sans souci. Ce LuaLatex commence à m'intéresser.

Sont-ce les doubles crochets qui permettent l'insertion de commande LaTex ?

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

projetmbc a écrit :Sont-ce les doubles crochets qui permettent l'insertion de commande LaTex ?
Voir ici.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

Après avoir reçu de l'aide sur fctt (merci Arnaud et Paul), j'arrive enfin à faire mon tableau :

Code : Tout sélectionner

\documentclass[12pt]{minimal}
\usepackage[utf8]{luainputenc}
\parindent = 0pt
\begin{document}

\newcommand{\euclide}[2]{%
\begin{center}
\begin{tabular}{c@{\quad}c@{\quad}c}
\directlua{%
a = #1
b = #2
if a < b then a,b = b,a end
r = a-math.floor(a/b)*b
tex.sprint(a .. "&" .. b .. "&" .. r .. [[\noexpand\\]])
while r > 0 do
	a,b,r = b,r,a-math.floor(a/b)*b
	tex.sprint(a .. "&" .. b .. "&" .. r .. [[\noexpand\\]])
end}
\end{tabular}
\end{center}}

\euclide{240}{137}

\end{document}
Par contre, je n'arrive pas encore à lui ajouter des lignes pour faire un quadrillage ... je ne sais pas pourquoi ! :roll:
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

Il faut donc se placer dans l'environnement souhaité et y écrire le code LaTeX nécessaire via tex.sprint.

N'hésites pas à mettre à jour ici ton code, cela m'intéresse beaucoup.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [luatex] Des exemples ?

Message par pg »

MB a écrit :Par contre, je n'arrive pas encore à lui ajouter des lignes pour faire un quadrillage ... je ne sais pas pourquoi ! :roll
\hline ne fonctionne pas avec la classe minimal, il faut utiliser au moins article.

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

pg a écrit :\hline ne fonctionne pas avec la classe minimal, il faut utiliser au moins article.
Ah oui, en effet. :| (je pensais trop à un problème lié à luatex)
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

MB
Administrateur
Administrateur
Messages : 7130
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [luatex] Des exemples ?

Message par MB »

Voilà donc un code qui me semble à peu près finalisé et fonctionnel :

Code : Tout sélectionner

\documentclass[12pt]{article}
\usepackage[utf8]{luainputenc}
\parindent = 0pt
\begin{document}

\newcommand{\euclide}[2]{%
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
\directlua{a,b = #1,#2
if a < b then a,b = b,a end
r = a-math.floor(a/b)*b
tex.sprint(a .. "&" .. b .. "&" .. r .. [[\noexpand\\]])
while r > 0 do
	a,b = b,r
	r = a-math.floor(a/b)*b
	tex.sprint(a .. "&" .. b .. "&" .. r .. [[\noexpand\\]])
end}
\hline
\end{tabular}
\end{center}}

\euclide{587}{389}

\end{document}
Dans la version précédente, j'avais utilisé le code suivant :

Code : Tout sélectionner

   a,b,r = b,r,a-math.floor(a/b)*b
Or, ce code n'est pas équivalent à :

Code : Tout sélectionner

	a,b = b,r
	r = a-math.floor(a/b)*b
En effet, dans le premier cas, les affectations sont réellement simultanées (ce qui semble être une spécificité intéressante du langage lua).
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [luatex] Des exemples ?

Message par projetmbc »

Bonjour.
Cela marche chez moi sans souci.
MB a écrit :En effet, dans le premier cas, les affectations sont réellement simultanées (ce qui semble être une spécificité intéressante du langage lua).
Pour info, cela marche aussi comme cela sous Python.