Pythontex pour latex, Study Guides, Projects, Research of Computer science

Ce document permet la maîtrise de latex et l'implémentation de python dans latex

Typology: Study Guides, Projects, Research

2025/2026

Uploaded on 06/26/2026

joel-amah
joel-amah 🇹🇬

1 document

1 / 23

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
IREM
Lille
ArCSiN
PYTHON et L
A
T
EX
Comment générer des sujets aléatoirement à
l’aide du package pythontex?
Laurence LEFOLL - Jean-Marc DUQUE SN OY - Fabrice EU DES
Groupe ArCSiN IREM de Lille
Dernière version : 25 mars 2025
IREM
Lille
ArCSiN
U˜b˘u‹n˚tˇuffl, ”n`o˘tˇi`o“nffl ˛h˚u‹m`a‹n˚i¯sfi˚t´e, `o˘r˚i`gˇi‹n`a˚i˚r`e `d˚uffl S˚u`dffl `d`e ˜l„A˜fˇr˚i`qfi˚u`e, `qfi˚u˚iffl ¯p`o˘u˚r˚r`a˚i˚t `êˇtˇr`e ˚tˇr`a`d˚u˚i˚t´e ¯p`a˚rffl
« ¯j´e ¯sfi˚u˚i¯s `c´e `qfi˚u`e ¯j´e ¯sfi˚u˚i¯s `gˇr`â`c´e `àffl `c´e `qfi˚u`e ”n`o˘u¯s ¯sfi`o“m‹m`e˙s ˚t´o˘u¯s »
R`e´g´a˚r`d`eˇz ”vfleˇr¯s ˜l´e˙s `éˇt´o˘i˜l´e˙s `eˇt ¯p`a¯s ”vfleˇr¯s ”vˆo¸s ¯p˚i`e´d¯s. E˙sfi¯sfi`a‹y´eˇz `d`e `d`o“n‹n`eˇrffl ˚u‹nffl ¯sfi`e›n¯s `àffl `c´e `qfi˚u`e ”vˆo˘u¯s
”vˆo“y´eˇz, `eˇt `d`e›m`a‹n`d`eˇz-”vˆo˘u¯s `c´e `qfi˚u˚iffl ˜f´a˚i˚t `qfi˚u`e ˜l„˚u‹n˚i‹vfleˇr¯s `e›xˇi¯sfi˚t´e. S`o“y´eˇz `cˇu˚r˚i`eˇu‹x.
Stephen Hawking , physicien théoricien et cosmologiste.
Journées académiques de l’IREM de Lille 1/23 27 mars 2025
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Partial preview of the text

Download Pythontex pour latex and more Study Guides, Projects, Research Computer science in PDF only on Docsity!

IREM

Lille

ArCSiN

PYTHON et LATEX

Comment générer des sujets aléatoirement à

l’aide du package pythontex?

Laurence LE FOLL - Jean-Marc DUQUESNOY - Fabrice EUDES Groupe ArCSiN — IREM de Lille Dernière version : 25 mars 2025

IREM

Lille

ArCSiN

U˜b˘u‹n˚tˇuffl, ”no˘tˇio“nffl ˛h˚u‹ma‹n˚i¯sfi˚t´e,o˘r˚igˇi‹na˚i˚red˚uffl S˚udfflde ˜l„A˜fˇr˚iqfi˚ue,qfi˚u˚iffl ¯po˘u˚r˚ra˚i˚t êˇtˇre ˚tˇrad˚u˚i˚t´e ¯p`a˚rffl

« ¯j´e ¯sfi˚u˚i¯s c´eqfi˚ue ¯j´e ¯sfi˚u˚i¯sgˇrâc´e àfflc´e qfi˚ue ” no˘u¯s ¯sfio“m‹m`e˙s ˚t´o˘u¯s »

Re´g´a˚rdeˇz ” vfleˇr¯s ˜l´e˙séˇt´o˘i˜l´e˙s eˇt ¯pa¯s ” vfleˇr¯s ” vˆo¸s ¯p˚ie´d¯s. E˙sfi¯sfia‹y´eˇz de do“n‹neˇrffl ˚u‹nffl ¯sfie›n¯s àfflc´e qfi˚ue ” vˆo˘u¯s

”vˆo“y´eˇz, eˇtde›ma‹ndeˇz-”vˆo˘u¯s c´eqfi˚u˚iffl ˜f´a˚i˚t qfi˚ue ˜l„˚u‹n˚i‹vfleˇr¯s e›xˇi¯sfi˚t´e. So“y´eˇz cˇu˚r˚ieˇu‹x.

