Compilation conditionnelle et multiple en lualatex

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 utilisateurs 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.
IzB
Utilisateur débutant
Utilisateur débutant
Messages : 2
Inscription : vendredi 01 septembre 2023, 08:03
Statut actuel : Enseignant

Compilation conditionnelle et multiple en lualatex

Message non lu par IzB »

Bonjour,

Je cherche à automatiser la production de plusieurs pdf (du type énoncé, corrigé, les deux) à partir d'un document source et d'une compilation multiple en lualatex. L'environnement de travail est un Mac sous TexLive 2023, avec l'IDE TeXmaker. J'ai déjà dans mes documents des traitements conditionnels avec des booléens comme ci-dessous.

En compulsant différentes sources, j'ai bricolé ce bout de code, qui fonctionne :

Code : Tout sélectionner

\documentclass{article}

\newcommand{\luacondition}[3]{\ifnum1=\directlua{if #1 then tex.sprint(1) else tex.sprint(0) end}\relax #2\else #3\fi}

%0 pour énoncé (par défaut), 1 pour corrigé, 2 pour les deux
%\directlua{modecompil = 2}%déporté dans la commande de compilation

%défaut 0 ou autre chose que 1 et 2
\newif\ifestlecorrige\estlecorrigefalse
\newif\ifjeveuxtout\jeveuxtoutfalse
% si 1 ou 2
\luacondition{modecompil==1}{\estlecorrigetrue}{\estlecorrigefalse}
\luacondition{modecompil==2}{\jeveuxtouttrue}{\jeveuxtoutfalse}

\begin{document}

J'ai été exécuté avec modecompil=\directlua{tex.sprint(modecompil)}

Test 1 : 
|\luacondition{modecompil==1}{réponse si vrai 11111}{réponse si faux 22222}|

Test 2 : 
|\luacondition{modecompil==2}{réponse si vrai 33333}{réponse si faux 44444}|


\ifjeveuxtout 
ben t'auras tout
\else
 \ifestlecorrige 
 je suis le corrigé
 \else 
 je suis l'énoncé
 \fi
\fi
\end{document}
Je lance le traitement par la commande suivante (la syntaxe est propre à mac et à TeXmaker, les tubes (|) permettent d'enchaîner des commandes).

Code : Tout sélectionner

"latexmk" --shell-escape -e "$pdflatex=q/lualatex -synctex=1 -interaction=nonstopmode/" -pretex="\directlua{modecompil=0}" -jobname=% -lualatex %.tex -usepretex %.tex|"latexmk" --shell-escape -e "$pdflatex=q/lualatex -synctex=1 -interaction=nonstopmode/" -pretex="\directlua{modecompil=1}" -jobname=%_cor -lualatex %.tex -usepretex %.tex|"latexmk" --shell-escape -e "$pdflatex=q/lualatex -synctex=1 -interaction=nonstopmode/" -pretex="\directlua{modecompil=2}" -jobname=%_prof -lualatex %.tex -usepretex %.tex|open %.pdf
J'obtiens ainsi trois fichiers pdf avec des noms différents.

J'utilise TeX et ses dérivés depuis longtemps, mais je ne suis pas du tout un expert de la programmation en TeX. Ma question est la suivante : la macro \luacondition est-elle proprement définie et suffisamment robuste pour être utilisée en production ? Je suis preneur de tout conseil des sorciers TeX qui hantent ce forum :).
IzB
MB
Administrateur
Administrateur
Messages : 8102
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Compilation conditionnelle et multiple en lualatex

Message non lu par MB »

Bonjour,

Je me demande si la commande \luacondition est vraiment nécessaire dans la mesure où il me semblerait possible de définir les booléens tex directement dans pretex.
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
IzB
Utilisateur débutant
Utilisateur débutant
Messages : 2
Inscription : vendredi 01 septembre 2023, 08:03
Statut actuel : Enseignant

Re: Compilation conditionnelle et multiple en lualatex

Message non lu par IzB »

Bonjour,

Merci pour la réponse. On peut se passer de la commande \luacondition, mais elle me permet plus de souplesse : je n'utilise la compilation multiple qu'en fin de conception. Pour les compilations classiques, je joue directement sur la valeur des booléens.

IzB