[lualatex] Exemples d'utilisation

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
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.
MB
Administrateur
Administrateur
Messages : 7649
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

[lualatex] Exemples d'utilisation

Message non lu par MB »

Bonjour, l'objectif de ce sujet est de partager des exemples d'utilisation de lualatex.

La documentation de luatex étant assez austère et ne proposant quasiment aucun exemple, ce sujet peut s'avérer utile à tous ceux qui souhaiteraient s'initier à l'utilisation de ce moteur.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 7649
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [lualatex] Exemples d'utilisation

Message non lu par MB »

Voici un premier exemple permettant d'afficher en rouge toutes les lettres majuscules d'un document. Il s'agit d'un exemple inspiré du paquet chickenize.

Code : Tout sélectionner

\documentclass{article}
\usepackage{luacode,lipsum}
\begin{luacode}
color_push = node.new(node.id("whatsit"),node.subtype("pdf_colorstack"))
color_pop  = node.new(node.id("whatsit"),node.subtype("pdf_colorstack"))
color_push.command = 1
color_pop.command = 2
function uppercasecolor(head)
  for line in node.traverse_id(node.id("hhead"),head) do
    for upper in node.traverse_glyph(line.head) do
      if node.has_attribute(upper,luatexbase.attributes.uppercasecolorattr) then
        if (((upper.char > 64) and (upper.char < 91)) or ((upper.char > 57424) and (upper.char < 57451))) then
          color_push.data = "255 0 0 rg"
          line.head = node.insert_before(line.head,upper,node.copy(color_push))
          node.insert_after(line.head,upper,node.copy(color_pop))
        end
      end
    end
  end
  return head
end
luatexbase.add_to_callback("post_linebreak_filter",uppercasecolor,"uppercasecolor")
\end{luacode}
\begin{document}
\lipsum[1-1]
\end{document}
lualatex_red_uppercase.png
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 7649
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [lualatex] Exemples d'utilisation

Message non lu par MB »

Voici une adaptation de l'exemple précédent, permettant d'afficher en rouge toutes les lettres e (majuscule ou minuscule).

Code : Tout sélectionner

\documentclass{article}
\usepackage{luacode,lipsum}
\begin{luacode}
color_push = node.new(node.id("whatsit"),node.subtype("pdf_colorstack"))
color_pop  = node.new(node.id("whatsit"),node.subtype("pdf_colorstack"))
color_push.command = 1
color_pop.command = 2
function ecolor(head)
  for line in node.traverse_id(node.id("hhead"),head) do
    for n in node.traverse_glyph(line.head) do
      if node.has_attribute(n,luatexbase.attributes.uppercasecolorattr) then
        if (n.char == string.byte("e") or n.char == string.byte("E")) then
          color_push.data = "255 0 0 rg"
          line.head = node.insert_before(line.head,n,node.copy(color_push))
          node.insert_after(line.head,n,node.copy(color_pop))
        end
      end
    end
  end
  return head
end
luatexbase.add_to_callback("post_linebreak_filter",ecolor,"ecolor")
\end{luacode}
\begin{document}
\lipsum[1-1]
\end{document}
lualatex_red_e.png
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 7649
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [lualatex] Exemples d'utilisation

Message non lu par MB »

Autre exemple inspiré du paquet chickenize et permettant cette fois de supprimer toutes les lettres e (minuscule).

Code : Tout sélectionner

\documentclass{article}
\usepackage{luacode,lipsum}
\begin{luacode}
function remove_e(head)
    for n in node.traverse_glyph(head) do
        if n.char == string.byte("e") then
            node.remove(head,n)
        end
    end
    return head
end

luatexbase.add_to_callback("pre_linebreak_filter",remove_e,"remove all letters e")
\end{luacode}
\begin{document}
\lipsum[1-1]
\end{document}
lualatex_remove_e.png
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 482
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: [lualatex] Exemples d'utilisation

Message non lu par zariski63 »

Merci beaucoup. En effet on peut faire des choses remarquablement efficaces.
MB
Administrateur
Administrateur
Messages : 7649
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [lualatex] Exemples d'utilisation

Message non lu par MB »

Petit exemple faisant appel à luamplib, qui permet d'exécuter du code Metapost directement via luatex.

Code : Tout sélectionner

\documentclass{article}
\usepackage{luamplib}

\newcommand{\clock}[2]{\leavevmode\begin{mplibcode}
r := 1cm; len := 4bp;
def clock(expr hour, minute) =
  path cadran; cadran = fullcircle scaled (2r); draw cadran;
  for i = 1 step 1 until 12:
    a := 30i;
    draw ((r, 0) -- (r-len, 0)) rotated a;
    endfor;
  drawarrow origin -- r*dir(90-(30*hour+0.5*minute)) scaled 0.6;
  drawarrow origin -- r*dir(90-6*minute) scaled 0.8;
enddef;
beginfig(1); clock(#1,#2); endfig; \end{mplibcode}}

\begin{document}

\begin{center}
\begin{tabular}{ccc}
\clock{20}{30} & \clock{23}{15} & \clock{3}{40}
\end{tabular}
\end{center}

\end{document}
clock.png
clock.png (9.94 Kio) Consulté 96 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1991
Inscription : samedi 29 décembre 2007, 00:58

Re: [lualatex] Exemples d'utilisation

Message non lu par projetmbc »

Très bon exemple. Que le code est lisible...
Et si une section LuaLaTeX s'ouvrait ?
MB
Administrateur
Administrateur
Messages : 7649
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [lualatex] Exemples d'utilisation

Message non lu par MB »

Je ne suis personnellement pas très friand de la syntaxe de Metapost (qui est me semble-t-il proche de celle de Metafont) car je suis plus habitué à celle d'Asymptote (plus proche du C++).

Pour ce qui concerne un section lualatex, j'y avais déjà pensé lorsque j'ai restructuré le forum il y a quelques temps, mais vu le faible nombre d'utilisateurs, ça ne semble pas forcément nécessaire, d'autant plus que lualatex reste un compilateur latex parmi d'autres.

Pour l'instant, on pourra se contenter d'indiquer [lualatex] dans le titre des messages qui le concernent.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.