Stephen Hawking , physicien théoricien et cosmologiste.

Table des matières

  • 1 Introduction
  • 2 Quelles compilations?
  • 3 Quelques balises pythontex utiles
    • 3.1 On peut afficher une console « virtuelle »
    • 3.2 Afficher un script Python non interprété à la compilation
    • 3.3 Compiler du code Python sans afficher le script associé
    • 3.4 Compiler du code Python qui génère et affiche un graphique
  • 4 Insérer un tableau de valeurs
    • 4.1 Tableau de valeurs associées à une fonction
    • 4.2 Remplir une table de vérité (programme BTS SIO)
  • 5 Utiliser la librairie sympy
    • 5.1 Développement, factorisation
    • 5.2 Dérivée et primitive d’une fonction, intégrale d’une fonction sur un intervalle
  • 6 Aide aux développements
  • 7 Une liste de dérivées et de primitives
  • 8 Nombres premiers, décomposition en facteurs premiers, PGCD
  • 9 Triangle de Pascal
  • 10 Générer plusieurs sujets
    • 10.1 Le meilleur arrive!
    • 10.2 Exemple 1 : Méthode de Héron pour approcher la racine carrée d’un nombre
    • 10.3 Exemple 2 : Un sujet du DNB de
    • 10.4 Exemple 3 : Une évaluation en BTS SIO sur la numération et la logique
    • 10.5 exemple 4 : Un exercice type BAC sur les probabilités conditionnelles et la loi binomiale

On remarque que la librairie sympy est installée. Exemple 2 : la librairie pyspark La console de gauche indique que cette librairie n’est pas installée. On ouvre une deuxième console et la ligne de

commande python -m pip install va alors installer la librairie.

3 Quelques balises pythontex utiles

3.1 On peut afficher une console « virtuelle »

On utilise la balise pyconsole.

Voici un exemple d’utilisation qui compile quelques commandes PYTHON, on insère dans un source LATEX le script qui suit :

Code LATEX

\begin {pyconsole}

from math import *

x=

y=

z=x+y

x,y,z=y,x,3*z

x

y

z

L=[3,1,8,9,2]

L.append(99)

L

z==

a=

b=

c=5sin(a)+2cos(b)

print(c)

for i in range(5):

print(2iexp(-i))

\end {pyconsole}

Ce qui donne à l’exécution :

Sortie LATEX

>>> from math import *

>>> x=

>>> y=

>>> z=x+y

>>> x,y,z=y,x,3*z

>>> x

>>> y

>>> z

>>> L=[3,1,8,9,2]

>>> L.append(99)

>>> L

[3, 1, 8, 9, 2, 99]

>>> z==

False

>>> a=

>>> b=

>>> c=5sin(a)+2cos(b)

>>> print(c)

>>> for i in range(5):

... print(2iexp(-i))

3.2 Afficher un script Python non interprété à la compilation

Il suffit d’insérer le code suivant, par exemple, à l’aide de la balise pyblock :

Code LATEX

\begin {pyblock}

from math import *

a=

b=

c=5sin(a)+2cos(b)

\end {pyblock}

qui affiche en sortie :

Sortie LATEX

from math import *

a=

b=

c=5sin(a)+2cos(b)

Code LATEX

La dernière valeur de $u$ calculée est égale à \py {u}, et celle de $n$ à \py {n}.

Ce qui donne :

Sortie LATEX

La dernière valeur de u calculée est égale à 10.356813643179308, et celle de n à 13.

3.4 Compiler du code Python qui génère et affiche un graphique

Par exemple, on va générer les graphes des fonctions sinus et cosinus sur l’intervalle [0; 5] et les insérer dans le pdf. On insère le code suivant dans le source LATEX :

Code LATEX

\begin {pycode}

from math import *

from matplotlib import pyplot

X=linspace(0,5)

plt.plot(X,cos(X))

plt.plot(X,sin(X))

# On sauvegarde la figure suivant le chemin (relatif) mentionné

plt.savefig('Figures/graphique.pdf',bbox_inches='tight')

print(r' \includegraphics [scale=0.5]{Figures/graphique.pdf}')

\end {pycode}

Ce qui donne, après les trois compilations, une figure insérée dans le pdf :

Sortie LATEX

0 1 2 3 4 5

La méthode alternative suivante permet de gérer le placement de la figure.

  • Le code LATEX suivant remplace le précédent :

Code LATEX

\begin {pycode}

