summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-03-21 21:19:31 +0000
committerKarl Berry <karl@freefriends.org>2020-03-21 21:19:31 +0000
commit6d32dbc09b0aa2ebd4b09010126c58dc1c4ec09c (patch)
tree0af8098f309f8a662935a34275f2c98830555f1c /Master/texmf-dist/doc
parent2836126906a8ae46781df9e08c9eabb75228bd83 (diff)
expose-expl3-dunkerque-2019 (21mar20)
git-svn-id: svn://tug.org/texlive/trunk@54451 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/LISEZMOI.md40
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/Makefile134
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/README.md45
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib56
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/erato-def.tex103
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/henel-def.tex66
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex81
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/knuth-def.tex20
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19ecrireprem.tex400
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19eratosthene.tex234
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19intro.tex25
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19kaprekar.tex244
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.pdfbin0 -> 309536 bytes
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.tex152
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty321
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex75
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex229
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/les-macros.tex511
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex73
-rw-r--r--Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/latexmkrc12
20 files changed, 2821 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/LISEZMOI.md b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/LISEZMOI.md
new file mode 100644
index 00000000000..1f182be82ae
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/LISEZMOI.md
@@ -0,0 +1,40 @@
+<!-- Time-stamp: <2020-03-21 17:22:35 administrateur> -->
+<!-- Création : 2019-09-24T11:13:44+0200 -->
+
+# expose-expl3-dunkerque-2019
+
+Auteur: Yvon Henel, alias _Le TeXnicien de surface_
+([contact](le.texnicien.de.surface@yvon-henel.fr))
+
+## LICENCE
+
+Le contenu de cette archive est placé sous la « LaTeX Project Public License ».
+Voir http://www.ctan.org/license/lppl1.3
+pour la licence.
+
+© 2019-2020 Yvon Henel (Le TeXnicien de surface)
+
+## Description du document (dun19expl3.pdf)
+
+**Documentation en français**
+
+Article basé sur l'exposé fait lors du stage de Dunkerque 2019
+sur Expl3.
+
+Codes en Expl3 commentés des algorithmes de création d’une liste
+d’entiers premiers ; du crible d’Ératosthène ; des suites de Kaprekar.
+
+
+## Description de l’archive
+
+L’archive contient tous les fichiers nécessaires à compiler le
+document au format pdf. Invoquer `make all` dans le répertoire
+principal.
+
+## Historique
+
+Version 1.2 — 2020-03-21
+
+Version 1.1 — 2019-09-24
+
+Version 1 — 2019-08-29
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/Makefile b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/Makefile
new file mode 100644
index 00000000000..4e4fc1fb9d0
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/Makefile
@@ -0,0 +1,134 @@
+# Time-stamp: <2019-08-29 11:09:56 administrateur>
+# Création: 2019-08-08T10:10:07+0200
+# ---------------------------------------------------------------
+# Makefile pour latexmk et la suite par Y. Henel
+#
+# !!! règle "zip" à revoir, fichier bib etc. pas à la bonne place
+#
+# ---------------------------------------------------------------
+SHELL:=/bin/bash
+# ---------------------------------------------------------------
+
+AXLRTEX:=aux,toc
+PRDTTEX:=ltx
+PRDTVERBATIM:=vrb
+TEXLOG:=log
+AXLRINDEX:=idx,ind
+INDEXLOG:=ilg
+AXLRHYPERREF:=out,nav
+AXLRGLOSSARIES:=xdy,glo,gls
+GLOSSARIESLOG:=glg
+AXLRBIBLATEX:=run.xml,bbl,bcf
+BIBLATEXLOG:=blg
+LATEXMKAUX:=fdb_latexmk,fls
+AXLR=$(AXLRTEX),$(AXLRINDEX),$(AXLRHYPERREF),$(AXLRGLOSSARIES),$(AXLRBIBLATEX),$(AUTRESAXLR)
+PRDTAUX=$(PRDTTEX),$(PRDTVERBATIM)
+FICHIERSLOG=$(TEXLOG),$(INDEXLOG),$(GLOSSARIESLOG),$(BIBLATEXLOG),$(AUTRESLOG)
+
+# ---------------------------------------------------------------
+
+NOM:=dun19expl3
+NOMCOMP:= $(NOM)
+VERSION:=1.0
+SUJET:=expl3
+
+PRES:=$(NOMCOMP)
+
+SOURCE:=$(PRES).tex
+
+SRCAUX:=$(wildcard *.tex)
+
+BIBLIODIR=bibliographie
+BIBLIO:=$(wildcard $(BIBLIODIR)/*.bib)
+
+CODESDIR=codes
+CODES:=$(wildcard $(CODESDIR)/*.tex)
+
+GLOSAIRESDIR=glosaires
+GLOSAIRES:=$(wildcard $(GLOSAIRESDIR)/*.tex)
+
+SOURCES:= \
+ Makefile\
+ latexmkrc\
+ $(SOURCE)\
+ $(SRCAUX)\
+ $(BIBLIO)\
+ $(CODES)\
+ $(GLOSAIRES)\
+
+
+PRDT:= $(subst .tex,.pdf,$(SOURCE))
+
+AUTRESAXLR:=klo,kls
+
+AUTRESLOG:=klg
+
+# ---------------------------------------------------------------
+# règles
+# astuce avec TEXINPUT tirée du Makefile de la doc de pgf
+
+TEXINPUTS := ./extensions:$(TEXINPUTS)
+
+%.pdf: %.tex
+ TEXINPUTS="$(TEXINPUTS)" latexmk -pdf -bibtex $<
+# ---------------------------------------------------------------
+
+doc: $(PRDT)
+$(PRDT): $(SOURCES)
+# ---------------------------------------------------------------
+
+.PHONY: refaire
+
+refaire:
+ TEXINPUTS="$(TEXINPUTS)" latexmk -gg -pdf -bibtex $(SOURCE)
+# ---------------------------------------------------------------
+
+.PHONY: almostclean
+
+almostclean:
+ @rm -f *~
+ @rm -f *.{$(AXLR)}
+# ---------------------------------------------------------------
+
+.PHONY: clean
+
+clean: almostclean
+ @rm -f *.{$(PRDTAUX)}
+# ---------------------------------------------------------------
+
+.PHONY: veryclean
+
+veryclean: clean
+ @rm -f *.{$(FICHIERSLOG),$(LATEXMKAUX)}
+# ---------------------------------------------------------------
+
+.PHONY: distclean
+
+distclean: veryclean
+ @rm -f $(PRDT)
+# ---------------------------------------------------------------
+
+.PHONY: prepazip
+
+REPERT:= ./$(NOMCOMP)
+
+prepazip: doc veryclean
+ @rm -rf $(REPERT)
+ @mkdir -p $(REPERT)/SRC
+ @mkdir -p $(REPERT)/DOC
+ @cp $(SOURCES) $(REPERT)/SRC
+ @cp $(PRDT) $(REPERT)/DOC
+# ---------------------------------------------------------------
+
+.PHONY: zip
+
+zip: prepazip
+ @rm -f $(NOMCOMP).zip
+ @zip -r $(NOMCOMP) $(REPERT)
+ @rm -rf $(REPERT)
+
+# ---------------------------------------------------------------
+# version allégée, avec BASH ;
+# utilisation d'un fichier inclus 2019-08-08
+# ---------------------------------------------------------------
+
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/README.md b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/README.md
new file mode 100644
index 00000000000..b085718cb8a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/README.md
@@ -0,0 +1,45 @@
+<!-- Time-stamp: <2020-03-21 17:22:24 administrateur> -->
+<!-- Création : 2019-09-24T11:13:44+0200 -->
+
+# expose-expl3-dunkerque-2019
+
+Author: Yvon Henel, aka Le TeXnicien de surface
+([contact](le.texnicien.de.surface@yvon-henel.fr))
+
+**Documentation in French only**
+
+## LICENCE
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/license/lppl1.3
+for the details of that license.
+
+© 2019-2020 Yvon Henel (Le TeXnicien de surface)
+
+## Description of the Archive
+
+An article based on the presentation made in Dunkerque
+for the “stage LaTeX”, 12 June 2019.
+
+The archive contains the pdf file and all the necessary files to
+produce it. You have to invoke the Makefile with `make all` to create
+the pdf file.
+
+## Summary of the Article
+
+1. I use Expl3 to solve the well known problem of creating the prime
+ numbers
+2. I use Expl3 again to implement the Sieve of Eratosthenes
+3. I finish with an Expl3 implementation of Kaprekar algorithm
+
+You can cast a glance at the glossary to see a list of all the
+commands used in the code.
+
+
+## History
+
+Version 1.2 — 2020-03-21
+
+Version 1.1 — 2019-09-24
+
+Version 1 — 2019-08-29
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib
new file mode 100644
index 00000000000..f6a803b3a8f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/bibliographie/dun19expl3.bib
@@ -0,0 +1,56 @@
+% Time-stamp: <2019-08-26 11:22:07 administrateur>
+% Création : 2019-08-07T10:51:21+0200
+
+@String{l3p = {The \LaTeX 3 Project Team}}
+
+@Manual{expl3progr,
+ author = l3p,
+ title = {The expl3 package and \LaTeX 3 programming},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 16}
+
+@Manual{l3interfaces,
+ author = l3p,
+ title = {The \LaTeX 3 Interfaces},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 299}
+
+@Manual{source3,
+ author = l3p,
+ title = {The \LaTeX 3 Source},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 1302}
+
+@Manual{source2e,
+ author = {Braams, Johannes and
+ Carlisle, David and
+ Jeffrey, Alan and
+ Lamport, Leslie and
+ Mittelbach, Frank and
+ Rowley, Chris and
+ Schöpf, Rainer},
+ title = {The \LaTeXe{} Source},
+ type = {manual},
+ date = {2019-07-25},
+ language = {english},
+ pagetotal = 677}
+
+@Manual{xparse,
+ author = l3p,
+ title = {The \Pkg{xparse} package, Document command parser},
+ date = {2019-05-28},
+ language = {english},
+ pagetotal = 15}
+
+@Book{tellechea,
+ author = {Tellechea,Christian},
+ title = {Apprendre à programmer en \TeX},
+ date = {2014-09-21},
+ isbn = {978-2-9548602-0-6}}
+
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/erato-def.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/erato-def.tex
new file mode 100644
index 00000000000..26e3d94f864
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/erato-def.tex
@@ -0,0 +1,103 @@
+% Time-stamp: <2019-08-26 11:48:16 administrateur>
+% ReCréation : 2019-08-23T10:40:31+0200
+\ExplSyntaxOn
+
+\NewDocumentCommand{ \eratosthene } { m } {
+ \group_begin:
+ \int_new:N \l_ERA_diviseur_max_int
+ \int_set:Nn \l_ERA_diviseur_max_int { \fp_to_int:n { floor( sqrt ( #1 ))} }
+ \intarray_new:Nn \__ERA_qt_ia { #1 }
+ \intarray_new:Nn \__ERA_dv_ia { #1 }
+ % commande auxiliaire --------------------------------------------------------
+ \cs_set:Nn \ERA_marquer_de_a_par:nnn {
+ \int_set:Nn \l_tmpa_int { ##1 / ##3}
+
+ \int_step_inline:nnnn { ##1 } { ##3 } { ##2 } {
+ \int_compare:nNnT { \intarray_item:Nn \__ERA_dv_ia { ####1 } } = { 0 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ####1 } { ##3 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ####1 } { \l_tmpa_int } }
+ \int_incr:N \l_tmpa_int }
+ }
+ % ----------------------------------------------------------------------------
+ % marquer les pairs
+ \int_set:Nn \l_tmpa_int { 1 }
+
+ \int_step_inline:nnnn { 2 } { 2 } { #1 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ##1 } { 2 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ##1 } { \l_tmpa_int }
+ \int_incr:N \l_tmpa_int }
+
+ % marquer les impairs jusqu'à racine de #1
+ \int_set:Nn \l_tmpb_int { 3 }
+
+ \int_while_do:nNnn { \l_tmpb_int } < { \l_ERA_diviseur_max_int }
+ { \ERA_marquer_de_a_par:nnn { \l_tmpb_int } { #1 } { \l_tmpb_int }
+ \int_do_until:nNnn {\intarray_item:Nn \__ERA_dv_ia { \l_tmpb_int }} = { 0 }
+ { \int_add:Nn \l_tmpb_int { 2 } } }
+
+ % marquer les derniers impairs
+ \int_step_inline:nnnn { 3 } { 2 } { #1 }
+ { \int_compare:nNnT { \intarray_item:Nn \__ERA_dv_ia { ##1 } } = { 0 }
+ { \intarray_gset:Nnn \__ERA_dv_ia { ##1 } { ##1 }
+ \intarray_gset:Nnn \__ERA_qt_ia { ##1 } { 1 } } }
+
+ % nettoyage
+ \cs_undefine:N \l_ERA_diviseur_max_int
+ \group_end: }
+
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \ERA_presenter_nieme:n {
+ \group_begin:
+ \int_set:Nn \l_tmpa_int { \intarray_item:Nn \__ERA_qt_ia { #1 } }
+ \int_set:Nn \l_tmpb_int { \int_mod:nn { #1 } { 10 } }
+
+ \framebox[4em] {\strut \footnotesize
+ \int_compare:nNnTF { \l_tmpa_int } = { 1 }
+ {\textbf} % premier
+ {\textcolor{gray}} % composé
+ {\int_to_arabic:n { #1 }}
+ \int_compare:nNnT { \l_tmpa_int } > { 1 }
+ { \int_set:Nn \l_tmpa_int { \intarray_item:Nn \__ERA_dv_ia { #1 } }
+ ~\({}^{\langle \int_to_arabic:n { \l_tmpa_int } \rangle}\) } }
+ \kern-\fboxrule
+ % saut de paragraphe tous les 10
+ \int_compare:nNnT { \l_tmpb_int } = { 0 }
+ { \par \nointerlineskip \kern-\fboxrule \noindent }
+ \group_end: }
+
+\NewDocumentCommand { \EcrireCribleEratosthene } { m }{
+ \par \noindent \int_step_inline:nn { #1 } { \ERA_presenter_nieme:n {##1} } }
+
+
+\NewDocumentCommand { \EcrireDiviseurs } { s m } {
+ \group_begin:
+ \int_new:N \l_ERA_nv_qt_int % quotient
+ \int_set:Nn \l_ERA_nv_qt_int { #2 }
+ \int_new:N \l_ERA_vx_dv_int % ancient diviseur
+ \int_set:Nn \l_ERA_vx_dv_int { 0 }
+ \int_new:N \l_ERA_nv_dv_int % nouveau diviseur
+ \int_set:Nn \l_ERA_nv_dv_int { \intarray_item:Nn \__ERA_dv_ia { #2 } }
+
+ \IfBooleanF{#1}{\par}
+ \( \int_to_arabic:n { #2 } =
+ \int_while_do:nNnn { \l_ERA_nv_qt_int } > { 1 }
+ { \int_compare:nNnT { \l_ERA_vx_dv_int } > { 0 } { \times }
+ \int_to_arabic:n { \l_ERA_nv_dv_int }
+ \int_set:Nn \l_ERA_vx_dv_int { \l_ERA_nv_dv_int }
+ \int_set:Nn \l_ERA_nv_qt_int {
+ \intarray_item:Nn \__ERA_qt_ia { \l_ERA_nv_qt_int } }
+ \int_set:Nn \l_ERA_nv_dv_int {
+ \intarray_item:Nn \__ERA_dv_ia { \l_ERA_nv_qt_int } } }
+ \)
+ \cs_undefine:N \l_ERA_nv_qt_int
+ \cs_undefine:N \l_ERA_vx_dv_int
+ \cs_undefine:N \l_ERA_nv_dv_int
+ \group_end: }
+
+\ExplSyntaxOff
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/henel-def.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/henel-def.tex
new file mode 100644
index 00000000000..0beae24a670
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/henel-def.tex
@@ -0,0 +1,66 @@
+% Time-stamp: <2019-08-07 10:59:31 administrateur>
+% Création : 2019-05-20T11:51:49+0200
+\ExplSyntaxOn
+
+\cs_new:Nn \__yh_ecrire_nombre:n { \(\np{\int_to_arabic:n{ #1 }}\) }
+
+\cs_new:Nn \yh_impair_est_premier:nT {
+ \bool_set_true:N \yh_continue_bool
+ \bool_set_true:N \yh_est_premier_bool
+ \int_set:Nn \l_tmpa_int {1}
+ % FIN INITIALISATION
+ \bool_do_while:Nn \yh_continue_bool { % BOUCLE `TANTQUE'
+ % INCRÉMENTATION
+ \int_add:Nn \l_tmpa_int { 2 }
+ \bool_if:nTF {
+ % TEST de divisibilité
+ \int_compare_p:nNn { \int_mod:nn {#1} { \l_tmpa_int } } = { 0 }
+ } { % SI VRAI
+ \bool_set_false:N \yh_continue_bool
+ \bool_gset_false:N \yh_est_premier_bool
+ } { % SI FAUX
+ \int_compare:nNnT { \l_tmpa_int * \l_tmpa_int } > { #1 }
+ { \bool_set_false:N \yh_continue_bool }
+ } } % FIN DU SI ET FIN DE LA BOUCLE
+ \bool_if:nT {\yh_est_premier_bool} {#2} }
+
+\cs_new:Nn \yh_ecrire_separateur:n { }
+
+\cs_new:Nn \yh_ecrire_si_premier:n {
+ \yh_impair_est_premier:nT { #1 }
+ { \yh_ecrire_separateur:n { #1 }
+ \__yh_ecrire_nombre:n { #1 } } }
+
+\NewDocumentCommand { \ListePremiers } { m } {
+ \group_begin:
+ % INITIALISATION
+ \int_new:N \l_compteur_int
+ \int_new:N \l_nombre_requis
+ \int_set:Nn \l_compteur_int { 2 }
+ \int_set:Nn \l_nombre_requis { #1 }
+ \cs_set:Nn \yh_ecrire_separateur:n {
+ \int_compare:nNnTF { ##1 } < { \l_nombre_requis - 1} {,~} {~et~} }
+ % LES DEUX PREMIERS NOMBRES PREMIERS NE SONT PAS CALCULÉS
+ \__yh_ecrire_nombre:n {2}
+ \yh_ecrire_separateur:n {1}
+ \__yh_ecrire_nombre:n {3}
+ % PRÉPARATION DE LA BOUCLE, \l_tmpb_int EST LE CANDIDAT À TESTER
+ \int_set:Nn \l_tmpb_int { 3 }
+ % BOUCLE `TANT QUE'
+ \int_while_do:nNnn { \l_compteur_int } < { \l_nombre_requis } {
+ \int_add:Nn \l_tmpb_int { 2 }
+ \yh_impair_est_premier:nT { \l_tmpb_int }
+ { \yh_ecrire_separateur:n { \l_compteur_int }
+ \__yh_ecrire_nombre:n{ \l_tmpb_int }
+ \int_incr:N \l_compteur_int } }
+ % ON FAIT LE MÉNAGE AVANT DE SORTIR
+ \cs_undefine:N \l_compteur_int
+ \cs_undefine:N \l_nombre_requis
+ \group_end: }
+
+\ExplSyntaxOff
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
new file mode 100644
index 00000000000..097279d8fe9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/kaprekar-def.tex
@@ -0,0 +1,81 @@
+% Time-stamp: <2019-08-28 11:48:38 administrateur>
+% ReCréation : 2019-08-26T12:32:29+0200
+\ExplSyntaxOn
+\seq_new:N \kaprun_seq
+\seq_new:N \kaprekar_seq
+\int_new:N \l_tmpc_int
+
+
+\cs_new:Nn \KAP_int_to_seq:NN {
+ \int_set:Nn \l_tmpa_int { #1 }
+ \int_do_until:nNnn { \l_tmpa_int } = { 0 }
+ { \int_set:Nn \l_tmpb_int { \int_mod:nn { \l_tmpa_int } { 10 } }
+ \seq_put_left:NV #2 \l_tmpb_int
+ \int_set:Nn \l_tmpa_int
+ { \int_div_truncate:nn { \l_tmpa_int - \l_tmpb_int } { 10 } } } }
+
+\cs_new:Nn \KAP_seq_to_int:NN {
+ \seq_pop_right:NNT #1 \l_tmpa_tl
+ { \int_set:Nn #2 { \l_tmpa_tl }
+ \bool_do_until:nn { \seq_if_empty_p:N #1 }
+ { \seq_pop_right:NNT #1 \l_tmpa_tl
+ \int_set:Nn #2 { 10 * #2 + \l_tmpa_tl } } } }
+
+\cs_new:Nn \KAP_remplir_seq:Nn {
+ \int_while_do:nNnn { \seq_count:N #1 } < { #2 }
+ { \seq_put_left:Nn #1 { 0 } } }
+
+\cs_new:Nn \KAP_ranger_seq:N {
+ \seq_sort:Nn #1
+ { \int_compare:nNnTF { ##1 } > { ##2 }
+ { \sort_return_swapped: }
+ { \sort_return_same: } } }
+
+\cs_new:Nn \KAP_suivant:nNN {
+ \KAP_int_to_seq:NN #2 \kaprun_seq
+ \KAP_remplir_seq:Nn \kaprun_seq { #1 }
+ \KAP_ranger_seq:N \kaprun_seq
+
+ \seq_set_eq:NN \kaprdx_seq \kaprun_seq
+ \seq_reverse:N \kaprdx_seq
+
+ \KAP_seq_to_int:NN \kaprdx_seq \l_tmpa_int
+ \KAP_seq_to_int:NN \kaprun_seq \l_tmpb_int
+ \int_set:Nn #3 { \l_tmpb_int - \l_tmpa_int } }
+
+\cs_new:Nn \KAP_ecrire_tous_les_suivants:nn {
+ \group_begin:
+ \bool_set_true:N \l_tmpa_bool
+ \seq_clear:N \kaprekar_seq
+ \int_set:Nn \l_tmpc_int { #2 }
+ \seq_put_right:NV \kaprekar_seq \l_tmpc_int
+ \KAP_suivant:nNN {#1} \l_tmpc_int \l_tmpc_int
+ \seq_if_in:NVT \kaprekar_seq \l_tmpc_int {\bool_set_false:N \l_tmpa_bool}
+ \bool_while_do:nn { \l_tmpa_bool }
+ { \seq_put_right:NV \kaprekar_seq \l_tmpc_int
+ \KAP_suivant:nNN {#1} \l_tmpc_int \l_tmpc_int
+ \seq_if_in:NVT \kaprekar_seq \l_tmpc_int { \bool_set_false:N \l_tmpa_bool } }
+ % \seq_show:N \kaprekar_seq
+ % \seq_use:Nnnn \kaprekar_seq {~et~} {,~} {~et~}\par{}
+ \int_set:Nn \l_tmpa_int { \seq_count:N \kaprekar_seq }
+ \seq_map_inline:Nn \kaprekar_seq
+ { \( \np{##1} \)
+ \int_decr:N \l_tmpa_int
+ \int_case:nnF { \l_tmpa_int }
+ {
+ { 1 } {~et~}
+ { 0 } { }
+ }
+ {~;~}
+ }
+ \group_end: }
+
+\NewDocumentCommand{\Kaprekar}{ O{4} m }{
+ \KAP_ecrire_tous_les_suivants:nn { #1 } { #2 } }
+
+\ExplSyntaxOff
+%%% Local Variables:
+%%% coding: utf-8
+%%% mode: latex
+%%% TeX-master: "../dun19expl3"
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/knuth-def.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/knuth-def.tex
new file mode 100644
index 00000000000..34c771501e1
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/codes/knuth-def.tex
@@ -0,0 +1,20 @@
+\newif\ifprime \newif\ifunknown
+\newcount\n \newcount\p
+\newcount\d \newcount\a
+
+\def \primes#1{2,~3\n=#1 \advance \n by-2 \p=5
+ \loop \ifnum \n>0 \printifprime \advance \p by2 \repeat}
+
+\def \printp{, \ifnum \n=1 and~\fi
+ \number \p \advance \n by -1 }
+
+\def \printifprime{\testprimality \ifprime\printp\fi}
+
+\def \testprimality{{\d=3 \global \primetrue
+ \loop \trialdivision \ifunknown \advance \d by2 \repeat}}
+
+\def \trialdivision{\a=\p \divide \a by\d
+ \ifnum \a>\d \unknowntrue \else \unknownfalse \fi
+ \multiply \a by\d \ifnum \a=\p \global \primefalse \unknownfalse \fi}
+
+\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19ecrireprem.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19ecrireprem.tex
new file mode 100644
index 00000000000..cff913ae230
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19ecrireprem.tex
@@ -0,0 +1,400 @@
+% Time-stamp: <2019-09-24 10:47:32 administrateur>
+% Création : 2019-08-24T14:29:55+0200
+\section{Rappel}
+\label{sec:rappel}
+
+Je commence par redonner le code de Donald E. \textsc{Knuth} mais je
+laisse le lecteur rechercher l'article précité de Denis \textsc{Roegel}
+pour y trouver toutes les explications nécessaires.
+
+\VerbatimInput[frame=lines, framesep=0.75\baselineskip,
+label={\textsc{Knuth} \textemdash{} \emph{définitions}},
+labelposition=topline]{./codes/knuth-def.tex}
+
+L'appel |\primes{15}| permet d'obtenir
+\og \primes{15}\fg.
+
+\section{Version avec \Expliii}
+\label{sec:versionexpl3}
+
+
+Commençons par quelques remarques: comme le code est écrit dans un
+fichier \texttt{.tex} \TO et non dans un \gls{module} \TF je dois
+commencer par enclencher la syntaxe propre à \Expliii{}, ce que je
+fais dès la première ligne qui n'est pas un commentaire à usage
+interne \TO d'où le décalage de numéro \TF dans le premier fragment
+ci-dessous:
+%
+\Fragment{3}{5}{./codes/henel-def}
+
+\subsection{Une macro privée pour écrire les nombres}
+\label{sec:macro+ecrire+entier}
+
+Sur la ligne~\(5\), on lit la définition d'une macro \emph{interne}
+\CAD d'une macro qui n'a pas vocation à être appelée directement dans
+un document rédigé par l'utilisateur final. On y voit déjà quelques
+différences avec du code \LaTeXe{} que je vais préciser maintenant:
+\begin{itemize}
+\item les caractères |_| et~|:| sont promus au rang de lettres mais
+ par l'arobase~|@| cher aux programmeurs en~\LaTeXe{};
+
+\item les espaces du code ne donneront pas d'espace dans le
+ document. Voilà qui soulage grandement le programmeur puisque
+ disparait la phase de recherche des \TdSTrad{blancs
+ inopportuns}{spurious blanks}.
+\end{itemize}
+
+Autre remarque, d'ordre typographique, la présentation que j'adopte
+dans ce document \TO pour des raisons de place\TF n'est pas la
+présentation recommandée par l'équipe du projet \LaTeX3. On devrait
+plutôt, en effet, adopter la présentation qui suit\index{présentation
+ du code}:
+%
+\begin{Verbatim}[frame=lines, framesep=0.75\baselineskip]
+\cs_new:Nn \__yh_ecrire_nombre:n
+ {
+ \(\np{\int_to_arabic:n{ #1 }}\)
+ }
+\end{Verbatim}
+%
+dont on m'accordera, j'espère, qu'elle occupe plus d'espace.
+
+La commande que je définis s'appelle
+\Macro{__yh_ecrire_nombre:n}. Ce nom comporte plusieurs parties:
+\begin{enumerate}
+
+\item les \og |__|\fg initiaux signalent que cette commande est
+ \emph{privée} \CAD que son usage est réservée au \gls{module} \TO
+ ici le simple fichier contenant le code\TF et n'est pas
+ nécessairement documentée. Le programmeur ne s'engage à rien sur
+ cette commande et un utilisateur du \gls{module} ne doit pas
+ s'attendre à ce que le comportement de cette commande reste stable
+ au fil des versions ni même à ce qu'elle soit toujours
+ disponible. Il ne s'agit ici que d'une \textsb{convention} car
+ \TeX{} est resté ce qu'il est et la gestion des espaces de noms
+ n'est pas implémentée\footnote{L'équipe des développeurs de
+ \Expliii{} nous dit, dans \autocite[p.~1]{expl3progr} que celà
+ pourrait se faire mais avec un surcoût prohibitif.};
+
+\item \og |yh|\fg remplace ici ce qui est \TO dans un \gls{module}\TF
+ le nom du \gls{module} ou, à tout le moins, une chaine de caractères
+ réservée pour ce \gls{module};
+
+\item vient le nom explicite de la commande: \og |ecrire_nombre|\fg
+ dans lequel le souligné~\og |_|\fg sert de séparateur de mots;
+
+\item suivi du caractère~\og |:|\fg qui introduit la \gls{signature}
+ de la commande qui est, ici, \og |n|\fg. Cela nous indique que la
+ commande est une \gls{fonction} \TO c'est le vocabulaire défini par le
+ projet \LaTeX3\TF qui attend un seul argument fourni entre
+ accolades.
+\end{enumerate}
+
+La fonction \Macro{cs_new:Nn} utilise la \gls{signature} de la
+commande qui suit pour déterminer le nombre et le type des arguments
+que demande cette commande. Elle vérifie que la commande n'est pas
+déjà définie et produit une erreur si c'est le cas. De plus, elle
+définit la commande de manière globale \TO penser à \Macro{gdef} avec
+les pouvoirs de \Macro{newcommand}\TF.
+
+Elle possède plusieurs variantes dont, \PX{}, \Macro{cs_new:cn} qui
+attend comme premier argument le \emph{nom} de la commande plutôt que
+la commande elle-même. J'aurais obtenu le même résultat avec:
+%
+\begin{Verbatim}[frame=lines, framesep=0.75\baselineskip]
+\cs_new:cn { __yh_ecrire_nombre:n } { \(\np{\int_to_arabic:n{ #1 }}\) }
+\end{Verbatim}
+%
+code que je livre compacté.
+
+Le 2\ieme argument de \Macro{cs_new:Nn} doit être fourni entre
+accolades, c'est la définition de la commande. Ici j'utilise
+\Macro{np} de l'extension \Pkg{numprint} en mode mathématique en
+ligne \TO à l'aide du bien connu couple |\(| et~|\)| \TF afin
+d'obtenir \og \(\np{3257}\)\fg au lieu de \og \(3257\)\fg.
+
+La \gls{fonction} \Macro{int_to_arabic:n} appartient au \gls{module}
+\Mdl{int}, partie du noyau de \LaTeX3, qui regroupe les commandes
+traitant les \glspl{entier}. Elle prend un argument dont elle fournit
+la représentation en chiffres \emph{arabes}.
+
+\subsection{Commande vérifiant qu'un entier impair est premier}
+\label{sec:macro+impair+premier}
+
+La commande \Macro{yh_impair_est_premier:nT} ne se déclare pas comme
+privée, dans un \gls{module} elle devrait avoir une interface et une
+sortie stable et être documentée car son nom ne commence pas par~|__|
+mais ça aurait pu être le cas.
+
+\(2\) étant le seul nombre pair premier, la question de la primarité
+ne se pose vraiment que pour les entiers impairs. Je pourrai donc
+n'essayer que des diviseurs impairs.
+
+La \gls{signature} de cette \gls{fonction}, \CAD |nT|, nous indique
+qu'elle attend deux arguments entre accolades, que le 1\ier sera un
+test qui renverra soit~\VRAI{} soit~\FAUX{} et que, \emph{dans le seul
+ cas} où le test est~\VRAI{}, le code contenu dans la 2\ieme paire
+d'accolades sera considéré.
+
+Regardons le code:
+%
+\Fragment{7}{25}{./codes/henel-def}
+
+Dans la partie d'initialisation \TO lignes~\(8\) à~\(10\)\TF, je crée
+deux \glspl{booleen} \TO \Macro{yh_continue_bool} et
+\Macro{yh_est_premier_bool}\TF à l'aide de la \gls{fonction}
+\Macro{bool_set_true:N} qui, dans le même temps, leur donne la
+valeur~\VRAI.
+
+Les \glspl{fonction} dont le nom contient |set| définissent les
+commandes sans vérification et, à moins que le nom contienne |gset|
+\TO |g| comme \og global\fg\TF, elles créent ces commandes
+\emph{localement} \CAD{} dans le groupe où a lieu la définition.
+
+Ici, contrairement à ma devise\footnote{À savoir: \og ceinture et
+ bretelles\fg.}, je coure le risque que ces deux \glspl{booleen}
+existent déjà, risque dont je pense qu'il est faible. On verra plus
+bas ce que j'aurais pu faire pour sécuriser la définition.
+
+Ces deux \glspl{booleen} ne sont pas des \glspl{fonction} mais des
+\glspl{variable} \CAD{} des macros \TO au sens de \TeX{}\TF dont le
+seul objet est de contenir une valeur et non pas de \emph{faire}
+quelque chose. C'est pour cela que leurs noms n'ont pas de
+\gls{signature} et ne se termine pas par~|:| qui signalerait une
+\gls{fonction} sans argument.
+
+Dernière étape de l'initialisation, avec \Macro{int_set:Nn} je donne
+à la variable entière \textbf{l}ocale temporaire \Macro{l_tmpa_int}
+la valeur~\(1\). Plusieurs \glspl{module} du noyau de \LaTeX3
+fournissent deux variables locales dont les noms comportent |tmpa|
+et~|tmpb| respectivement et deux variables \textbf{g}lobales \TO avec
+les noms équivalents\TF.
+
+Suivant la convention générale qui veut que le nom d'une
+\gls{variable} se termine par son type \TO c'est le cas des deux
+\glspl{booleen} que j'ai définis\TF, les variables temporaires
+fournies par un \gls{module} du noyau ont une finale qui donne le type
+comme \Macro{l_tmpa_int}. Cependant, contrairement à cette même
+convention de nommage, les variables temporaires n'ont pas, en tête de
+nom, le nom du module. On aura voulu éviter quelque chose comme
+\Macro*{int_l_tmpa_int} dont on peut penser que c'est légèrement
+redondant.
+
+En ligne~\(12\), je commence une boucle \TANTQUE avec
+\Macro{bool_do_while:Nn} qui attend un premier argument constitué d'un
+seul lexème \TO ici \Macro{yh_continue_bool} qui est~\VRAI à l'entrée
+dans la boucle\TF et un deuxième argument entre accolades: le corps de
+la boucle.
+
+Le corps de cette boucle commence avec l'accolade ouvrante du bout de
+la ligne~\(12\) et s'achève avec la 2\ieme accolade fermante de la
+ligne~\(24\).
+
+Je commence par ajouter~\(2\) à la valeur courante de
+\Macro{l_tmpa_int} à l'aide de la \gls{fonction} \Macro{int_add:Nn};
+\Macro{l_tmpa_int} est ici le candidat diviseur.
+
+\Macro{bool_if:nTF} est une forme de~\SIALORSSINON: on a bien les deux
+branches de l'alternative puisque la signature se termine en~|TF|. Il
+s'agit de savoir si le candidat est bien un diviseur de l'entier
+représenté par~|#2|. Pour ce faire, j'utilise la \gls{fonction}
+\Macro{int_compare_p:nNn} dont le 2\ieme argument est un opérateur de
+comparaison \CAD |>|, |<| ou~|=|. Le 3\ieme argument est
+simplement~\(0\). Le premier, lui, est le reste de la division de~|#2|
+par \Macro{l_tmpa_int} que l'on obtient à l'aide de la \gls{fonction}
+\Macro{int_mod:nn}.
+
+Si le reste est nul, on exécute le code du 2\ieme argument de
+\Macro{bool_if:nTF}. On positionne les deux \glspl{booleen} à~\FAUX{}
+puisque |#2|, divisible par \Macro{l_tmpa_int}, n'est pas premier et
+qu'il n'est donc pas nécessaire de reprendre la boucle.
+
+Si le reste n'est pas nul, je compare l'entier~|#2| et le carré du
+candidat \TO on peut utiliser les opérateurs \emph{classiques}
+d'opérations: |+|, |-|, |*|, |/| car, derrière ce code, c'est le
+mécanisme de la macro \Macro{numexpr} de \hologo{eTeX} qui est à
+l'œuvre\TF. Si le carré est plus grand, c'est que |#2|~est premier et
+qu'il est temps de s'arrêter d'où les valeurs données aux deux
+\glspl{booleen}. Le 3\ieme argument du \Macro{bool_if:nTF} s'arrête
+avec la 1\iere accolade fermante de la ligne~\(24\).
+
+À la sortie de la boucle, si |#2| n'est pas premier il n'y a rien à
+faire, s'il est premier, on le retourne. Cela est accompli à l'aide
+de la \gls{fonction} \Macro{bool_if:nT} qui réalise un saut
+conditionnel \SIALORS.
+
+\subsubsection{Compléments}
+\label{sec:complementbouclesaut}
+
+Outre les deux \glspl{fonction} \Macro{bool_if:nTF} et
+\Macro{bool_if:nT}, \Expliii fournit également la \gls{fonction}
+\Macro{bool_if:nF} qui réalise un saut conditionnel \SISINON. Dans le
+manuel, on verra que la signature se termine
+par~\underline{\texttt{\emph{TF}}} pour signaler la présence des trois
+signatures~|T|, |F| et~|TF|.
+
+Par ailleurs, \Expliii fournit essentiellement quatre boucles:
+\begin{itemize}
+\item \Macro{bool_do_while:Nn}, déjà rencontrée. C'est un \TANTQUE
+ dont le corps est exécuté puis le test effectué \CAD qu'en toutes
+ circonstances, le corps est exécuté au moins une fois;
+
+\item \Macro{bool_do_until:Nn}, qui inverse le sens du test. C'est un
+ \JUSQUA dont le corps est exécuté au moins une fois;\label{booldountilNn}
+
+\item \Macro{bool_while_do:Nn}, \TANTQUE qui commence par le
+ test. Il se peut donc que le corps ne soit pas exécuté;
+
+\item \Macro{bool_until_do:Nn}, \JUSQUA commençant par le
+ test.
+\end{itemize}
+
+Ces quatres \glspl{fonction} ont des variantes de signatures~|cn|
+et~|nn|. Avec~|cn|, le 1\ier argument est le nom d'un \gls{booleen};
+avec~|n|, c'est une expression booléenne comme \TO exemple tiré de
+\autocite{l3interfaces}\TF
+%
+\begin{Verbatim}[frame=lines, framesep=0.75\baselineskip]
+\int_compare_p:n { 1 = 1 } &&
+ (
+ \int_compare_p:n { 2 = 3 } ||
+ \int_compare_p:n { 4 <= 4 } ||
+ \str_if_eq_p:nn { abc } { def }
+ ) &&
+! \int_compare_p:n { 2 = 4 }
+\end{Verbatim}
+%
+qui permet de mesurer la complexité acceptée.
+
+\subsection{Écrire la liste des nombres premiers}
+\label{sec:ecrirelistepremiers}
+
+Avant d'aborder la commande destinée à l'utilisateur \TO dont je dirai
+que c'est une \emph{commande de document}, comme le suggère le nom de
+la macro qui permettra de la créer tout à l'heure. L'extension
+\Pkg{xparse}~\autocite{xparse} parle de \English{document-level
+ command}\TF, je présente deux nouvelles macros utilitaires \TO
+qui elles aussi auraient pu être \emph{privées}\TF à savoir
+\Macro{yh_ecrire_separateur:n} et \Macro{yh_ecrire_si_premier:n}.
+
+\subsubsection{Deux macros utilitaires}
+
+\Fragment{27}{32}{./codes/henel-def}
+
+On voit dans le code ci-dessus, en ligne~\(27\), une pré-déclaration
+de \Macro{yh_ecrire_separateur:n} qui permet juste de s'assurer que ce
+nom est bien disponible.
+
+La macro suivante \Macro{yh_ecrire_si_premier:n} fait exactement ce
+que son nom suggère.
+
+Passons maintenant à la commande principale.
+
+\subsubsection{La commande de document}
+\label{sec:commandededocument}
+
+\Fragment{34}{59}{./codes/henel-def}
+
+Le code permettant de définir cette commande utilise l'extension
+\Pkg{xparse}~\autocite{xparse} et sa macro \Macro{NewDocumentCommand}.
+
+La syntaxe de déclaration d'argument change quelque peu! Le |m|,
+2\ieme argument de la macro, indique que l'on définit une commande
+requérant un unique argument obligatoire fourni entre accolades \TO
+|m| pour \English{mandatory} \CAD \og obligatoire\fg\TF.
+% Le 1\ier argument est attendu \textsb{entre accolades} \TO pas de
+% fantaisie à la \LaTeXe{}, du genre |\new|\0|com|\0|mand|
+% |\truc|\dots{}, ici\TF. FAUX!
+Le 1\ier argument est, comme on s'y attend, le nom de la commande
+créée.
+
+Le corps de la définition commence en ligne~\(35\) en ouvrant un
+groupe avec \Macro{group_begin:} et finit en ligne~\(59\) en fermant
+le groupe avec \Macro{group_end:}.
+
+\paragraph{Initialisation}
+
+Dans le groupe, je crée en lignes~\(37\) et~\(38\) deux \glspl{entier}
+locaux \TO d'où le |l| initial\TF mais qui seront créés
+\emph{globalement}, car il n'y a pas moyen de faire autrement. Leur
+caractère local est donc conventionnel mais signale que l'on ne doit
+pas s'attendre à ce qu'ils aient une valeur pertinente à l'extérieur
+du groupe.
+
+Pour respecter ce caractère local, je donne à ces \glspl{entier}, une
+valeur avec \Macro{int_set:Nn} et pas avec \Macro{int_gset:Nn} qui, de
+fait, n'est qu'un alias de la première, à moins que ce soit
+l'inverse\footnote{Je ne suis pas allé vérifier dans le
+ source~\autocite{source3}.}.
+
+Afin que, en sortie de commande, ces deux \glspl{entier} ne soient
+plus accessibles \TO \textsl{Vous êtes priés de laisser ces lieux dans l'état
+où vous auriez aimé les trouver en entrant!} \TF, je les annihile en
+lignes~\(57\) et~\(58\) à l'aide de \Macro{cs_undefine:N}.
+
+Il est temps à présent de définir, localement, avec \Macro{cs_set:Nn},
+la fonction \Macro{yh_ecrire_separateur:n}, ce que je fais en
+ligne~\(41\) et~\(42\). Comme la définition est faite dans une
+définition, on doit, bien entendu, recourir au doublement des
+\emph{dièses} d'où le |##1| dans le code de cette fonction.
+
+Dans les 1\ier et 3\ieme arguments de \Macro{int_compare:nNnTF} on
+peut écrire \emph{naturellement} des opérations sur les entiers. Je ne
+m'en prive pas.
+
+Les tildes~|~| que l'on voit apparaitre en ligne~\(42\) permettent de
+coder un espace qui apparaitra dans le document final. Par contre, il
+faut utiliser autre chose pour coder un espace insécable \TO la
+solution est la macro \Macro{nobreakspace}\TF.
+
+Je suis obligé de regarder si le séparateur est le dernier car, en
+français\footnote{Encore que, si j'ai bien compris un article récent
+ paru dans la presse britanique, même à Oxford on a fini par
+ renoncer à la virgule devant le \emph{and} précédant le dernier mot
+ d'une énumération. \textsl{Tout fout l'camp, ma bonne dame!}} il ne
+doit pas y avoir de virgule devant le \emph{et}.
+
+Comme l'annonce la ligne~\(43\) je ne calcule pas les deux premiers
+nombres premiers \TO Donald \textsc{Knuth} ne le faisait pas\TF et je
+ne vérifie pas que l'utilisateur demande au moins trois nombres \TO
+même remarque\TF; pour faire comme dans les livres sérieux, je laisse
+cette amélioration comme exercice pour le lecteur.
+
+Je prépare maintenant la boucle en initialisant, localement, le
+\emph{candidat premier} à~\(3\). On a déjà vu \Macro{int_set:Nn}.
+Et je rentre dans la boucle en ligne~\(50\) pour en sortir en
+ligne~\(55\). La seule nouveauté de ce fragment de code est l'emploi
+de \Macro{int_incr:N} qui permet d'incrémenter localement le compteur
+\Macro{l_compteur_int}.
+
+J'ai déjà expliqué ci-dessus l'utilité des lignes~\(57\) à~\(59\).
+
+\subsection{Utilisation de la commande de document}
+\label{sec:utilisation}
+
+Il me reste à utiliser cette commande dans ce document:
+|\ListePremiers{15}| produit \og \ListePremiers{15}\fg.
+
+Au passage, on notera avec satisfaction que |\primes| et
+|\ListePremiers| sont d'accord quant aux quinze premiers nombres
+premiers. C'est rassurant.
+
+\subsection{Quelques commentaires subjectifs}
+\label{sec:commentairessubjectifs}
+
+J'accorde sans peine qu'avec \Expliii le code est plus verbeux qu'avec
+\TeX{} tout seul. Je ne peux, cependant, m'empêcher de penser qu'il
+est plus clair. Pour ma part, le gain énorme que je vois en passant
+cette fois de \LaTeXe{} à \Expliii{} c'est le systématisme du nommage
+des macros, \glspl{fonction} ou \glspl{variable}. L'équipe du projet
+\LaTeX3 en fait d'ailleurs, elle-même, un ``\emph{argument de
+ vente}''.
+
+La puissance de \Macro{NewDocumentCommand} \TO que l'on a à peine
+effleuré ci-dessus\TF, à elle seule, peut inciter à passer à
+\Expliii{} pour créer ses propres macros.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19eratosthene.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19eratosthene.tex
new file mode 100644
index 00000000000..269efbcb462
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19eratosthene.tex
@@ -0,0 +1,234 @@
+% Time-stamp: <2019-09-24 10:45:10 administrateur>
+% Création : 2019-08-24T14:40:52+0200
+
+Il s'agit maintenant de fournir quelques commandes de document permettant de
+créer un exemple du crible d'Eratosthène comme ceci:
+\begin{center}\label{lecrible100}
+ \eratosthene{100}
+ \EcrireCribleEratosthene{100}
+\end{center}
+
+Ce sera l'occasion d'évoquer un des \og objets de haut niveau\fg
+fourni par \Expliii. Non, je ne parle pas de programmation objet!
+
+Une fois encore, je place le code dans un ``bête''
+fichier~\texttt{.tex} d'où les bien connus désormais
+\Macro{ExplSyntaxOn} et \Macro{ExplSyntaxOff} en début et fin de
+fichier.
+
+\section{Buts et algorithmes}
+\label{sec:butsalgo}
+
+L'objet dont il est question est appelé \English{intarray}. Il est
+global et, une fois créé, ne peut être détruit\footnote{C'est du moins
+ ce que je comprends à la lecture \TO que j'ai voulu rapide\TF du
+ source. En tout cas \Expliii ne fournit pas d'outil pour ce
+ faire.}. Dans certains langages on parle de \emph{vecteurs} mais il
+s'agit ici d'un vecteur d'\glspl{entier} (relatifs) et d'entiers
+seulement. Sa taille doit être donnée à la création et ne peut pas
+être changée.
+
+Avec la commande \Macro{eratosthene}, on crée deux \emph{vecteurs
+ d'entiers}. Le premier, \Macro{__ERA_dv_ia}, contient en \(n\)\ieme
+place le plus petit diviseur premier de~\(n\). Le second,
+\Macro{__ERA_qt_ia}, contient en \(n\)\ieme place le quotient de~\(n\)
+et de ce diviseur premier dont je viens de parler.
+
+La commande \Macro{eratosthene} ne prend qu'un argument, un entier
+naturel, qui est la taille des deux vecteurs sus-définis.
+
+Une fois les vecteurs créés, on pourra les utiliser pour écrire le
+crible d'Eratosthène comme vu précédemment ou, pour donner un autre
+exemple, obtenir la décomposition d'un entier comme produit de ses
+diviseurs premiers.
+
+\section{Création des vecteurs}
+\label{sec:creationvecteurs}
+
+\Fragment[commande \texttt{eratosthene},
+initialisation]{5}{10}{./codes/erato-def}
+
+En \Ligne{6} j'ouvre un groupe avec \Macro{group_begin+} qui sera
+fermé juste avant l'accolade fermante marquant la fin de la définition
+de \Macro{eratosthene} en \Ligne{45}.
+
+Dans ce groupe je vais créer un \emph{entier} avec
+\Macro{int_new+N}. Il est créé globalement mais je le détruis en
+\Ligne{44} avec \Macro{cs_undefine+N}. Il ne survivra donc pas à la
+macro.
+
+Je crée également les deux vecteurs en lignes~\(9\) et~\(10\) à l'aide
+de \Macro{intarray_new+Nn} qui prend en 2\ieme argument la taille du
+vecteur qui est l'argument passé à \Macro{eratosthene}. Initialement
+ces vecteurs ne contiennent que des zéros.
+
+Les noms des vecteurs devraient se terminer par \texttt{_intarray}
+mais je me suis permis un raccourci en \texttt{_ia}. Leurs noms
+commencent avec le double souligné puisque ce sont des
+\glspl{variable} \emph{privées}. \texttt{ERA} est le sigle de ce
+pseudo-module.
+
+En \Ligne{8} je donne à la \gls{variable}
+\Macro{l_ERA_diviseur_max_int} la partie entière de la racine carrée
+de la taille des vecteurs \TO valeur donnée par~|#1|\TF en
+\emph{transtypant} le résultat de l'opération |floor(| |sqrt (| |#1|
+|))| qui est un \gls{flottant} en un \gls{entier}.
+
+\subsection{Une commande auxiliaire}
+
+Je crée maintenant, à l'intérieur de la définition de
+\Macro{eratosthene} la commande \Macro{ERA_marquer_de_a_par+nnn} que,
+de fait, je n'utiliserai qu'une fois, en \Ligne{33}, et dont, par
+conséquent, j'aurais pu faire l'économie, au risque d'embrouiller
+considérablement le code suivant.
+
+\Fragment[commande \texttt{eratosthene},
+auxiliaire]{12}{20}{./codes/erato-def}
+
+Je crée cette commande localement grâce à \Macro{cs_set+Nn}, elle ne
+survivra donc pas au groupe. Je commence, dans la définition de
+\Macro{ERA_marquer_de_a_par+nnn}, par donner comme valeur à la
+\gls{variable} \emph{locale} \Macro{l_tmpa_int} le quotient entier des
+1\ier et 3\ieme arguments de la commande.
+
+Puis, lignes~\(15\) à~\(19\), j'utilise \Macro{int_step_inline+nnnn}
+pour accomplir le travail. C'est une boucle \POUR. L'index \TO
+implicite et anonyme\TF parcourt les entiers en partant du premier
+argument de cette dernière macro jusqu'au troisième argument avec un
+pas donné par le deuxième. Le 4\ieme argument est le code \emph{en
+ ligne} dans lequel |#1| est l'indice de la boucle. Enfin, |#1|
+serait l'indice de la boucle si on utilisait directement la macro
+\Macro{int_step_inline+nnnn} au niveau du document. Ici comme je
+l'utilise dans une définition incluse elle-même dans une définition,
+je dois doubler les dièses deux fois d'où le |####1| que l'on voit
+dans le code.
+
+En \Ligne{19}, j'incrémente \Macro{l_tmpa_int}. De la \Ligne{16} à la
+\Ligne{18}, j'ai un test \SIALORS avec \Macro{int_compare+nNnT}:
+les actions des lignes~\(17\) et~\(18\) ne seront accomplies que s'il
+est vrai que la |####1|-ième composante du vecteur \Macro{__ERA_dv_ia}
+est nulle \CAD que ce nombre n'a pas encore été traité. Dans ce cas,
+je place la valeur du pas~|##3| \TO c'est le plus petit diviseur
+premier du nombre considéré\TF à la bonne place dans le vecteur des
+diviseurs et je place le quotient à la place idoine dans le vecteur
+des quotients. L'incrémentation faite en-dessous me dispense de
+calculer ce quotient à l'aide d'une division entière.
+
+Comme le nom l'indique la macro \Macro{intarray_gset+Nnn} réalise une
+affectation \textbf{g}lobale dans le vecteur donné en 1\ier argument. C'est
+bien ce que je veux. Le 2\ieme argument donne l'indice, le 3\ieme la
+valeur à y placer.
+
+\subsection{Traitement des entiers pairs}
+\label{sec:lespairs}
+
+Je retourne maintenant au niveau de la définition de la commande
+\Macro{eratosthene} et je commence par traiter les nombres pairs.
+
+\Fragment[commande \texttt{eratosthene},
+nombres pairs]{23}{28}{./codes/erato-def}
+
+À ce moment de l'action, les deux vecteurs ne contiennent que des
+zéros, cela nous dispense du test tel qu'il apparaît dans la macro
+auxiliaire vue ci-dessus. De plus, le premier quotient (\(2/2\)) est
+clairement~\(1\) d'où la \Ligne{23}.
+
+On retrouve ensuite \Macro{int_step_inline+nnnn} pour traiter les
+nombres pairs en partant de~\(2\), avec un pas de~\(2\), et en
+finissant à la taille des vecteurs~|#1|.
+
+\subsection{Traitement des entiers impairs}
+\label{sec:lesimpairs}
+
+Le traitement des entiers impairs se fera en deux étapes, la deuxième
+étant d'une simplicité déconcertante.
+
+\Fragment[commande \texttt{eratosthene},
+impairs]{31}{36}{./codes/erato-def}
+
+Nous avons déjà vu tout ce que j'utilise ici. On notera, lignes~\(35\)
+et~\(36\), la boucle permettant, en avançant de~\(2\) en~\(2\), de
+trouver le prochain nombre impair non traité avec
+\Macro{int_do_until+nNnn} analogue, pour réaliser une boucle sur les
+entiers, de \Macro{bool_do_until+Nn} présentée page~\pageref{booldountilNn}.
+
+La dernière boucle traite les nombres impairs qui n'ont pas encore été
+vus. On pourrait améliorer la chose en commençant avec le premier
+impair non-vu, une fois encore je laisse ça en exercice!
+
+\Fragment[commande \texttt{eratosthene}]{39}{42}{./codes/erato-def}
+
+\section{Deux exemples d'utilisation}
+\label{sec:utilisationcrible}
+
+Les deux vecteurs ayant été créés, on peut les utiliser. Je donne deux
+exemples: l'écriture du \og crible\fg, l'écriture d'un nombre comme
+produit de ses facteurs premiers \TO version améliorable\TF.
+
+\subsection{Écriture du crible}
+\label{sec:ecriturecrible}
+
+Je présente maintenant la commande permettant de créer le tableau
+présenté en page~\pageref{lecrible100}.
+
+\Fragment[écriture du crible, commande de
+document]{69}{70}{./codes/erato-def}
+
+L'unique argument de \Macro{EcrireCribleEratosthene} doit être un
+entier positif plus petit que la taille des deux vecteurs créés
+auparavant sinon on aura une erreur d'accès aux vecteurs dû à un
+indice hors bornes.
+
+Bien entendu, cette commande se contente de refiler le boulot à la
+commande interne \Macro{ERA_presenter_nieme+n} par l'intermédiaire de
+la boucle \Macro{int_step_inline+nn}.
+
+Soulevons le capot.
+
+\Fragment[écriture du crible, commande interne]{50}{67}{./codes/erato-def}
+
+Pour la création du tableau, je copie servilement le code que fourni
+Christian \textsc{Tellechea} dans~\autocite{tellechea}. J'utilise
+quand même la macro \Macro{framebox} fournie par \LaTeXe{} car
+personne n'est obligé de réinventer la roue chaque matin!
+
+\subsection{Décomposition d'un nombre en facteurs premiers}
+\label{sec:facteurspremiers}
+
+Regardons à présent la commande permettant d'obtenir:
+\EcrireDiviseurs{78} \qquad \EcrireDiviseurs*{75} \qquad
+\EcrireDiviseurs*{64}
+\par\noindent
+avec le code
+\par\noindent
+|\EcrireDiviseurs{78}| |\qquad| |\EcrireDiviseurs*{75}| |\qquad| |\EcrireDiviseurs*{64}|.
+
+Voici le code:
+\Fragment[facteurs premiers]{73}{96}{./codes/erato-def}
+
+Comme on l'aura remarqué, la commande \Macro{EcrireDiviseurs} admet
+une variante étoilée. On l'obtient facilement avec
+\Macro{NewDocumentCommand} en donnant comme descriptif de 1\ier
+argument le~|s| que l'on voit en \Ligne{73}.
+
+Avec \Macro{IfBooleanF} de la \Ligne{82}, on ne place un saut de
+paragraphe \TO avec \Macro{par}\TF que s'il n'y a \textsb{pas}
+d'étoile.
+
+Pour réagir à la présence ou l'absence d'un lexème \TO une étoile~|*|
+avec le descripteur d'argument~|s|, n'importe quel lexème avec~|t| \TF
+on dispose également de \Macro{IfBooleanT} et de \Macro{IfBooleanTF}.
+
+On retrouve les mêmes techniques de création d'\glspl{entier} dans un
+groupe et leur destruction en sortie du corps de la définition de la
+commande. J'évite les entiers de brouillon fournis par \Expliii{} car
+je préfère, pour ne pas me perdre, des noms plus explicites. De toute
+façon, j'ai besoin d'au moins trois entiers locaux. On devrait pouvoir
+écrire la décomposition de \(75\) sous la forme \(75=3\times5^{2}\) à
+l'aide d'un \gls{entier} supplémentaire. Là encore, l'exercice etc.
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19intro.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19intro.tex
new file mode 100644
index 00000000000..c9f84b41b55
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19intro.tex
@@ -0,0 +1,25 @@
+% Time-stamp: <2020-03-21 12:02:52 administrateur>
+% Création : 2019-08-24T14:27:10+0200
+\section{Introduction}
+\label{sec:introduction}
+
+À l'occasion du stage de Dunkerque 2019, j'ai eu envie, pour présenter
+\Expliii{}, de revenir sur un code donné par \textsc{Knuth} dans le
+\TeX book et que Denis \textsc{Roegel} avait décortiqué dans
+l'article \og Anatomie d’une macro\fg paru dans les \emph{Cahiers
+ Gutenberg}, \no 31 (1998), p. 19-28.
+
+Cette macro, bien évidemment écrite en \TeX{}, calcule les
+\(n\)~nombres premiers pour \(n\)~entier supérieur à~\(3\).
+
+J'ai décidé de réécrire une macro produisant le même résultat à l'aide
+de \Expliii{} pour utiliser le code comme base de mon exposé. Une fois
+lancé, j'ai écrit d'autres petits morceaux de code pour présenter
+quelques fonctionalités du langage que le premier exemple ne m'avait
+pas permis d'exposer. C'est tout cela que je vais présenter dans ce
+qui suit.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19kaprekar.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19kaprekar.tex
new file mode 100644
index 00000000000..ad374490a4e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dk19kaprekar.tex
@@ -0,0 +1,244 @@
+% Time-stamp: <2019-09-22 16:32:18 administrateur>
+% Création : 2019-08-26T12:37:33+0200
+
+\section{Suites de \textsc{Kaprekar}}
+\label{sec:suiteskaprekar}
+
+Une suite de \textsc{Kaprekar} est définie par la donnée d'un nombre
+entier, p.~ex. \(125\), d'une base \TO je prendrai systématiquement et
+uniquement~\(10\) comme base de l'écriture des nombres entiers\TF et
+d'un nombre~\(N\) de chiffres que j'appellerai la \emph{taille} du
+nombre. On obtient un terme~\(u\sb{n+1}\) à partir du terme
+précédent~\(u\sb{n}\) en appliquant l'algorithme suivant:
+\begin{enumerate}\label{algokap}
+\item on écrit \(u\sb{n}\) avec \(N\) chiffres dans la base choisie
+ quitte à compléter avec des zéros;
+\item on range les \(N\) chiffres ainsi obtenus dans l'ordre
+ décroissant pour obtenir \(v\sb{n}\);
+\item on range les \(N\) chiffres dans l'ordre croissant pour obtenir
+ \(w\sb{n}\);
+\item enfin, \(u\sb{n+1} = v\sb{n} - w\sb{n}\).
+\end{enumerate}
+
+Une telle suite est évidemment finie. La commande que nous allons
+détailler s'arrête sur le dernier nombre déjà obtenu.
+
+En voici deux exemples.
+
+On obtient \og \Kaprekar{125}\fg avec |\Kaprekar{125}| qui, par
+défaut, travaille avec \(N=4\), et \og \Kaprekar[6]{125}\fg pour
+lequel on a pris \(N=6\).
+
+L'objet qui va nous servir à créer ces suites est la \gls{sequence}
+\TO dont le sigle est \texttt{seq} \TF que fournit l'extension
+\Pkg{l3seq}.
+
+
+\section{Le code}
+\label{sec:kaprekarcode}
+
+Je rappelle que tout le code est placé entre \Macro{ExplSyntaxOn}
+et \Macro{ExplSyntaxOff} pour les raisons déjà exposées.
+
+La commande de document est \Macro{Kaprekar} dont voici le code.
+
+\Fragment[Kaprekar, commande de
+document]{73}{74}{./codes/kaprekar-def}
+
+On y retrouve l'habituelle \Macro{NewDocumentCommand} mais un nouveau
+descripteur d'argument, à savoir |O{4}|: le premier argument est
+optionnel et sa valeur par défaut est~\(4\). Si on veut en fournir une
+autre, on le placera entre crochet comme d'habitude.
+
+La commande n'est, de fait et à part le truc de l'argument optionnel,
+qu'un alias de \Macro{KAP_ecrire_tous_les_suivants+nn} que je vais
+maintenant détailler. Mais commençons par la phase d'initialisation.
+
+\subsection{Initialisation}
+\label{sec:kaprinit}
+
+\Fragment[Kaprekar, initialisation]{4}{6}{./codes/kaprekar-def}
+
+Avec \Macro{seq_new+N} je crée deux \glspl{sequence}: \Macro{kaprun_seq}
+et \Macro{kaprekar_seq}. La première \gls{variable} a vocation à
+recevoir la suite des chiffres du nombre traité. La seconde contiendra
+la suite de \textsc{Kaprekar}.
+
+Je crée ensuite un \gls{entier} \emph{local} en suivant le modèle
+de l'extension \Pkg{int}.
+
+\subsection{De l'entier à la suite et retour}
+\label{sec:entiersuiteretour}
+
+J'ai besoin de commandes internes \TO qui pourraient être privées\TF
+pour \emph{découper} un entier en la suite de ses chiffres et pour
+créer un entier à partir d'une suite de chiffres. Le fait de
+travailler en base fixée \TO et en base~\(10\) qui plus est\TF
+facilite largement le travail. Là encore, si le cœur vous en dit,
+exercice!
+
+\Fragment[Kaprekar, de l'entier à la
+suite]{9}{15}{./codes/kaprekar-def}
+
+Le premier argument de \Macro{KAP_int_to_seq+NN} est le nombre à
+découper, le second la suite qui contiendra ses chiffres. Dans les
+deux cas, la commande attend une \gls{variable}.
+
+Nous avons déjà rencontré la majorité des commandes utilisées dans la
+définition. Avec \Macro{seq_put_left+NV} je place en première place
+\TO à gauche \InEnglish{left}\TF la valeur contenue dans la
+\gls{variable} \Macro{l_tmpb_int}. Le~|V| dans la signature assure que
+la commande \Macro{l_tmpb_int} sera traitée de telle sorte que l'on
+récupère bien son contenu.
+
+Dans la boucle, on trouve \Macro{int_div_truncate+nn} qui permet de
+récupérer le quotient entier de~|#1| par~|#2|.
+
+\medbreak
+
+\Fragment[Kaprekar, de la suite à
+l'entier]{17}{22}{./codes/kaprekar-def}
+
+Cette commande transforme une suite de chiffres en un \gls{entier}. On
+trouve, en~\Ligne{18}, la commande \Macro{seq_pop_right+NNT} qui
+prend la valeur la plus à droite dans la suite passée en 1\ier
+argument pour la placer dans la \gls{variable} donnée en 2\ieme
+argument. Si cette opération est possible \TO \CAD si la pile n'était
+pas vide\TF le 3\ieme argument est développé.
+
+La suite, après cette opération, est amputée de sa dernière
+valeur. J'utilise ici la suite comme une pile \TO c'est le fameux
+\textsc{lifo} pour \English{Last In First Out} \TF. \Expliii{} fournit
+aussi des commandes qui permettent d'utiliser la suite comme une queue
+\TO \textsc{fifo} pour \English{First In First Out}\TF.
+
+Dans la boucle, j'utilise \Macro{seq_if_empty_p+N} qui prend la valeur
+\VRAI{} si la \gls{sequence} est vide. Tant qu'elle n'est pas vide, je
+multiplie par~\(10\) la valeur conservée dans la \gls{variable} donnée
+en~|#2| et j'y ajoute la dernière valeur extraite de la pile.
+
+De fait, le chiffre le plus à droite est celui de \emph{poids} le plus
+grand.
+
+\medbreak
+
+\Fragment[Kaprekar, remplissage]{24}{26}{./codes/kaprekar-def}
+
+Cette commande assure que la suite contient le bon nombre de chiffres
+en ajoutant des zéros si nécessaire. La seule nouveauté est
+\Macro{seq_count+N} qui donne le nombre de valeurs contenues dans la
+suite.
+
+\medbreak
+
+\Fragment[Kaprekar, tri]{28}{32}{./codes/kaprekar-def}
+
+\Macro{seq_sort+Nn} trie la \gls{sequence} donnée \TO par son \og
+nom\fg\TF en 1\ier argument à l'aide du code donnée en 2\ieme
+argument. Ici, j'échange |##1| et |##2| si le premier est strictement
+supérieur au second, autrement dit, je trie les éléments de la suite du
+plus petit au plus grand. Les commandes \Macro{sort_return_swapped+}
+\TO retourner en échangeant\TF et \Macro{sort_return_same+} \TO
+retourner le même\TF assurent le tri.
+
+\medbreak
+
+\Fragment[Kaprekar, calcul du terme
+suivant]{34}{44}{./codes/kaprekar-def}
+
+Le terme courant est donné par une \gls{variable} comme 2\ieme
+argument, le 1\ier est la taille, le 3\ieme doit être la
+\gls{variable} qui recevra le terme suivant.
+
+\Macro{kaprun_seq} prend en~\Ligne{35} les chiffres du terme courant
+puis on remplit puis on range dans l'ordre croissant.
+
+Avec \Macro{seq_set_eq:NN}, en~\Ligne{39}, on crée, localement et sans
+contrôle, \Macro{kaprdx_seq} comme copie de \Macro{kaprun_seq} puis,
+en ligne suivante, on la range dans l'ordre décroissant.
+
+Les trois dernières lignes traduisent l'algorithme de \textsc{Kaprekar}
+tel qu'exposé en~\pageref{algokap}.
+
+Il ne reste plus qu'à utiliser tout cela.
+
+\subsection{Commande interne}
+
+\Fragment[Kaprekar, commande interne]{46}{71}{./codes/kaprekar-def}
+
+La commande \Macro{KAP_ecrire_tous_les_suivants+nn} prend la valeur
+de~\(N\) \TO la \emph{taille}\TF en premier argument et le premier
+terme de la suite comme 2\ieme argument.
+
+Une fois de plus, tout se passe dans un groupe, ouvert en~\Ligne{47}
+et fermé en~\Ligne{71}.
+
+J'utilise la \gls{variable} booléenne locale \Macro{l_tmpa_bool}
+fournie par \Expliii{}. Je lui donne la valeur \VRAI{}
+en~\Ligne{48}. Quand elle prendra la valeur \FAUX{} il sera temps de
+sortir de la boucle \TO lignes~\(54\) à~\(57\)\TF qui remplit la
+\gls{sequence} \Macro{kaprekar_seq}.
+
+Avec \Macro{seq_clear+N}, en~\Ligne{49}, je vide la suite
+\Macro{kaprekar_seq}.
+
+En \Ligne{51} je place le 1\ier terme de la suite dans la
+\gls{sequence} \Macro{kaprekar_seq}. Cette fois je remplis par la
+droite avec \Macro{seq_put_right+NV} \TO j'utilise la suite comme une
+\emph{queue}\TF.
+
+C'est parce que j'ai besoin que cette valeur soit placée dans la
+\gls{variable} \Macro{l_tmpc_int} que j'utilise
+\Macro{seq_put_right+NV}. S'il suffisait de placer la valeur
+directement dans la suite, on pourrait utiliser
+\Macro{seq_put_right+Nn} avec le code
+\vspace{-\baselineskip}
+\begin{Verbatim}[frame=lines,framesep=0.75\baselineskip]
+\seq_put_right:Nn \kaprekar_seq {#2}
+\end{Verbatim}
+
+Je place dans \Macro{l_tmpc_int} le terme suivant calculé avec
+\Macro{KAP_suivant+nNN} en~\Ligne{52} et si ce terme est déjà présent
+dans la suite \TO cas ou \(u\sb{1} = u\sb{0}\)\TF je donne à
+\Macro{l_tmpa_bool} la valeur \FAUX. C'est \Macro{seq_if_in+NVT} qui
+permet de vérifier que la valeur~|#2| est présente dans la suite~|#1|
+et de développer, si besoin le code placé dans~|#3|.
+
+À la fin de la \Ligne{57} la suite a été créée.
+
+J'ai laissé, commentée, la \Ligne{58} que j'ai utilisée à titre de
+diagnostic: la commande \Macro{seq_show+N} permet d'écrire le
+contenu de la \gls{sequence} dans le fichier~|.log|.
+
+À la ligne suivante, la commande \Macro{seq_use+Nnnn} permet d'écrire
+le contenu de la \gls{sequence}, donnée en 1\ier argument. Les trois
+arguments suivants donnent, dans l'ordre, le séparateur du premier et
+deuxième élément quand il n'y a que deux éléments; ce qui précède
+chaque élément, sauf le dernier, quand il y plus de deux éléments;
+enfin, ce qui sépare l'avant-dernier du dernier élément. Comme je veux
+que les nombres soient écrits à l'aide de \Macro{np} je ne peux pas me
+contenter de cette ligne d'où ce qui suit.
+
+Après avoir placé dans un compteur le nombre d'éléments de la suite,
+j'utilise \Macro{seq_map_inline+Nn} pour appliquer à chaque élément de
+la suite passée en 1\ier argument le code contenu dans le 2\ieme
+argument \TO \Ligne{62} à~\(70\)\TF.
+
+Dans ce code, j'écris l'élément en en donnant la valeur à \Macro{np}
+en mode mathématique en ligne puis je décrémente le compteur à l'aide
+de \Macro{int_decr+N}.
+
+Avec \Macro{int_case+nnF}, je sélectionne le séparateur à placer: si
+le compteur vaut~\(1\) j'écris \og |~et~|\fg, s'il vaut~\(0\), je n'écris
+rien \TO \Ligne{67}\TF et, dans tous les autres cas \TO \Ligne{69}\TF,
+j'écris \og |~;~|\fg.
+
+% \subsection{\texorpdfstring{\Kaprekar[2]{12}}{kaprekar 2-12}}
+
+% \Fragment[Kaprekar]{4}{45}{./codes/kaprekar-def}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.pdf b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.pdf
new file mode 100644
index 00000000000..f8e8f8d91fb
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.tex
new file mode 100644
index 00000000000..1a81dda9072
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/dun19expl3.tex
@@ -0,0 +1,152 @@
+% Time-stamp: <2020-03-21 18:06:46 administrateur>
+% Création : 2019-08-04T17:42:03+0200
+
+\documentclass[french]{article}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper]{geometry}
+\usepackage{xspace}
+\usepackage{array}
+\usepackage{csquotes}
+\usepackage[expert,oldstyle]{fourier}
+\usepackage[CharPoCal=false,suite=false,taupe=false]{tdsfrmath}
+
+\usepackage{fancybox}
+\usepackage{etaremune}
+
+\usepackage{fvextra}
+\usepackage{xparse}
+\usepackage{dun19codepres}
+
+\usepackage[xindy]{imakeidx}
+\makeindex
+
+\usepackage[main=french]{babel}
+\usepackage[np,autolanguage]{numprint}
+
+\usepackage[hidelinks]{hyperref} % options à définir !
+
+\usepackage[backend=biber]{biblatex}
+\addbibresource{./bibliographie/dun19expl3.bib}
+
+\usepackage[xindy,nogroupskip]{glossaries-extra}
+\newglossary[klg]{cs}{kls}{klo}{Commandes, fonctions et variables}
+\makeglossaries
+
+\loadglsentries{./glosaires/termes-techniques}
+\loadglsentries{./glosaires/les-macros}
+\loadglsentries{./glosaires/erato-supp-glo}
+\loadglsentries{./glosaires/kaprekar-sup-glo}
+
+\title{%
+ Quelques aspects de la programmation avec
+ \Expliii{}\footnote{Version 1.2}}
+\author{Yvon \textsc{Henel}}
+
+\begin{document}
+\input{./codes/knuth-def}
+\input{./codes/henel-def}
+\input{./codes/erato-def}
+\input{./codes/kaprekar-def}
+
+\makeunderlineletter
+\DefineShortVerb{\|}
+\maketitle{}
+
+\begin{abstract}
+ Quelques aspects de la programmation avec \Expliii{} présentés au
+ travers de code calculant sur les entiers: écriture des \(n\)
+ premiers entiers premiers; crible d'\textsc{Ératosthène}; suites de
+ \textsc{Kaprekar}.
+\end{abstract}
+
+\vspace{4\baselineskip}
+
+\begin{center}
+ \shadowbox{%
+ \begin{minipage}{0.8\linewidth}
+ \centering \large \textbf{Remerciements}\par
+
+ \vspace{\baselineskip}
+
+ \normalsize
+ Je remercie François \textsc{Pantigny} pour sa lecture attentive
+ de la version~1.
+
+ \vspace*{\baselineskip}
+ \end{minipage}}
+\end{center}
+
+
+\newpage{}
+
+\tableofcontents{}
+
+\newpage{}
+
+\input{dk19intro}
+
+\part{Écrire les premiers nombres premiers}
+\label{part:premierspremiers}
+
+\input{dk19ecrireprem}
+
+\part{Le crible d'Eratosthène}
+\label{part:cribleerato}
+
+\input{dk19eratosthene}
+
+\part{Les suites de Kaprekar}
+\label{part:kaprekar}
+
+\input{dk19kaprekar}
+
+\newpage{}
+
+\part{Annexes}
+\label{part:annexes}
+
+\printbibliography{}
+
+\printindex{}
+
+\printglossaries
+
+\newpage{}
+
+\section*{Remarques sur le document et historique des corrections}
+\label{sec:historique}
+
+\subsection*{Remarques}
+\label{sec:remarques}
+
+Je tente \TO comme chacun sait il y a souvent loin de la coupe aux
+lèvres\TF de respecter l'orthographe dite \emph{nouvelle}. On ne verra
+donc plus d'accent circonflexe sur certains i! Il m'arrive, dans mon
+ardeur de jeune révolutionnaire, de priver dudit accent certains o ou
+autres a. On devra à quelque lectrice ou lecteur leur rétablissement.
+
+Je tiens à remercier, d'avance, tout ceux qui prendront la peine de me
+signaler erreur, omission, impropriété, obscurité et autres
+maladresses.
+
+\subsection*{Historique des corrections}
+\label{sec:histocorr}
+
+\begin{etaremune}
+\item
+ Seule une correction orthographique motive la version~\(1.2\),
+ première version déposée sur le CTAN.
+
+\item
+ La version~\(1.1\) intègre les corrections proposées par François
+ \textsc{Pantigny} \TO courriel du 21 septembre 2019\TF même si je
+ persiste à dépouiller les i de leurs si surannés chapeaux.
+\end{etaremune}
+\end{document}
+
+%%% Local Variables:
+%%% coding: utf-8
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
+
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty
new file mode 100644
index 00000000000..988999d60bd
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/extensions/dun19codepres.sty
@@ -0,0 +1,321 @@
+% Time-stamp: <2019-08-28 08:02:26 administrateur>
+% Création : 2019-08-05T10:18:51+0200
+%%%%% ---------------------------------------------------------------------
+%%%%% © Yvon Henel, 2019
+%%%%% ---------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\RequirePackage{l3keys2e,xparse}
+\ProvidesExplPackage
+{dun19codepres} {2019/08/05} {1} {pour article dun19expl3}
+
+\RequirePackage{xspace}
+\RequirePackage{hologo}
+\RequirePackage[dvipsnames]{xcolor}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% outils
+%%%%% ---------------------------------------------------------------------
+
+\def\makeunderlineletter{\catcode`\_=11\relax}
+
+\makeatletter
+
+\newcommand\TdSfrCP@CODE{\texttt}
+
+\let\CODE=\TdSfrCP@CODE
+
+\newcommand\TdSfrCP@ENCODE{\ttfamily}
+
+\newcommand\TdSfrCP@PRESENTATIONMETA{\TdSfrCP@ENCODE\itshape}
+
+\DeclareRobustCommand\0{\discretionary{}{}{}}
+
+\DeclareRobustCommand\1{\0\TdSfrCP@CODE{\_}\0}
+
+\DeclareRobustCommand\2{\TdSfrCP@CODE{:}\0}
+
+\DeclareRobustCommand\3{\discretionary{.}{}{.}}
+
+\DeclareRobustCommand\6{\0\TdSfrCP@CODE{@}\0}
+
+\DeclareRobustCommand\7{\0\TdSfrCP@CODE{/}\0}
+
+\DeclareRobustCommand\9{%
+ \hspace{0pt plus 1pt}\discretionary{}{}{}\hspace{0pt plus 1pt}}
+
+\DeclareRobustCommand\8{\0\TdSfrCP@CODE{-}\0}
+
+\newcommand{\Meta}[1]{%
+ \ensuremath{\langle}{\TdSfrCP@PRESENTATIONMETA #1\/}\ensuremath{\rangle}}
+
+\let\M=\Meta
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Présentation extensions, etc.
+%%%%% ---------------------------------------------------------------------
+
+\newcommand{\Pkg}[1]{\texttt{#1}}
+
+\newcommand{\Mdl}[1]{\textsf{#1}}
+
+\newcommand*{\Expliii}{Expl3\xspace}
+
+\newcommand*{\TdS}{TdS\xspace}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Présentation macros et arguments
+%%%%% ---------------------------------------------------------------------
+
+\DeclareRobustCommand\Cs[1]{\TdSfrCP@CODE{\char`\\#1}}
+
+\newcommand\Accolades[1]{\TdSfrCP@CODE{\{\0#1\}}}
+
+\newcommand{\Crochets}[1]{\TdSfrCP@CODE{[\0#1]}}
+
+\newcommand{\Parentheses}[1]{\TdSfrCP@CODE{(\0#1)}}
+
+\newcommand{\Inegalites}[1]{\TdSfrCP@CODE{\string<\0#1\string>}}
+
+\DeclareRobustCommand\MargAux[1]{\TdSfrCP@CODE{\{\0\M{#1}\}}}
+\DeclareRobustCommand\OargAux[1]{\TdSfrCP@CODE{[\0\M{#1}]}}
+\DeclareRobustCommand\ParargAux[1]{\TdSfrCP@CODE{(\0\M{#1})}}
+\DeclareRobustCommand\INEGargAux[1]{\TdSfrCP@CODE{\string<\0\M{#1}\string>}}
+
+\newcounter{codefragment}[section]
+
+\makeatother
+
+% -------------------------------------------------------------------------
+% Déclaration et présentation des macros et de leurs arguments
+% -------------------------------------------------------------------------
+
+\str_new:N \__CMD_vedette_str
+
+\NewDocumentCommand{\MacroPresentation}{ m }{
+ \textcolor{MidnightBlue}{\Cs{#1}}
+}
+
+\NewDocumentCommand{\FausseMacroPresentation}{ m }{
+ \textcolor{RedOrange}{\Cs{#1}}
+}
+
+\NewDocumentCommand{\Macro}{s o v}{
+ \IfBooleanTF{#1}
+ {\FausseMacroPresentation{#3}}
+ {
+ \str_set:Nn \__CMD_vedette_str {#3}
+ \str_replace_all:Nnn \__CMD_vedette_str {:} {+}
+ \gls{\str_use:N \__CMD_vedette_str}
+ }
+}
+
+
+\NewDocumentCommand{\Code}{s t+ v}{
+ \IfBooleanTF{#1}
+ { \Crochets{#3} }
+ { \IfBooleanTF{#2}
+ { \Parentheses{#3} }
+ { \Accolades{#3} }
+ }
+}
+
+\NewDocumentCommand{\Marg}{ s }{
+ \IfBooleanTF{#1}
+ { \Accolades }
+ { \MargAux }
+}
+
+\NewDocumentCommand{\Oarg}{ s }{
+ \IfBooleanTF{#1}
+ { \Crochets }
+ { \OargAux }
+}
+
+\NewDocumentCommand{\Parg}{ s }{
+ \IfBooleanTF{#1}
+ { \Parentheses }
+ { \ParargAux }
+}
+
+\NewDocumentCommand{\Iarg}{ s }{
+ \IfBooleanTF{#1}
+ { \Inegalites }
+ { \INEGargAux }
+}
+
+\NewDocumentCommand{\SyntaxeMacro}{ s o }{
+ \IfBooleanF{#1}{\par}
+ \IfNoValueTF{#2}
+ { \SyntaxeMacro_Package_Courant }
+ { \SyntaxeMacro_Autre_Package {#2} }
+}
+
+\NewDocumentCommand{\SyntaxeMacro_Package_Courant}{ m m }
+{
+ \Macro{#1} \TraiterListeArguments{#2}
+}
+
+\NewDocumentCommand{\SyntaxeMacro_Autre_Package}{ m m m }
+{
+ \Macro[#1]{#2} \TraiterListeArguments{#3}
+}
+
+\NewDocumentCommand {\TraiterListeArguments}
+{ > { \SplitList{ , } } m } {
+ \ProcessList {#1} { \Traiter_un_argument }
+}
+
+\NewDocumentCommand {\Traiter_un_argument} { >{ \SplitArgument{1}{/} } m }
+{
+ \Traiter_un_argument_aux #1
+}
+
+\NewDocumentCommand {\Traiter_un_argument_aux} { m m }{
+ \use:c {#1arg}{#2}\9
+}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Termes techniques, etc.
+%%%%% ---------------------------------------------------------------------
+
+\NewDocumentCommand{\VRAI}{ }{ \textsc{vrai}\xspace }
+
+\NewDocumentCommand{\FAUX}{ }{ \textsc{faux}\xspace }
+
+\NewDocumentCommand{\TANTQUE}{ }{
+ \index{tant~que}\index{boucle}\index{boucle!tant~que}
+ \textsc{tant~que}\xspace
+}
+
+\NewDocumentCommand{\JUSQUA}{}{
+ \index{jusqu'à}\index{boucle}\index{boucle!jusqu'à}
+ \textsc{jusqu'à}\xspace
+}
+
+\NewDocumentCommand{\POUR}{}{
+ \index{pour}\index{boucle}\index{boucle!pour}
+ \textsc{pour}\xspace
+}
+
+\NewDocumentCommand{\SIALORSSINON}{}{
+ \index{si}\index{saut}\index{si!si~alors~sinon}
+ \textsc{si}\dots{}~\textsc{alors}\dots{}~\textsc{sinon}\xspace
+}
+
+\NewDocumentCommand{\SIALORS}{}{
+ \index{si}\index{saut}\index{si!si~alors}
+ \textsc{si}\dots{}~\textsc{alors}\xspace
+}
+
+\NewDocumentCommand{\SISINON}{}{
+ \index{si}\index{saut}\index{si!si~sinon}
+ \textsc{si}\dots{}~\textsc{sinon}\xspace
+}
+
+\NewDocumentCommand{\Ligne}{m}{
+ ligne\nobreakspace\(#1\)
+}
+
+%%%%% ---------------------------------------------------------------------
+%%%%% Traduction, francisation
+%%%%% ---------------------------------------------------------------------
+
+%%% -----------------------------------------------------------------------
+%%% tirets ouvrant et fermant:
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \TDS_tiret: { \textemdash }
+
+\cs_new:Nn \TDS_tiret_espace_int: { \ }
+
+\NewDocumentCommand {\TO} { } {
+ \TDS_tiret: \TDS_tiret_espace_int: \ignorespaces }
+
+\NewDocumentCommand {\TF} {t.} {
+ \IfBooleanTF {#1} {
+ \string.} {
+ \unskip \TDS_tiret_espace_int: \TDS_tiret:\xspace}
+}
+
+%%% -----------------------------------------------------------------------
+%%% abbréviations: c'est-à-dire, par exemple,
+%%% -----------------------------------------------------------------------
+
+\cs_new:Nn \TDS_pex_abrev: { p.\nobreakspace ex.\xspace }
+
+\cs_new:Nn \TDS_Pex_abrev: { P.\nobreakspace ex.\xspace }
+
+\NewDocumentCommand {\PX} { s } {
+ \IfBooleanTF{#1}{\TDS_Pex_abrev:}{\TdS_PX_auxi}
+}
+
+\NewDocumentCommand {\TdS_PX_auxi} { t. } {
+ \IfBooleanTF{#1}{\TDS_pex_abrev:}{\TdS_PX_auxii}
+}
+
+\NewDocumentCommand {\TdS_PX_auxii} { t+ } {
+ \IfBooleanTF{#1}{par~exemple\xspace}{\TDS_pex_abrev:}
+}
+
+\NewDocumentCommand {\CAD} { t+ } {
+ \IfBooleanTF{#1}{c'est-\`a-dire}{c.-\`a-d.}\xspace
+}
+
+%%% -----------------------------------------------------------------------
+%%% traduction
+%%% -----------------------------------------------------------------------
+
+\NewDocumentCommand { \English } { m }{
+ \emph{\foreignlanguage{english}{#1}}
+}
+
+\NewDocumentCommand { \InEnglish } { m }{
+ \emph{\foreignlanguage{english}{#1}}
+}
+
+\NewDocumentCommand { \TdSTrad } { m m }{
+ \emph{#1}~\TO anglais~\InEnglish{#2}\TF
+}
+
+%%% -----------------------------------------------------------------------
+%%% notes et remarques
+%%% -----------------------------------------------------------------------
+
+\NewDocumentCommand { \NdT } { m }{
+ \footnote{NdTdS~:~#1}
+}
+
+\NewDocumentEnvironment { TdSrem } { }
+{
+ \par\sffamily\footnotesize
+}
+{
+ \par\bigbreak
+}
+
+\NewDocumentCommand{\Fragment}{O{\TdS{} \textemdash{} \emph{définitions}} m m m}
+{
+ \refstepcounter{codefragment}
+ \VerbatimInput[frame=lines,
+ framesep=0.75\baselineskip,
+ numbers=left,
+ firstline=#2,
+ lastline=#3,
+ label={[#1]fragment
+ \arabic{codefragment}},
+ ]{#4.tex}
+}
+
+% \NewDocumentCommand { \Macro } { s o v } {
+% \IfBooleanTF{#1}
+% {\textcolor{RedOrange}}
+% {\textcolor{MidnightBlue}}
+% {\CODE{#3}}
+% }
+
+% \NewDocumentCommand{\Macro}{s o v}{
+% \IfBooleanTF{#1}
+% {\FausseMacroPresentation{#3}}
+% {\gls{#3}}
+% }
+
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex
new file mode 100644
index 00000000000..b14e386180b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/erato-supp-glo.tex
@@ -0,0 +1,75 @@
+% Time-stamp: <2019-08-24 17:31:03 administrateur>
+% Création : 2019-08-24T16:24:29+0200
+\newglossaryentry{EcrireDiviseurs}{
+ type=cs,
+ name={\MacroPresentation{Ecri\0re\0Di\0vi\0seurs}},
+ description={PERSO}
+}
+
+\newglossaryentry{int_do_until+nNnn}{
+ type=cs,
+ name={\MacroPresentation{int\1do\1un\0til\2nNnn}},
+ description={}
+}
+
+\newglossaryentry{ERA_presenter_nieme+n}{
+ type=cs,
+ name={\MacroPresentation{ERA\1pre\0sen\0ter\1nieme\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{ERA_marquer_de_a_par+nnn}{
+ type=cs,
+ name={\MacroPresentation{ERA\1mar\0quer\1de\1a\1par\2nnn}},
+ description={PERSO}
+}
+
+\newglossaryentry{times}{
+ type=cs,
+ name={\MacroPresentation{ti\0mes}},
+ description={}
+}
+
+\newglossaryentry{__ERA_qt_ia}{
+ type=cs,
+ name={\MacroPresentation{\1\1ERA\1qt\1ia}},
+ description={PERSO}
+}
+
+\newglossaryentry{__ERA_dv_ia}{
+ type=cs,
+ name={\MacroPresentation{\1\1ERA\1dv\1ia}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_vx_dv_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1vx\1dv\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{eratosthene}{
+ type=cs,
+ name={\MacroPresentation{era\0to\0sthe\0ne}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_diviseur_max_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1di\0vi\0seur\1max\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_nv_qt_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1nv\1qt\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_ERA_nv_dv_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1nv\1dv\1int}},
+ description={PERSO}
+}
+
+
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex
new file mode 100644
index 00000000000..9a053376bda
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/kaprekar-sup-glo.tex
@@ -0,0 +1,229 @@
+% Time-stamp: <2019-08-28 15:59:41 administrateur>
+% Création : 2019-08-27T10:28:42+0200
+\newglossaryentry{seq_pop_right+NNT}{
+ type=cs,
+ name={\MacroPresentation{seq\1pop\1right\2NNT}},
+ description={e3}
+}
+
+\newglossaryentry{cs_new_protected+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1new\1pro\0tec\0ted\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{seq_reverse+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1re\0ver\0se\2N}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpa_tl}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpa\1tl}},
+ description={e3}
+}
+
+\newglossaryentry{seq_set_eq+NN}{
+ type=cs,
+ name={\MacroPresentation{seq\1set\1eq\2NN}},
+ description={e3}
+}
+
+\newglossaryentry{seq_map_inline+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1map\1in\0line\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpc_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpc\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_tmpa_bool}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpa\1bool}},
+ description={e3}
+}
+
+\newglossaryentry{seq_if_in+NVT}{
+ type=cs,
+ name={\MacroPresentation{seq\1if\1in\2NVT}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpd_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpd\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_sort+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1sort\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{KAP_suivant+nNN}{
+ type=cs,
+ name={\MacroPresentation{KAP\1sui\0vant\2nNN}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_new+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1new\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_while_do+nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1whi\0le\1do\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{sort_return_same+}{
+ type=cs,
+ name={\MacroPresentation{sort\1re\0turn\1same\2}},
+ description={e3}
+}
+
+\newglossaryentry{KAP_seq_to_int+NN}{
+ type=cs,
+ name={\MacroPresentation{KAP\1seq\1to\1int\2NN}},
+ description={PERSO}
+}
+
+\newglossaryentry{KAP_remplir_seq+Nn}{
+ type=cs,
+ name={\MacroPresentation{KAP\1rem\0plir\1seq\2Nn}},
+ description={PERSO}
+}
+
+\newglossaryentry{Kaprekar}{
+ type=cs,
+ name={\MacroPresentation{Ka\0pre\0kar}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_put_left+NV}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1left\2NV}},
+ description={e3}
+}
+
+\newglossaryentry{KAP_ranger_seq+N}{
+ type=cs,
+ name={\MacroPresentation{KAP\1ran\0ger\1seq\2N}},
+ description={PERSO}
+}
+
+\newglossaryentry{kaprdx_seq}{
+ type=cs,
+ name={\MacroPresentation{kaprdx\1seq}},
+ description={PERSO}
+}
+
+\newglossaryentry{KAP_ecrire_tous_les_suivants+nn}{
+ type=cs,
+ name={\MacroPresentation{KAP\1ecri\0re\1tous\1les\1sui\0vants\2nn}},
+ description={PERSO}
+}
+
+\newglossaryentry{int_div_truncate+nn}{
+ type=cs,
+ name={\MacroPresentation{int\1div\1trun\0ca\0te\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{kaprun_seq}{
+ type=cs,
+ name={\MacroPresentation{kaprun\1seq}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_put_right+NV}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1right\2NV}},
+ description={e3}
+}
+
+\newglossaryentry{seq_put_right+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1right\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{seq_put_left+Nn}{
+ type=cs,
+ name={\MacroPresentation{seq\1put\1left\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{seq_clear+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1clear\2N}},
+ description={e3}
+}
+
+\newglossaryentry{seq_if_empty_p+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1if\1em\0pty\1p\2N}},
+ description={e3}
+}
+
+\newglossaryentry{sort_return_swapped+}{
+ type=cs,
+ name={\MacroPresentation{sort\1re\0turn\1swap\0ped\2}},
+ description={e3}
+}
+
+\newglossaryentry{int_decr+N}{
+ type=cs,
+ name={\MacroPresentation{int\1decr\2N}},
+ description={e3}
+}
+
+\newglossaryentry{int_case+nnF}{
+ type=cs,
+ name={\MacroPresentation{int\1case\2nnF}},
+ description={e3}
+}
+
+\newglossaryentry{seq_count+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1count\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_do_until+nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1do\1un\0til\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{kaprekar_seq}{
+ type=cs,
+ name={\MacroPresentation{ka\0pre\0kar\1seq}},
+ description={PERSO}
+}
+
+\newglossaryentry{KAP_int_to_seq+NN}{
+ type=cs,
+ name={\MacroPresentation{KAP\1int\1to\1seq\2NN}},
+ description={PERSO}
+}
+
+\newglossaryentry{seq_show+N}{
+ type=cs,
+ name={\MacroPresentation{seq\1show\2N}},
+ description={e3}
+}
+
+\newglossaryentry{seq_use+Nnnn}{
+ type=cs,
+ name={\MacroPresentation{seq\1use\2Nnnn}},
+ description={e3}
+}
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/les-macros.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/les-macros.tex
new file mode 100644
index 00000000000..79a535ece11
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/les-macros.tex
@@ -0,0 +1,511 @@
+% Time-stamp: <2019-08-27 20:15:00 administrateur>
+% Création : 2019-08-06T09:32:09+0200
+\newglossaryentry{(}{
+ type=cs,
+ name={\MacroPresentation{(}},
+ description={l2e}
+}
+
+\newglossaryentry{)}{
+ type=cs,
+ name={\MacroPresentation{)}},
+ description={l2e}
+}
+
+\newglossaryentry{bool_do_while+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1do\1whi\0le\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{bool_do_until+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1do\1un\0til\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{bool_while_do+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1whi\0le\1do\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{bool_until_do+Nn}{
+ type=cs,
+ name={\MacroPresentation{bool\1un\0til\1do\2Nn}},
+ description={e3}
+}
+
+
+\newglossaryentry{bool_gset_false+N}{
+ type=cs,
+ name={\MacroPresentation{bool\1gset\1fal\0se\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_if+nT}{
+ type=cs,
+ name={\MacroPresentation{bool\1if\2nT}},
+ description={e3}
+}
+
+\newglossaryentry{bool_if+nF}{
+ type=cs,
+ name={\MacroPresentation{bool\1if\2nF}},
+ description={e3}
+}
+
+\newglossaryentry{bool_if+nTF}{
+ type=cs,
+ name={\MacroPresentation{bool\1if\2nTF}},
+ description={e3}
+}
+
+\newglossaryentry{bool_set_false+N}{
+ type=cs,
+ name={\MacroPresentation{bool\1set\1fal\0se\2N}},
+ description={e3}
+}
+
+\newglossaryentry{bool_set_true+N}{
+ type=cs,
+ name={\MacroPresentation{bool\1set\1true\2N}},
+ description={e3}
+}
+
+\newglossaryentry{cs_new+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1new\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{cs_new+cn}{
+ type=cs,
+ name={\MacroPresentation{cs\1new\2cn}},
+ description={e3}
+}
+
+
+\newglossaryentry{cs_set+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1set\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{cs_undefine+N}{
+ type=cs,
+ name={\MacroPresentation{cs\1un\0de\0fi\0ne\2N}},
+ description={e3}
+}
+
+\newglossaryentry{ExplSyntaxOff}{
+ type=cs,
+ name={\MacroPresentation{Exp\0lSyn\0tax\0Off}},
+ description={e3}
+}
+
+\newglossaryentry{ExplSyntaxOn}{
+ type=cs,
+ name={\MacroPresentation{Expl\0Syn\0tax\0On}},
+ description={e3}
+}
+
+\newglossaryentry{group_begin+}{
+ type=cs,
+ name={\MacroPresentation{group\1be\0gin\2}},
+ description={e3}
+}
+
+\newglossaryentry{group_end+}{
+ type=cs,
+ name={\MacroPresentation{group\1end\2}},
+ description={e3}
+}
+
+\newglossaryentry{int_add+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\1add\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{int_compare+nNnT}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\2nNnT}},
+ description={e3}
+}
+
+\newglossaryentry{int_compare+nNnTF}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\2nNnTF}},
+ description={e3}
+}
+
+\newglossaryentry{int_compare_p+nNn}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\1p\2nNn}},
+ description={e3}
+}
+
+\newglossaryentry{int_incr+N}{
+ type=cs,
+ name={\MacroPresentation{int\1incr\2N}},
+ description={e3}
+}
+
+\newglossaryentry{int_mod+nn}{
+ type=cs,
+ name={\MacroPresentation{int\1mod\2nn}},
+ description={e3}
+}
+
+\newglossaryentry{int_new+N}{
+ type=cs,
+ name={\MacroPresentation{int\1new\2N}},
+ description={e3}
+}
+
+\newglossaryentry{int_set+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\1set\2Nn}},
+ description={e3}
+}
+
+\newglossaryentry{int_gset+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\1gset\2Nn}},
+ description={e3}
+}
+
+
+\newglossaryentry{int_to_arabic+n}{
+ type=cs,
+ name={\MacroPresentation{int\1to\1a\0ra\0bic\2n}},
+ description={e3}
+}
+
+\newglossaryentry{int_while_do+nNnn}{
+ type=cs,
+ name={\MacroPresentation{int\1whi\0le\1do\2nNnn}},
+ description={e3}
+}
+
+\newglossaryentry{l_compteur_int}{
+ type=cs,
+ name={\MacroPresentation{l\1comp\0teur\1int}},
+ description={PERSO}
+}
+
+\newglossaryentry{ListePremiers}{
+ type=cs,
+ name={\MacroPresentation{ListePremiers}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_nombre_requis}{
+ type=cs,
+ name={\MacroPresentation{l\1nom\0bre\1re\0quis}},
+ description={PERSO}
+}
+
+\newglossaryentry{l_tmpa_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpa\1int}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpb_int}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpb\1int}},
+ description={e3}
+}
+
+\newglossaryentry{l_tmpb_int est le candidat à tester}{
+ type=cs,
+ name={\MacroPresentation{l\1tmpb\1int est le candidat à tester}},
+ description={PERSO}
+}
+
+\newglossaryentry{NewDocumentCommand}{
+ type=cs,
+ name={\MacroPresentation{New\0Do\0cu\0mentCom\0mand}},
+ description={xparse}
+}
+
+\newglossaryentry{np}{
+ type=cs,
+ name={\MacroPresentation{np}},
+ description={numprint}
+}
+
+\newglossaryentry{yh_continue_bool}{
+ type=cs,
+ name={\MacroPresentation{yh\1con\0ti\0nue\1bool}},
+ description={PERSO}
+}
+
+\newglossaryentry{__yh_ecrire_nombre+n}{
+ type=cs,
+ name={\MacroPresentation{\1\1yh\1ecri\0re\1nom\0bre\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_ecrire_separateur+n}{
+ type=cs,
+ name={\MacroPresentation{yh\1ecrire\1se\0pa\0ra\0teur\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_ecrire_si_premier+n}{
+ type=cs,
+ name={\MacroPresentation{yh\1ecrire\1si\1pre\0mier\2n}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_est_premier_bool}{
+ type=cs,
+ name={\MacroPresentation{yh\1est\1premier\1bool}},
+ description={PERSO}
+}
+
+\newglossaryentry{yh_impair_est_premier+nT}{
+ type=cs,
+ name={\MacroPresentation{yh\1impair\1est\1pre\0mier\2nT}},
+ description={PERSO}
+}
+
+\newglossaryentry{newcommand}{
+ type=cs,
+ name={\MacroPresentation{new\0com\0mand}},
+ description={L2e}
+}
+
+\newglossaryentry{gdef}{
+ type=cs,
+ name={\MacroPresentation{gdef}},
+ description={TK}
+}
+
+\newglossaryentry{numexpr}{
+ type=cs,
+ name={\MacroPresentation{num\0expr}},
+ description={eTeX}
+}
+
+%%%% macros supplémentaires de eratosthene
+
+\newglossaryentry{AppliquerCribleEratosthene}{
+ type=cs,
+ name={\MacroPresentation{Ap\0pli\0quer\0Cri\0ble\0Era\0to\0sthene}},
+ description={}
+}
+
+\newglossaryentry{cs_generate_variant+Nn}{
+ type=cs,
+ name={\MacroPresentation{cs\1ge\0ne\0ra\0te\1va\0riant\2Nn}},
+ description={el3}
+}
+
+\newglossaryentry{cs_gset_eq+cN}{
+ type=cs,
+ name={\MacroPresentation{cs\1gset\1eq\2cN}},
+ description={el3}
+}
+
+\newglossaryentry{cs_set_eq+Nc}{
+ type=cs,
+ name={\MacroPresentation{cs\1set\1eq\2Nc}},
+ description={el3}
+}
+
+\newglossaryentry{EcrireCribleEratosthene}{
+ type=cs,
+ name={\MacroPresentation{Ecri\0re\0Cri\0ble\0Era\0to\0sthene}},
+ description={}
+}
+
+\newglossaryentry{__ERA_ia}{
+ type=cs,
+ name={\MacroPresentation{\1\1ERA\1ia}},
+ description={}
+}
+
+\newglossaryentry{ERA_presenter_nieme+nn}{
+ type=cs,
+ name={\MacroPresentation{ERA\1pre\0sen\0ter\1nieme\2nn}},
+ description={}
+}
+
+\newglossaryentry{fboxrule}{
+ type=cs,
+ name={\MacroPresentation{fbox\0ru\0le}},
+ description={}
+}
+
+\newglossaryentry{footnotesize}{
+ type=cs,
+ name={\MacroPresentation{foot\0no\0te\0si\0ze}},
+ description={}
+}
+
+\newglossaryentry{fp_to_int+n}{
+ type=cs,
+ name={\MacroPresentation{fp\1to\1int\2n}},
+ description={el3}
+}
+
+\newglossaryentry{framebox}{
+ type=cs,
+ name={\MacroPresentation{fra\0me\0box}},
+ description={}
+}
+
+\newglossaryentry{intarray_count+c}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1count\2c}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_count+N}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1count\2N}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_gset+Nnn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1gset\2Nnn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_item+cn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1item\2cn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_item+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1item\2Nn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_new+cn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1new\2cn}},
+ description={el3}
+}
+
+\newglossaryentry{intarray_new+Nn}{
+ type=cs,
+ name={\MacroPresentation{int\0ar\0ray\1new\2Nn}},
+ description={el3}
+}
+
+\newglossaryentry{int_compare+nNnF}{
+ type=cs,
+ name={\MacroPresentation{int\1com\0pa\0re\2nNnF}},
+ description={el3}
+}
+
+\newglossaryentry{int_step_inline+nn}{
+ type=cs,
+ name={\MacroPresentation{int\1step\1in\0line\2nn}},
+ description={el3}
+}
+
+\newglossaryentry{int_step_inline+nnnn}{
+ type=cs,
+ name={\MacroPresentation{int\1step\1in\0line\2nnnn}},
+ description={el3}
+}
+
+\newglossaryentry{kern}{
+ type=cs,
+ name={\MacroPresentation{kern}},
+ description={}
+}
+
+\newglossaryentry{langle}{
+ type=cs,
+ name={\MacroPresentation{lan\0gle}},
+ description={}
+}
+
+\newglossaryentry{l_ERA_borne_int}{
+ type=cs,
+ name={\MacroPresentation{l\1ERA\1bor\0ne\1int}},
+ description={}
+}
+
+\newglossaryentry{noindent}{
+ type=cs,
+ name={\MacroPresentation{no\0in\0dent}},
+ description={}
+}
+
+\newglossaryentry{nointerlineskip}{
+ type=cs,
+ name={\MacroPresentation{no\0in\0ter\0li\0ne\0skip}},
+ description={}
+}
+
+\newglossaryentry{par}{
+ type=cs,
+ name={\MacroPresentation{par}},
+ description={}
+}
+
+\newglossaryentry{rangle}{
+ type=cs,
+ name={\MacroPresentation{ran\0gle}},
+ description={}
+}
+
+\newglossaryentry{strut}{
+ type=cs,
+ name={\MacroPresentation{strut}},
+ description={}
+}
+
+\newglossaryentry{textbf}{
+ type=cs,
+ name={\MacroPresentation{text\0bf}},
+ description={}
+}
+
+\newglossaryentry{textcolor}{
+ type=cs,
+ name={\MacroPresentation{text\0co\0lor}},
+ description={}
+}
+
+\newglossaryentry{IfBooleanF}{
+ type=cs,
+ name={\MacroPresentation{If\0Boo\0leanF}},
+ description={xparse}
+}
+
+\newglossaryentry{IfBooleanT}{
+ type=cs,
+ name={\MacroPresentation{If\0Boo\0leanT}},
+ description={xparse}
+}
+
+\newglossaryentry{IfBooleanTF}{
+ type=cs,
+ name={\MacroPresentation{If\0Boo\0leanTF}},
+ description={xparse}
+}
+
+\newglossaryentry{nobreakspace}{
+ type=cs,
+ name={\MacroPresentation{no\0break\0spa\0ce}},
+ description={e3}
+}
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3"
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex
new file mode 100644
index 00000000000..c570a56e627
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/glosaires/termes-techniques.tex
@@ -0,0 +1,73 @@
+% Time-stamp: <2019-08-28 11:50:49 administrateur>
+% Création : 2019-08-05T13:55:03+0200
+\newglossaryentry{signature}{%
+ name={signature},
+ first={\emph{signature}},
+ description={\InEnglish{signature}}
+}
+
+
+\newglossaryentry{module}{
+ name={module},
+ first={\emph{module}},
+ description={\InEnglish{module}}
+}
+
+\newglossaryentry{fonction}{
+ name={fonction},
+ first={\emph{fonction}},
+ description={\InEnglish{function}}
+}
+
+\newglossaryentry{extension}{
+ name={extension},
+ first={\emph{extension}},
+ description={\InEnglish{package}}
+}
+
+\newglossaryentry{entier}{
+ name={entier},
+ first={\emph{entier}},
+ firstplural={\emph{entiers}},
+ description={\CAD entier relatif, \InEnglish{integer}}
+}
+
+\newglossaryentry{booleen}{
+ name={booléen},
+ first={\emph{booléen}},
+ description={\InEnglish{boolean}}
+}
+
+\newglossaryentry{variable}{
+ name={variable},
+ first={\emph{variable}},
+ firstplural={\emph{variables}},
+ description={\InEnglish{variable}}
+}
+
+\newglossaryentry{flottant}{
+ name={flottant},
+ first={\emph{flottant} \TO pour \og nombre réel codé \emph{en virgule flottante}\fg\TF},
+ description={\InEnglish{floating point number}, nombre \emph{réel}
+ représenté en \emph{virgule flottante}}
+}
+
+\newglossaryentry{sequence}{%
+ name={\emph{sequence}},
+ plural={\emph{sequences}},
+ first={\emph{sequence}, en français \og suite\fg},
+ description={\InEnglish{sequence}, en français \og suite\fg}
+}
+
+\endinput
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "dun19expl3-macros"
+%%% End:
+
+
+\newglossaryentry{}{
+ name={},
+ first={\emph{}},
+ description={\InEnglish{}}
+}
diff --git a/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/latexmkrc b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/latexmkrc
new file mode 100644
index 00000000000..91e227978b8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/expose-expl3-dunkerque-2019/latexmkrc
@@ -0,0 +1,12 @@
+add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
+add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
+add_cus_dep('klo', 'kls', 0, 'run_makeglossaries');
+
+sub run_makeglossaries {
+ if ( $silent ) {
+ system "makeglossaries -q '$_[0]'";
+ }
+ else {
+ system "makeglossaries '$_[0]'";
+ };
+} \ No newline at end of file