Compare commits

..

10 Commits

@ -1,5 +1,7 @@
## TODO
Passer en options toutes les chaînes de caractères naturellement initialisées à ""
Faire une documentation correcte...
Types de documents :

@ -1,45 +1,40 @@
"""Ce fichier initialise les variables utilisées ailleurs dans le programme et en permet la personnalisation simple
"""
Ce fichier initialise les variables utilisées ailleurs dans le programme
et en permet la personnalisation simple
"""
import os
import jinja2
"""
Nom du programme
"""
softname = 'documentex'
"""Nom du programme
"""
version = '1.7'
"""Version du programme
Version du programme
"""
version = '2.0'
debug = False
"""Debug variable
"""
Variable de debuggage
"""
debug = False
"""
Constantes customisant l'en-tête des fichiers LaTeX et remplies automatiquement
"""
classe_appartenance = "PT"
promotion = "Fourier"
lycee_appartenance = "Lycée Langevin Wallon"
institution = "Lycée"
nom_institution = "Langevin Wallon"
lycee_adresse = "126 avenue Roger Salengro"
lycee_complement_adresse = "Champigny-sur-Marne, 94240"
auteur = "D. Denoncin" #est mise d'office sur tout type de document
auteur = "D. Denoncin" # est mise d'office sur tout type de document
auteur_lettre = "Dr. David Denoncin"
auteur_titre = "Professeur Agrégé"
auteur_adresse_mail = "math@denoncin.fr"
"""Constantes customisant l'en-tête des fichiers LaTeX et remplies automatiquement
"""
dictionnaire_type_document = {'ds' : [False,'',True,True],
'td' : [False,'',True,True],
'dm' : [False,'*',True,True],
'pb' : [False,'*',True,True],
'te' : [False,'*',True,True],
'kh' : [False,'',False,True],
'cours' : [True,'*',True,True],
'in' : [False,'*',True,True],
'cr' : [False,'*',False,True],
'ob' : [False,'*',False,True],
'doc' : [False,'',False,False],
'let' : [False,'',False,True]
}
"""Dictionnaire paramétrant les types de documents de la façon suivante :
dictionnaire_type_document[type_document] = [contenu : affiche-t-on un contenu ? (True ou False),
td : numérote-t-on les exercices ? ('' ou '*'),
@ -47,53 +42,95 @@ dictionnaire_type_document = {'ds' : [False,'',True,True],
appartenance : doit-on afficher l'appartenance classe/lycée ? (True ou False),
]
"""
dictionnaire_type_document = {'ds': [False, '', True, True],
'td': [False, '', True, True],
'dm': [False, '*', True, True],
'pb': [False, '*', True, True],
'te': [False, '*', True, True],
'kh': [False, '', False, True],
'cours': [True, '*', True, True],
'in': [False, '*', True, True],
'cr': [False, '*', False, True],
'ob': [False, '*', False, True],
'doc': [False, '', False, False],
'let': [False, '', False, True], # Lettre de motivation
}
type_document_correction = ['ds','dm','pb']
"""
Types de documents pour lesquels il faut créer un sous-dossier pour la correction
"""
type_document_correction = ['ds', 'dm', 'pb']
dictionnaire_numero_ds = {'01' : 'Première', '02' : 'Deuxième','03' : 'Troisième', '04' : 'Quatrième', '05' : 'Cinquième', '06' : 'Sixième','07' : 'Septième','08' : 'Huitième','09' : 'Neuvième', '10' : 'Dixième' }
"""Dictionnaire paramétrant les abréviations pour les numéros de DS (limité à 10 DS)
"""
Dictionnaire paramétrant les abréviations pour les numéros de DS (limité à 10 DS)
"""
dictionnaire_numero_ds = {'01': 'Première',
'02': 'Deuxième',
'03': 'Troisième',
'04': 'Quatrième',
'05': 'Cinquième',
'06': 'Sixième',
'07': 'Septième',
'08': 'Huitième',
'09': 'Neuvième',
'10': 'Dixième',
}
"""
Paramétrage des templates jinja
"""
latex_jinja_env = jinja2.Environment(
block_start_string = '\BLOCK{',
block_end_string = '}',
variable_start_string = '\VAR{',
variable_end_string = '}',
comment_start_string = '\#{',
comment_end_string = '}',
line_statement_prefix = '%%',
line_comment_prefix = '%#',
trim_blocks = True,
autoescape = False,
loader = jinja2.FileSystemLoader('/')
block_start_string="\BLOCK{",
block_end_string="}",
variable_start_string="\VAR{",
variable_end_string="}",
comment_start_string="\#{",
comment_end_string="}",
line_statement_prefix="%%",
line_comment_prefix="%#",
trim_blocks=True,
autoescape=False,
loader=jinja2.FileSystemLoader("/")
)
jinja_template_dir = "templates"
tex_file = 'example.tex'
"""Paramétrage des templates jinja
tex_file = "example.tex"
"""
Pour mémoire : les variables à initialiser pour un compte rendu de colle
"""
def initialiser_variables():
title = ''
semaine = ''
nom1= ''
nom1 = ''
nom2 = ''
nom3 = ''
return [title,semaine,nom1,nom2,nom3]
"""Pour mémoire : les variables à initialiser pour un compte rendu de colle
"""
return [title, semaine, nom1, nom2, nom3]
numeros_admissibles = [ '00', '01','02','03','04','05','06','07','08','09' ] + [str(i) for i in range(10,200)]
"""Numéro de fichiers admissibles (est-ce vraiment utile ??)
"""
Numéro de fichiers admissibles (est-ce vraiment utile ??)
"""
numeros_admissibles = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09'] + [str(i) for i in range(10, 200)]
annee_scolaire = ['09','10','11','12','01','02','03','04','05'] #mois d'une année scolaire donnée
annee_scolaire_plus_un = ['01','02','03','04','05']
annee_scolaire_en_cours = ['09','10','11','12']
annees_valables = [str(i) for i in range(2018,2070)]
"""Ces variables permettent de déterminer quelle est l'année scolaire en cours pour lequel le fichier est généré, expire en 2070 (?)
"""
Ces variables permettent de déterminer quelle est l'année scolaire en cours pour lequel le fichier est généré, expire en 2070 (?)
"""
annee_scolaire = ['09', '10', '11', '12', '01', '02', '03', '04', '05', '06'] # mois d'une année scolaire donnée
annee_scolaire_plus_un = ['01', '02', '03', '04', '05', '06']
annee_scolaire_en_cours = ['07', '08', '09', '10', '11', '12']
annees_valables = [str(i) for i in range(2018, 2070)]
"""
Fonctions de validations génériques
"""
def entier(x):
try:
int(x)
return True
except:
return "Doit être un entier"