from math import *

from matplotlib import pyplot

X=linspace(0,5)

plt.plot(X,cos(X))

plt.plot(X,sin(X))

# On sauvegarde la figure suivant le chemin (relatif) mentionné

plt.savefig('Figures/graphique.pdf',bbox_inches='tight')

\end {pycode}

On remarque que la ligne suivante a été supprimée.

Code LATEX

print(r' \includegraphics [scale=0.5]{Figures/graphique.pdf}')

  • Après compilations, le graphique a été généré et enregistré dans l’arborescence à l’emplacement

« Figures/graphique.pdf ».

On peut alors insérer dans « MonSource.tex » la ligne qui suit à l’endroit désiré :

Code LATEX

\begin {center}

\IfFileExists {Figures/graphique.pdf}{ \includegraphics [scale=0.57] ⌋

,→ {Figures/graphique.pdf}}{}

\end {center}

L’avantage est que la figure peut être placée n’importe où dans le fichier PDF généré, par exemple ici.

0 1 2 3 4 5

4 Insérer un tableau de valeurs

Dans ce paragraphe, nous allons proposer quelques scripts à insérer dans un source LATEX afin de générer un(des) tableau(x).

Le lecteur (et utilisateur ?) remarquera qu’une ligne de code LATEX est insérée dans print(r"ligne de code LATEX").

4.1 Tableau de valeurs associées à une fonction

Soit f la fonction définie sur R par f ( x ) = x e− x^. Déterminons les valeurs de f ( x ) pour x variant de 0 à 5, avec un pas de 1, valeurs que l’on va insérer dans un tableau centré sur la page. Insérons le code suivant dans le source LATEX :

L=[True,False]

Tab3=[]

for i in L:

for j in L:

for k in L:

Tab3.append([str(i),str(j),str(k),str(nor(i,nand(j,k))) ⌋

,→ ,str(nand(nor(i,j),nor(i,k)))])

print(r' \begin {tabular}{|c|c|c|c|c|}')

print(r' \hline ')

print(r'$P$ & $Q$ & $R$ & $P \downarrow (Q \mid R)$ & $(P \downarrow Q) \mid (P

,→ \downarrow R)$ \ \hline ')

for i in range(len(Tab3)):

print(r' %s & %s & %s & %s & %s \ \hline' %(str(Tab3[i][0]),str(Tab3[i][1]) ⌋

,→ ,str(Tab3[i][2]),str(Tab3[i][3]),str(Tab3[i][4])))

print(r' \end {tabular}')

\end {pycode}

Ce qui donne, après exécution du script :

Sortie LATEX

P Q R P ↓ (Q | R) (P ↓ Q) | (P ↓ R) True True True False True True True False False True True False True False True True False False False True False True True True True False True False False True False False True False True False False False False False

5 Utiliser la librairie sympy

La librairie sympy permet le calcul symbolique.

Cette librairie sympy n’est pas nécessairement installée dans la configuration par défaut de l’interpréteur PY- THON.

5.1 Développement, factorisation

Le code suivant, inséré dans une source LATEX, donne un exemple pour développer ou factoriser une expression.

Code LATEX

\begin {pycode}

from math import *

from sympy import *

x=Symbol('x')

y=Symbol('y')

exp=x(5x+2)(-6x+4)

exp3=(x+y)**

exp2=x3-4x2+5x-

\end {pycode}

Développement : $\py{latex(exp)}=\py{latex(expand(exp))}$

Développement : $\py{latex(exp3)}=\py{latex(expand(exp3))}$

Factorisation : $\py{latex(exp2)}=\py{latex(factor(exp2))}$

Ce qui donne :

Sortie LATEX

Développement : x (4 − 6 x ) (5 x + 2) = − 30 x^3 + 8 x^2 + 8 x Développement :

x + y

= x^6 + 6 x^5 y + 15 x^4 y^2 + 20 x^3 y^3 + 15 x^2 y^4 + 6 x y^5 + y^6 Factorisation : x^3 − 4 x^2 + 5 x − 2 = (^) ( x − 2) ( x − 1)^2

5.2 Dérivée et primitive d’une fonction, intégrale d’une fonction sur un intervalle

Dérivée d’une fonction

On insère le code suivant dans le source LATEX pour déclarer une fonction et calculer sa dérivée :

Code LATEX

\begin {pycode}

from math import *

from sympy import *

x=Symbol("x")

f=x3+x2-5*x+

deriv=diff(f,x)

\end {pycode}

Puis le code suivant dans le source LATEX pour afficher la fonction, sa dérivée et l’expression factorisée de cette dernière.

Code LATEX

Soit $f$ la fonction définie sur \R par: $f(x)=\py{latex(f)}$

La fonction dérivée est la fonction $f':x \longmapsto \py{latex(deriv)} =

,→ \py{latex(factor(deriv))}$

On obtient :

Sortie LATEX

Soit f la fonction définie sur R par : f ( x ) = x^3 + x^2 − 5 x + 10 La fonction dérivée est la fonction f ′^ : x 7 −→ 3 x^2 + 2 x − 5 = ( x − 1) (3 x + 5)

Code LATEX

$f(x)=0$ si $x \in \py{latex(d)}$

Ce qui donne :

Sortie LATEX

f ( x ) = 0 si x

PYTHON renvoie l’ensemble des solutions entre crochets, cela peut prêter à confusion.

6 Aide aux développements

Le script PYTHON qui suit génère aléatoirement les coefficients de différents polynômes de degré 1, pour proposer une liste permettant aux élèves de se familiariser avec la distributivité de la multiplication par rapport à l’addition :

Code PYTHON

\begin{pyblock}

from math import *

from sympy import *

from random import *

# x variable symbolique

x=symbols('x')

# ou bien x=Symbol('x'), ou bien x=Var('x')

# La liste C va contenir les 20 polynômes de degré 1 dont les coefficients

# sont générés aléatoirement.

C=[]

for i in range(20):

C.append((randint(1,10)*x+randint(-10,10)))

# la liste d contient les coefficients placés devant le produit de 2 éléments

# de la liste C. Certains coefficients seront des rationnels

d=[]

for i in range(6):

k=randint(-20,20)

if k!=0:

d.append(k)

\end{pyblock}

On insère alors le code suivant dans le source LATEX.

Code LATEX

\begin {multicols}{2}

\raggedcolumns %

Les développements proposés :

\begin {enumerate}

\item $A(x)=(\py{latex(C[0])}) \times (\py{latex(C[1])})$

\item $A(x)=(\py{latex(C[2])}) \times (\py{latex(C[3])})$

\item $A(x)=(\py{latex(C[4])}) \times (\py{latex(C[5])})$

\item $A(x)=(\py{latex(C[6])}) \times (\py{latex(C[7])})$

\item $A(x)=(\py{latex(C[8])}) \times (\py{latex(C[9])})$

\item $A(x)=(\py{latex(C[10])}) \times (\py{latex(C[11])})$

\item $A(x)=\py{d[0]} \times(\py{latex(C[12])}) \times (\py{latex(C[13])})$

\item $A(x)=\py{d[1]} \times(\py{latex(C[14])}) \times (\py{latex(C[15])})$

% Rational(5,8) renvoie le rationnel 5/

\item $A(x)=\py{latex(Rational(d[2],d[3]))} \times(\py{latex(C[16])}) \times

,→ (\py{latex(C[17])})$

\item $A(x)=\py{latex(Rational(d[4],d[5]))} \times(\py{latex(C[18])}) \times

,→ (\py{latex(C[19])})$

\end {enumerate}

\columnbreak

Les réponses sont ici :

\begin {enumerate}

\item $A(x)=\py{latex(expand(C[0]*C[1]))}$

\item $A(x)=\py{latex(expand(C[2]*C[3]))}$

\item $A(x)=\py{latex(expand(C[4]*C[5]))}$

\item $A(x)=\py{latex(expand(C[6]*C[7]))}$

\item $A(x)=\py{latex(expand(C[8]*C[9]))}$

\item $A(x)=\py{latex(expand(C[10]*C[11]))}$

\item $A(x)=\py{latex(expand(d[0]C[12]C[13]))}$

\item $A(x)=\py{latex(expand(d[1]C[14]C[15]))}$

\item $A(x)=\py{latex(expand(Rational(d[2],d[3])C[16]C[17]))}$

\item $A(x)=\py{latex(expand(Rational(d[4],d[5])C[18]C[19]))}$

\end {enumerate}

\end {multicols}

Ce qui donne :

Sortie LATEX

Les développements proposés :

  1. A( x ) = (5 x − 2) × (4 x − 2)
  2. A( x ) = (9 x − 4) × (7 x − 5)
  3. A( x ) = (9 x + 6) × (10 x + 10)
  4. A( x ) = (5 x − 1) × (10 x + 5)
  5. A( x ) = (7 x + 2) × (7 x − 9)
  6. A( x ) = (5 x + 5) × (3 x + 1)
  7. A( x ) = 16 × (2 x − 10) × (4 x + 8)
  8. A( x ) = − 12 × (5 x + 4) × (3 x − 5)
  9. A( x ) = −