@ -2,40 +2,79 @@ import os
import sys
from datetime import datetime
import glob
from sys import argv
from jinja2 import Template
import shutil
import libcurses
from . import constantes_document_latex as constantes
from . import lib_nettoyage_argv as nettoyage
from . import lib_annee_scolaire as annee_scolaire
import click
from PyInquirer.prompt import prompt
template_dir = constantes.jinja_template_dir
def documentex():
"""Script permettant de créer un dossier nommé numero_titre-dossier, numero ou titre dans lequel figurent les squelettes des fichiers latex correspondant au type de document demandé.
Exemple d'utilisation :
documentex 01_test td
def validate_dossier(ctx, param, value):
if os.path.exists(value):
raise click.BadParameter("Le dossier existe déjà !")
try:
if len(value.split("_")) == 2:
numero, nom = value.split("_")
int(numero)
return numero, f"{numero}_{nom}"
if len(value.split("_")) == 1:
try:
int(value)
return value, value
except:
return "", value
else:
raise click.BadParameter("Le dossion doit être au format numéro_nom ou nom")
except ValueError:
raise click.BadParameter("Le dossier doit être au format nom ou numéro_nom")
@click.command()
@click.argument("dossier", type=click.UNPROCESSED, callback=validate_dossier)
@click.argument("type_document", type=click.Choice([key for key in constantes.dictionnaire_type_document]))
def documentex(dossier: str, type_document: str):
"""
Entrée:
-------
if len(argv) != 3:
print("usage : numero_nom-fichier type_document")
quit()
if nettoyage.arguments(argv[1]) is None:
print("Le format du premier argument doit être de la forme numero_titre-dossier, numero ou titre")
quit()
dossier : chaîne de caractère spécifiant le nom du dossier à créer
type_document : chaîne de caractère spécifiant le type de document à créer
Sortie :
--------
Aucune. On crée dans le dossier $dossier tous les fichiers d'en-tête LaTeX nécessaire en fonction du type de document à créer.
Exemple :
---------
documentex 01_algebre-lineaire td
"""
# Initialisation des variables
# contenu,tex_file,fancyhead,type_document,short_title,lycee,classe,title,auteur,semaine,liste_noms,td,ds_numero,annee
date = datetime.now().strftime("%Y-%m-%d")
nom_fichier = argv[1]
numero,titre = nettoyage.arguments(nom_fichier)
title = ""
semaine = ""
nom1 = ""
nom2 = ""
nom3 = ""
classe = ""
lycee = ""
ds_numero = ""
numero, nom_fichier = dossier
tex_file = constantes.tex_file # nom du fichier dans lequel on écrit du LaTeX
type_document = argv[2]
contenu,td,fancyhead,appartenance = constantes.dictionnaire_type_document[type_document]
contenu, td, fancyhead, appartenance = constantes.dictionnaire_type_document[type_document]
short_title = type_document.upper()+' '+numero
title,semaine,nom1,nom2,nom3 = constantes.initialiser_variables() # c'est moche...
auteur = constantes.auteur
annee = annee_scolaire.annee_scolaire(True)
annee = annee_scolaire.annee_scolaire()
institution = constantes.institution
nom_institution = constantes.nom_institution
lycee_adresse = constantes.lycee_adresse
@ -43,45 +82,111 @@ def documentex():
auteur_lettre = constantes.auteur_lettre
auteur_titre = constantes.auteur_titre
auteur_adresse_mail = constantes.auteur_adresse_mail
promotion = constantes.promotion
if appartenance:
classe = constantes.classe_appartenance
lycee = constantes.lycee_appartenance
else:
classe = ''
lycee = ''
ds_numero = ''
# Initialisation des variables suivant le type d'écrit
if contenu:
title = libcurses.saisie_message_std('Quel titre long pour ce document ? ')
short_title = libcurses.saisie_message_std('Quel titre court pour ce document ? ')
questions = [
{
"type": "input",
"name": "title",
"message": "Titre LONG du document",
},
{
"type": "input",
"name": "short_title",
"message": "Titre COURT du document",
}
]
answers = prompt(questions)
title = answers["title"]
short_title = answers["short_title"]
if type_document == 'dm':
questions = [
{
"type": "input",
"name": "date",
"message": "À rendre pour le : ",
}
]
short_title += ' : à rendre pour le '
short_title += libcurses.saisie_message_std('à rendre pour le : ? ')
answers = prompt(questions)
short_title += answers["date"]
if type_document == 'cr':
lycee = libcurses.saisie_message_std('Quel lycée ? ')
classe = libcurses.saisie_message_std('Quelle classe ? ')
semaine = libcurses.saisie_message_std('Quelle semaine ? ')
nom1 = libcurses.saisie_message_std('Premier candidat ? ')
nom2 = libcurses.saisie_message_std('Deuxième candidat ? ')
nom3 = libcurses.saisie_message_std('Troisième candidat ? ')
questions = [
{
"type": "list",
"name": "lycee",
"message": "Nom du lycée",
"choices": [
"LLW",
"Lycée de Cachan",
]
},
{
"type": "list",
"name": "classe",
"message": "Nom de la classe",
"choices": [
"TSI2",
"PTSI",
"PT*",
"PT",
]
},
{
"type": "input",
"name": "semaine",
"message": "Numéro de la semaine",
"validate": constantes.entier,
},
{
"type": "input",
"name": "nom1",
"message": "Nom du premier candidat",
"default": "",
},
{
"type": "input",
"name": "nom2",
"message": "Nom du deuxième candidat",
"default": "",
},
{
"type": "input",
"name": "nom3",
"message": "Nom du troisième candidat",
"default": "",
},
]
answers = prompt(questions)
lycee = answers["lycee"]
classe = answers["classe"]
semaine = answers["semaine"]
nom1 = answers["nom1"]
nom2 = answers["nom2"]
nom3 = answers["nom3"]
if type_document == 'ob':
nom1 = libcurses.saisie_message_std('Nom du candidat ? ')
questions = [
{
"type": "input",
"name": "nom1",
"message": "Nom du candidat ",
}
]
answers = prompt(questions)
nom1 = answers["nom1"]
os.mkdir(nom_fichier)
os.mkdir(os.path.join(nom_fichier, "Utils"))
try:
os.makedirs(argv[1])
except:
continuer = libcurses.saisie_message_std(' Le dossier existe déjà ! Continuer ? (o/n) ')
if continuer != 'o':
quit()
else:
pass #le dossier existe déjà, on va ré-écrire les fichiers qui s'y trouvent
try:
os.makedirs(os.path.join(argv[1],'Utils'))
except:
pass #le dossier existe déjà, on va ré-écrire les fichiers qui s'y trouvent
liste_noms = [nom1,
nom2,
nom3,
@ -102,22 +207,24 @@ def documentex():
# Génération des fichiers de base
for fichier in fichiers:
nom_fichier = os.path.basename(fichier)
with open(os.path.join(tex_file_path,nom_fichier),'w') as outfile:
nom_fichier_a_copier = os.path.basename(fichier)
with open(os.path.join(tex_file_path,nom_fichier_a_copier),'w') as outfile:
template = constantes.latex_jinja_env.get_template(os.path.abspath(fichier))
outfile.write(template.render(date=date,contenu=contenu,tex_file=tex_file,fancyhead=fancyhead,type_ecrit=type_document,short_title=short_title,lycee=lycee,classe=classe,title=title,auteur=auteur,semaine=semaine,liste_noms=liste_noms,td=td,ds_numero=ds_numero,annee=annee,institution=institution,nom_institution=nom_institution,lycee_adresse=lycee_adresse,lycee_complement_adresse=lycee_complement_adresse,auteur_lettre=auteur_lettre,auteur_titre=auteur_titre,auteur_adresse_mail=auteur_adresse_mail,promotion=promotion))
outfile.write(template.render(date=date,contenu=contenu,tex_file=tex_file,fancyhead=fancyhead,type_ecrit=type_document,short_title=short_title,lycee=lycee,classe=classe,title=title,auteur=auteur,semaine=semaine,liste_noms=liste_noms,td=td,ds_numero=ds_numero,annee=annee,institution=institution,nom_institution=nom_institution,lycee_adresse=lycee_adresse,lycee_complement_adresse=lycee_complement_adresse,auteur_lettre=auteur_lettre,auteur_titre=auteur_titre,auteur_adresse_mail=auteur_adresse_mail))
# Génération des fichiers Utils
for fichier in fichiers_utils:
nom_fichier = os.path.basename(fichier)
with open(os.path.join(os.path.join(tex_file_path,'Utils'),nom_fichier),'w') as outfile:
nom_fichier_a_copier = os.path.basename(fichier)
with open(os.path.join(os.path.join(tex_file_path,'Utils'),nom_fichier_a_copier),'w') as outfile:
template = constantes.latex_jinja_env.get_template(os.path.abspath(fichier))
outfile.write(template.render(date=date,contenu=contenu,tex_file=tex_file,fancyhead=fancyhead,type_ecrit=type_document,short_title=short_title,lycee=lycee,classe=classe,title=title,auteur=auteur,semaine=semaine,liste_noms=liste_noms,td=td,ds_numero=ds_numero,annee=annee,institution=institution,nom_institution=nom_institution,lycee_adresse=lycee_adresse,lycee_complement_adresse=lycee_complement_adresse,auteur_lettre=auteur_lettre,auteur_titre=auteur_titre,auteur_adresse_mail=auteur_adresse_mail,promotion=promotion))
outfile.write(template.render(date=date,contenu=contenu,tex_file=tex_file,fancyhead=fancyhead,type_ecrit=type_document,short_title=short_title,lycee=lycee,classe=classe,title=title,auteur=auteur,semaine=semaine,liste_noms=liste_noms,td=td,ds_numero=ds_numero,annee=annee,institution=institution,nom_institution=nom_institution,lycee_adresse=lycee_adresse,lycee_complement_adresse=lycee_complement_adresse,auteur_lettre=auteur_lettre,auteur_titre=auteur_titre,auteur_adresse_mail=auteur_adresse_mail))
# Création du dossier de correction avec les fichiers pré-remplis
fichiers = glob.glob(os.path.join(argv[1],'*'))
fichiers = glob.glob(os.path.join(nom_fichier,'*'))
fichiers = [fichier for fichier in fichiers if 'Utils' not in fichier ]
if type_document in constantes.type_document_correction:
os.makedirs(os.path.join(argv[1],'Correction'))
shutil.copytree(os.path.join(argv[1],'Utils'),os.path.join(os.path.join(argv[1],'Correction'),'Utils'))
os.makedirs(os.path.join(nom_fichier,'Correction'))
shutil.copytree(os.path.join(nom_fichier,'Utils'),os.path.join(os.path.join(nom_fichier,'Correction'),'Utils'))
for fichier in fichiers:
shutil.copy(fichier,os.path.join(argv[1],'Correction'))
shutil.copy(fichier,os.path.join(nom_fichier,'Correction'))
click.secho(f"Le dossier LaTeX {nom_fichier} a été crée !", fg="red")

@ -1,29 +1,30 @@
import datetime
import libcurses as curses
from . import constantes_document_latex as constantes
def annee_scolaire_admissible(annee_scolaire):
"""Revoie True si la chaîne de caractère annee_scolaire est au format aaaa-aaaa+1 avec aaaa une année admissible, et False sinon
def annee_scolaire_admissible(annee_scolaire: str) -> bool:
"""
Entrée :
--------
annee_scolaire : chaîne de caractère
Sortie :
--------
bool : booléen décrivant si la chaîne de caractère est au format aaaa-aaaa+1 avec aaaa une année admissible, et False sinon
"""
if len(annee_scolaire.split('-')) != 2:
return False
else:
annee_n,annee_n_plus_un = annee_scolaire.split('-')
annee_n, annee_n_plus_un = annee_scolaire.split('-')
return (int(annee_n) == (int(annee_n_plus_un)-1)) and (annee_n in constantes.annees_valables)
def annee_scolaire(sans_std = False):
"""Retourne l'année scolaire en cours, si l'argument est True alors on renvoie toujours l'année scolaire en cours sauf à partir de juin où on renvoie l'année suivante
def annee_scolaire() -> str:
"""
Sortie :
--------
str : Retourne l'année scolaire en cours, une nouvelle année démarre en juillet
"""
year, month = [element for element in datetime.datetime.now().strftime("%Y-%m").split('-')]
if month in constantes.annee_scolaire_en_cours:
return year+'-'+str(int(year)+1)
return f"{year}-{int(year)+1}"
if month in constantes.annee_scolaire_plus_un:
return str(int(year)-1)+'-'+year
if sans_std:
return year+'-'+str(int(year)+1)
while True:
annee_scolaire = curses.saisie_message_std("Quelle est l'année scolaire en cours ? ")
if not(annee_scolaire_admissible(annee_scolaire)):
curses.afficher_message_std("L'année saisie doit être au format aaaa-aaaa+1 et aaaa doit être inférieure à 2070 !")
else:
return annee_scolaire
return f"{int(year)-1}-{year}"

@ -1,39 +0,0 @@
from . import constantes_document_latex as constantes
""" Ces fonction permettent d'analyser l'argument donné en ligne de commande. Celui-ci doit être de la forme numero ou bien numero_titre ou bien titre, et numero doit être dans l'intervalle des numéros admissibles (voir constantes_document_latex)
"""
def format(argv):
""" Formattage de l'argument
"""
arguments = argv.split('_')
if len(arguments) == 1:
arguments.append('') # garantit qu'il y a toujours au moins deux arguments, le second éventuellement vide
if constantes.debug:
print("fonction format")
print(f"La variable arguments est {arguments}")
return arguments
def bon_format(argv):
"""Booléen déterminant si la chaîne de caractère argv est un argument admissible pour le script document latex
"""
arguments = format(argv)
if len(arguments) != 2: # c'est impossible ?
return False
numero,titre = arguments
if constantes.debug:
print("fonction bon_format")
print(f"Les variables numero,titre sont {numero} et {titre}")
try:
int(numero) #si le numéro est bien un numéro
return numero in constantes.numeros_admissibles
except:
return True #si non, c'est un titre
else:
return [False] # Qu'est-ce que c'est que ce délire ??
def arguments(argv):
"""Renvoie la liste des arguments s'ils sont admissibles, et None autrement
"""
if bon_format(argv):
return format(argv)

@ -11,7 +11,7 @@ string = ""
endif
main.pdf: main.tex \VAR{ tex_file } Utils/*
$(compilateur) $(string) main.tex && $(compilateur) $(string) main.tex
$(compilateur) -interaction batchmode $(string) main.tex && $(compilateur) -interaction batchmode $(string) main.tex
.PHONY : clean

@ -0,0 +1,19 @@
ifdef utf
compilateur = xelatex
else
compilateur = pdflatex
endif
ifdef sol
string = "\def\SOL{}\input{main.tex}"
else
string = ""
endif
main.pdf: main.tex \VAR{ tex_file } Utils/*
$(compilateur) $(string) main.tex && $(compilateur) $(string) main.tex
.PHONY : clean
clean:
rm -rf *.log *.aux *.toc *.pdf

@ -53,7 +53,7 @@
% paquet fancyhdr
\pagestyle{fancy}
\BLOCK{ if fancyhead }
\fancyhead[L]{\VAR{ classe } - \VAR{ short_title } - \VAR{ lycee } \VAR{ annee } } %promotion \VAR{ promotion }
\fancyhead[L]{\VAR{ classe } - \VAR{ short_title } - \VAR{ lycee } \VAR{ annee } }
\BLOCK{ else }
\fancyhead[L]{\VAR{ classe } - \VAR{ lycee } \VAR{ annee } }
\BLOCK{ endif }

@ -72,22 +72,25 @@
\newtheorem*{rmkk}{Remark}
\newtheorem\VAR{ td }{exo}{Exercice}
\newtheorem\VAR{ td }{sol}{Solution}
\newtcbtheorem[auto counter]{thm}{Théorème}{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries}{thm}
\newtcbtheorem[use counter from=thm]{prop}{Proposition}{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries}{prop}
\newtcbtheorem[use counter from=thm]{cor}{Corollaire}{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries}{cor}
\newtcbtheorem[use counter from=thm]{lem}{Lemme}{colback=red!5!white,colframe=red!60!black,fonttitle=\bfseries}{lem}
\newtcbtheorem[use counter from=thm]{definition}{Définition}{colback=blue!5!white,colframe=blue!75!black,fonttitle=\bfseries}{def}
\newtcolorbox[use counter from=thm]{rmk}[1][]{colframe=black!50!white,colback=white,leftrule=2pt, toprule=3pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,coltitle=black,title={\noindent\textbf{Remarque~\thetcbcounter.}\par},nobeforeafter,#1}
\newtcolorbox[use counter from=thm]{ex}[1][]{colframe=gray!50!white,colback=white,leftrule=2pt, toprule=3pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,breakable,enhanced,title={\noindent\textbf{Exemple~\thetcbcounter.}\par},#1}
\newtcolorbox[use counter from=thm]{exs}[1][]{colframe=gray!50!white,colback=white,leftrule=2pt, toprule=3pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,title={\noindent\textbf{Exemples~\thetcbcounter.}\par},#1}
\newtcolorbox[use counter from=thm]{rmks}[1][]{colframe=black!50!white,colback=white,leftrule=2pt, toprule=3pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,title= {\noindent\textbf{Remarques~\thetcbcounter.}\par},#1}
\newtcbtheorem[auto counter,number within=section]{thm}{Théorème}{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries}{thm}
\newtcbtheorem[use counter from=thm,number within=section]{prop}{Proposition}{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries}{prop}
\newtcbtheorem[use counter from=thm,number within=section]{cor}{Corollaire}{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries}{cor}
\newtcbtheorem[use counter from=thm,number within=section]{lem}{Lemme}{colback=red!5!white,colframe=red!60!black,fonttitle=\bfseries}{lem}
\newtcbtheorem[use counter from=thm,number within=section]{definition}{Définition}{colback=blue!5!white,colframe=blue!75!black,fonttitle=\bfseries}{def}
\newtcolorbox{rmk}[1][]{colframe=black!50!white,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,coltitle=black,code={\noindent\textbf{Remarque.}\par},nobeforeafter,#1}
\newtcolorbox{ex}[1][]{colframe=gray!50!white,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,code = {\noindent\textbf{Exemple.}\par},notitle,#1}
\newtcolorbox{exs}[1][]{colframe=gray!50!white,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,code = {\noindent\textbf{Exemples.}\par},notitle,#1}
\newtcolorbox{rmks}[1][]{colframe=black!50!white,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,code= {\noindent\textbf{Remarques.}\par},notitle,#1}
\newtcolorbox{ins}[1][]{colframe=red!50!white,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,code= {\noindent\textbf{Instructions.}\par},notitle,#1}
\newtcolorbox[use counter from=thm]{notation}[1][]{colframe=purple!50!white,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=-1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,fonttitle=\bfseries,sharpish corners,breakable,enhanced,code= {\noindent\textbf{Notations.}\par},notitle,#1}
\renewtcolorbox{proof}[1][]{colframe=red,colback=white,leftrule=2pt, toprule=-1pt, rightrule=-1pt, bottomrule=1pt,boxsep=0pt,right=0.3cm, left=0.3cm, top=3pt, bottom=3pt,sharpish corners,notitle,before upper ={\textbf{Preuve} :\par},after upper ={\qed},breakable,enhanced,#1}
\newtcolorbox{attention}[1][]{colframe=red,colback=red!5!white,notitle,attach title to upper,halign=center,title={\textcolor{red}{\Radioactivity}\qquad},after upper={\qquad\textcolor{red}{\Radioactivity}},#1}
\newtcolorbox{objectif}[1][]{colframe=cyan!50!white,title=\textbf{Objectifs},#1}
\newtcolorbox{plan}[1][]{colframe=blue!50!white,title=\textbf{Plan du cours},#1}
\BLOCK{ endif }

@ -63,12 +63,12 @@
\vspace{1em}
\begin{center}
\begin{minipage}[]{.98\textwidth}
\Large{Toute réponse non justifiée \textbf{ne sera pas prise en compte}. \\ \newline Par ailleurs la \textbf{présentation, la qualité de la rédaction, la clarté et la précision des raisonnements} entreront pour une part importante dans l'appréciation des copies.\\ \newline Les candidats sont invités à encadrer leurs résultats.}
\Large{Toute réponse non justifiée \textbf{ne sera pas prise en compte}. \\ \newline Par ailleurs la \textbf{présentation, la qualité de la rédaction, la clarté et la précision des raisonnements} entreront pour une part importante dans l'appréciation des copies.\\ \newline Vous êtes invités à encadrer vos résultats.}
\end{minipage}
\vspace{5em}
\begin{minipage}[]{.98\textwidth}
\large{\noindent Si au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa copie et poursuit sa composition en indiquant les raisons des initiatives qu'il est amené à prendre.}
\large{\noindent Si au cours de l'épreuve, vous repérez ce qui vous semble être une erreur d'énoncé, vous le signalez sur votre copie et poursuivez votre composition en indiquant les raisons des initiatives que vous êtes amenés à prendre.}
\end{minipage}
\end{center}
%\text{\Large{Toute réponse non mise en valeur ne sera pas prise en compte.}}\\

@ -45,6 +45,11 @@ Je connais <++> car celui-ci a effectué sa deuxième année de classe préparat
% Raisonner : /5
% Dialoguer : /3
% Si pas de question de cours
% Tableau exercice : /4
% Raisonner : /11
% Dialoguer : /5
\subsection*{Question de cours :}
<++>

@ -6,20 +6,23 @@ setup(
version=version,
packages=find_packages(),
include_package_data=True,
py_modules=['documentex'],
entry_points={
'console_scripts': [
'documentex = documentex.documentex:documentex',
]
},
install_requires=["jinja2","libcurses"],
install_requires=[
"jinja2",
"Click",
"PyInquirer",
],
author="David Denoncin",
author_email="math@denoncin.fr",
url="math.denoncin.fr",
description="Un utilitaire pour créer des arborescence de dossiers LaTeX",
author = "David Denoncin",
author_email = "math@denoncin.fr",
url = "math.denoncin.fr",
description = "Utilitaire pour créer des arborescence de dossiers LaTeX",
classifiers=[
"Licence :: WTFPL"
]
)

Loading…
Cancel
Save