× ( x − 2) × (8 x − 1)

  1. A( x ) = −

× (7 x − 6) × (7 x + 6)

Les réponses sont ici :

  1. A( x ) = 20 x^2 − 18 x + 4
  2. A( x ) = 63 x^2 − 73 x + 20
  3. A( x ) = 90 x^2 + 150 x + 60
  4. A( x ) = 50 x^2 + 15 x − 5
  5. A( x ) = 49 x^2 − 49 x − 18
  6. A( x ) = 15 x^2 + 20 x + 5
  7. A( x ) = 128 x^2 − 384 x − 1280
  8. A( x ) = − 180 x^2 + 156 x + 240
  9. A( x ) = − 56 x^2 19

119 x 19

  1. A( x ) = 39 − 637 x^2 12

Sortie LATEX

Expression de f ( x ) Dérivée de f Primitive de f

x^2 2 x x^3 3 x x + 1

x ( x^ +^ 1)^2

x + 1

x − log ( x + 1)

x sin ( x ) x cos ( x ) + sin ( x ) − x cos ( x ) + sin ( x ) xex^ − xex^ + ex^ (− x − 1) ex sin ( x ) cos ( x ) − cos ( x ) cos ( x ) − sin ( x ) sin ( x ) tan ( x ) tan^2 ( x ) + 1 − log (cos ( x ))

sin^2 ( x ) 2 sin ( x ) cos ( x )

x 2

sin ( x ) cos ( x ) 2 cos^2 ( x ) −2 sin ( x ) cos ( x ) x 2

sin ( x ) cos ( x ) 2 tan^2 ( x )

2 tan^2 ( x ) + 2

tan ( x ) − x + sin ( x ) cos ( x )

x log ( x ) log ( x ) + 1 x^2 log ( x ) 2

x^2 4

atan ( x )

x^2 + 1 x atan ( x ) −

log

x^2 + 1

sin (3 x ) 3 cos (3 x ) − cos (3 x ) 3 cos (5 x ) −5 sin (5 x )

sin (5 x ) 5 tan ( x ) tan^2 ( x ) + 1 − log (cos ( x ))

asin ( x )

p 1 − x^2

x asin ( x ) +

p 1 − x^2

acos ( x ) −

p 1 − x^2

x acos ( x ) −

p 1 − x^2

8 Nombres premiers, décomposition en facteurs premiers, PGCD

Pour obtenir ce qui suit, il suffit de compiler le source LATEX « NombresPremiers.tex »

Lien de téléchargement : https://nuage03.apps.education.fr/index.php/s/s2ZSZ8BiE8wY6TJ

Les compilations donnent

Sortie LATEX

On donne la liste L 130 des nombres premiers inférieurs à 130 :

L 130 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127]

  1. Déterminer la décomposition en facteurs premiers du pgcd de 2^1 × 32 × 53 × 74 et de 2^2 × 33 × 53 × 72.
  2. Décomposer le nombre 226 en produit de facteurs premiers.
  3. Décomposer le nombre 122 en produit de facteurs premiers.
  4. Justifier que le nombre 2029 est premier.

Éléments de correction

  1. Déterminer la décomposition en facteurs premiers du pgcd de 2^1 × 32 × 53 × 74 et de 2^2 × 33 × 53 × 72. Le pgcd de 2^1 × 32 × 53 × 74 et de 2^2 × 33 × 53 × 72 est égal à 2^1 × 32 × 53 × 72.
  2. Décomposer le nombre 226 en produit de facteurs premiers. Voici la décomposition en facteurs premiers de 226, obtenue à l’aide des divisions successives :

226 2 113 113 1 1

Ce qui donne :

226 = 21 × 1131

  1. Décomposer le nombre 122 en produit de facteurs premiers. Voici la décomposition en facteurs premiers de 122, obtenue à l’aide des divisions successives :

122 2 61 61 1 1

Ce qui donne :

122 = 21 × 611

  1. Justifier que le nombre 2029 est premier. On calcule

p 2029 ≈ 45,044422518220834. On remarque qu’aucun nombre premier (voir la liste L 130 ) plus petit que 45 n’est un diviseur de 2029. Donc 2029 est premier.

9 Triangle de Pascal

On insère le code suivant dans le source LATEX.

Code LATEX

Voici le triangle de Pascal qui affiche les $\binom{n}{k}$ pour $n$ variant de 0 à

\vspace {2ex}

\begin {pycode}

n = 13

def trianglePascal(n):

T = [[0] * (n+1) for p in range(n+1)]

for n in range(n+1):

if n == 0:

T[n][0] = 1

else:

10 Générer plusieurs sujets

10.1 Le meilleur arrive!

Le package pythontex permet, à partir d’un source LATEX dans lequel on a inséré un script PYTHON appelant la librai- rie random , de créer plusieurs versions d’un même sujet identique dont les données sont générées aléatoirement.

Le script qui suit, enregistré dans le fichier « Plusieurs.sh », à exécuter en console sous le shell bash 6 , permet

d’illustrer cette idée en créant plusieurs versions différentes à partir d’une même source LATEX présent dans le même répertoire.

Script Bash

#!/bin/bash

# On utilise deux répertoires nommés SUJETS et CORRIGES

# comme lieu de stockage temporaire.

# Si les répertoires existent, on les renomme le temps

# d'exécution du script à l'aide d'une marque horaire.

timestamp= $( date +%s )

if [ -e "SUJETS" ]; then

mv SUJETS SUJETS-$timestamp

fi

if [ -e "CORRIGES" ]; then

mv CORRIGES CORRIGES-$timestamp

fi

mkdir SUJETS

mkdir CORRIGES

# Paramètres du script

read -p "Nom du source LaTeX? " fichier

read -p "Nombre de pages de l'énoncé? " enonce

read -p "Nombre de sujets? " nb

# Boucle pour le nombre de sujets demandés.

for i in seq 1 $nb; do

# On copie le source LaTeX puis on effectue les trois compilations

# nécessaires pour obtenir le PDF contenant sujet et corrigé.

cp $fichier.tex exemplaire$i.tex

pdflatex exemplaire$i.tex

pythontex exemplaire$i.tex

pdflatex exemplaire$i.tex

# On utilise pdftk pour séparer l'énoncé du corrigé associé et les

# placer dans les dossiers ad-hoc.

pdftk exemplaire$i.pdf cat 1-$enonce output SUJETS/sujet$i.pdf

pdftk exemplaire$i.pdf cat $(( 1+$enonce )) -end output CORRIGES/corrige$i.pdf

# On supprime les fichiers générés par les compilations.

rm -rf pythontex-files-exemplaire$i

rm exemplaire$i.*

# Fichiers d'extensions 'aux', 'log', 'pdf', 'pytxcode', 'tex'

# et éventuellement 'out'.

done

  1. Dans le cas d’un système d’exploitation de type GNU/Linux.

# pdftk permet de concaténer les énoncés ainsi que les corrigés associés pour

# n'avoir que deux pdf à imprimer si besoin.

pdftk SUJETS/*.pdf cat output Enonces-$fichier.pdf

pdftk CORRIGES/*.pdf cat output Corriges-$fichier.pdf

# On efface les fichiers et répertoires temporaires

rm -rf SUJETS CORRIGES

# Si nécessaire, on rétablit les anciens noms des répertoires

if [ -e "SUJETS-$timestamp" ]; then

mv SUJETS-$timestamp SUJETS

fi

if [ -e "CORRIGES-$timestamp" ]; then

mv CORRIGES-$timestamp CORRIGES

fi

Pour les lecteurs travaillant sous Window$, on peut procéder de façon similaire avec un script Powershell.

Script PowerShell

# Suppression de l'affichage des commandes exécutées.

Set-PSDebug -off

# Efface la console

Clear-Host

# On utilise deux répertoires comme lieux de stockage temporaire pour les énoncés et

,→ les corrigés.

# On ajoute un horodatage pour s'assurer de ne pas utiliser de répertoires

,→ existants.

$marque=Get-Date -Format FileDateTimeUniversal

$sujets="SUJETS-"+$marque

$corriges="CORRIGES-"+$marque

mkdir $sujets

mkdir $corriges

# Paramètres du script

$fichier=Read-Host "Nom du source LaTeX? (sans extension) "

[int]$n=Read-Host "Nombre de pages de l'énoncé? "

[int]$m=$n+

[int]$nb=Read-Host "Nombre de sujets? "

# Boucle pour le nombre de sujets demandés.

for ($i=1;$i -le $nb;$i++)

Write-Host "Génération du sujet"$i

# préparation

$source="exemplaire"+$i+".tex"

$resultat="exemplaire"+$i+".pdf"

copy ($fichier+".tex") $source