Ajoute l'export latex d'une SAE et les macros pour la représenter en latex

This commit is contained in:
Cléo Baras 2021-04-02 17:38:56 +02:00
parent 2549fd6950
commit 838aa4925f
7 changed files with 324 additions and 95 deletions

View File

@ -27,7 +27,7 @@
% Variables globales
% **************************************
\newcounter{cptsemestre} %
\newcounter{cptressource} %
\newcounter{cptR} %
\newcounter{cptsae}
\xdef\comploop{A,B,C} % Les compétences de la ressource
@ -48,12 +48,13 @@
\def\nouveausemestre#1{
\addtocounter{cptsemestre}{1} % Incrémente le compteur de semestre
\setcounter{cptressource}{0} % RAZ du compteur de ressource
\setcounter{cptR}{0} % RAZ du compteur de ressource total
\setcounter{cptsae}{0}
\def\currentsemestre{\Alph{cptsemestre}} % Lettre du semestre courant : A=1, B=2, ...
\newcounter{cptressource\currentsemestre} % le compteur des ressources dans le semestre
\newcounter{cptR\currentsemestre} % le compteur des ressources dans le semestre
\newcounter{cptS\currentsemestre} % le compteur des sae dans le semestre
\expandafter\def\csname semestrename\currentsemestre\endcsname{Semestre \arabic{cptsemestre}}
\expandafter\def\csname semestrenumero\currentsemestre\endcsname{\arabic{cptsemestre}}
}
@ -67,34 +68,31 @@
% Déclaration de la ressource :
% \nouvelleressource{code_ressource}{intitule_ressource}
\def\nouvelleressource#1#2{
\addtocounter{cptressource}{1} % Ajoute une ressource (tous semestres confondu)
\addtocounter{cptressource\currentsemestre}{1} % Ajoute une ressource au semestre
\def\currentressource{\currentsemestre\Alph{cptressource}} % Ressource RAA = A pour semestre 1 puis A pour ressource n°1
\addtocounter{cptR}{1} % Ajoute une ressource (tous semestres confondu)
\addtocounter{cptR\currentsemestre}{1} % Ajoute une ressource au semestre
\def\currentRressource{\currentsemestre\Alph{cptR}} % Ressource RAA = A pour semestre 1 puis A pour ressource n°1
\expandafter\xdef\csname Rcode\currentressource\endcsname{#1} % code
\expandafter\xdef\csname Rname\currentressource\endcsname{#2} % nom/intitule
\expandafter\xdef\csname Rsem\currentressource\endcsname{\csname semestrenumero\currentsemestre\endcsname} % nom du semestre
\expandafter\xdef\csname Rcode\currentRressource\endcsname{#1} % code
\expandafter\xdef\csname Rname\currentRressource\endcsname{#2} % nom/intitule
\expandafter\xdef\csname Rsem\currentRressource\endcsname{\csname semestrenumero\currentsemestre\endcsname} % nom du semestre
\newcounter{cptcontenu\currentressource} % le compteur de contenu pour la ressource, mis à 0
\newcounter{cptressourcecomp\currentressource} % le compteur de compétences rattachées à la ressource
\newcounter{cptressourcesae\currentressource} % Le compteur de sae
\newcounter{cptressourceprerequis\currentressource}
%\definecollection{ressourcedescription\currentressource}
\newcounter{cptRcomp\currentRressource} % le compteur de compétences rattachées à la ressource
\newcounter{cptRsae\currentRressource} % Le compteur de sae
\newcounter{cptRprerequis\currentRressource}
}
% ****************************
% Ajout des heures à la ressource courante
\def\ajoutRheures#1#2{
\expandafter\xdef\csname Rtraining\currentressource\endcsname{#1} % heures de formation encadrées
\expandafter\xdef\csname Rtp\currentressource\endcsname{#2} % heures de projet
\expandafter\xdef\csname Rtraining\currentRressource\endcsname{#1} % heures de formation encadrées
\expandafter\xdef\csname Rtp\currentRressource\endcsname{#2} % heures de projet
}
% ****************************
% Ajout du descriptif (ancrage)
% Ajout du descriptif (ancrage professionnel)
\def\ajoutRancrage#1{
\begingroup\let\+\relax
\expandafter\gdef\csname Rancrage\currentressource\endcsname{\noexpand #1} % descriptif
\expandafter\gdef\csname Rancrage\currentRressource\endcsname{\noexpand #1} % descriptif
\endgroup
}
@ -102,7 +100,7 @@
% Ajout des contenus
\def\ajoutRcontenudetaille#1{
\begingroup\let\+\relax
\expandafter\gdef\csname Rcontenu\currentressource\endcsname{\noexpand #1} % liste de contenu
\expandafter\gdef\csname Rcontenu\currentRressource\endcsname{\noexpand #1} % liste de contenu
\endgroup
}
@ -110,50 +108,137 @@
% Ajout des compétences
% \ajoutcompetence{nom_competence}{niveau}
\def\ajoutRcompetence#1#2{
\addtocounter{cptressourcecomp\currentressource}{1} % le compteur de la comp dans la ressource
\xdef\currentcomp{\Alph{cptressourcecomp\currentressource}} % La lettre de la comp dans la ressource
\addtocounter{cptRcomp\currentRressource}{1} % le compteur de la comp dans la ressource
\xdef\currentRcomp{\Alph{cptRcomp\currentRressource}} % La lettre de la comp dans la ressource
\expandafter\xdef\csname Rcomp\currentressource\currentcomp\endcsname{#1} % le nom de la comp
\expandafter\xdef\csname Rniveau\currentressource\currentcomp\endcsname{#2} % le nom de la comp
\expandafter\xdef\csname Rcomp\currentRressource\currentRcomp\endcsname{#1} % le nom de la comp
\expandafter\xdef\csname Rniveau\currentRressource\currentRcomp\endcsname{#2} % le nom de la comp
\newcounter{cptressourceac\currentressource\currentcomp} % le compteur d'ac pour la compétence rattachées à la ressource
\newcounter{cptRac\currentRressource\currentRcomp} % le compteur d'ac pour la compétence rattachées à la ressource
}
% ****************************
% Ajout d'AC aux compétences
\def\ajoutRac#1#2{
\addtocounter{cptressourceac\currentressource\currentcomp}{1} % le compteur de l'ac pour la comp dans la ressource
\xdef\currentac{\Alph{cptressourceac\currentressource\currentcomp}} % La lettre de l'ac pour la comp dans la ressource
\addtocounter{cptRac\currentRressource\currentRcomp}{1} % le compteur de l'ac pour la comp dans la ressource
\xdef\currentRac{\Alph{cptRac\currentRressource\currentRcomp}} % La lettre de l'ac pour la comp dans la ressource
\expandafter\xdef\csname Raccode\currentressource\currentcomp\currentac\endcsname{#1} % le nom de la comp
\expandafter\xdef\csname Racname\currentressource\currentcomp\currentac\endcsname{#2} % le nom de la comp
\expandafter\xdef\csname Raccode\currentRressource\currentRcomp\currentRac\endcsname{#1} % le nom de la comp
\expandafter\xdef\csname Racname\currentRressource\currentRcomp\currentRac\endcsname{#2} % le nom de la comp
}
% ****************************
% Ajout des SAE
\def\ajoutRsae#1#2{
\addtocounter{cptressourcesae\currentressource}{1} % le compteur de la sae dans la ressource
\xdef\currentsae{\Alph{cptressourcesae\currentressource}} % La lettre
\addtocounter{cptRsae\currentRressource}{1} % le compteur de la sae dans la ressource
\xdef\currentRsae{\Alph{cptRsae\currentRressource}} % La lettre
\expandafter\xdef\csname Rsaecode\currentressource\currentsae\endcsname{#1} %
\expandafter\xdef\csname Rsaename\currentressource\currentsae\endcsname{#2} %
\expandafter\xdef\csname Rsaecode\currentRressource\currentRsae\endcsname{#1} %
\expandafter\xdef\csname Rsaename\currentRressource\currentRsae\endcsname{#2} %
}
% ****************************
% Ajout des prerequis
\def\ajoutRprerequis#1#2{
\addtocounter{cptressourceprerequis\currentressource}{1} % le compteur du prerequis dans la ressource
\xdef\currentprerequis{\Alph{cptressourceprerequis\currentressource}} % La lettre
\addtocounter{cptRprerequis\currentRressource}{1} % le compteur du prerequis dans la ressource
\xdef\currentprerequis{\Alph{cptRprerequis\currentRressource}} % La lettre
\expandafter\xdef\csname Rprerequiscode\currentressource\currentprerequis\endcsname{#1} %
\expandafter\xdef\csname Rprerequisname\currentressource\currentprerequis\endcsname{#2} %
\expandafter\xdef\csname Rprerequiscode\currentRressource\currentprerequis\endcsname{#1} %
\expandafter\xdef\csname Rprerequisname\currentRressource\currentprerequis\endcsname{#2} %
}
% ****************************
% Ajout des mots-clés
\def\ajoutRmotscles#1{
\expandafter\xdef\csname Rmotscles\currentressource\endcsname{#1} % descriptif
\expandafter\xdef\csname Rmotscles\currentRressource\endcsname{#1} % descriptif
}
% **********************************************
% Déclaration d'une SAé
% **********************************************
% ****************************
% Déclaration de la ressource :
% \nouvellesae{code_sae}{intitule_sae}
\def\nouvellesae#1#2{
\addtocounter{cptsae}{1} % Ajoute une ressource (tous semestres confondu)
\addtocounter{cptS\currentsemestre}{1} % Ajoute une ressource au semestre
\def\currentSsae{\currentsemestre\Alph{cptsae}} % Ressource RAA = A pour semestre 1 puis A pour ressource n°1
\expandafter\xdef\csname Scode\currentSsae\endcsname{#1} % code
\expandafter\xdef\csname Sname\currentSsae\endcsname{#2} % nom/intitule
\expandafter\xdef\csname Ssem\currentSsae\endcsname{\csname semestrenumero\currentSsae\endcsname} % nom du semestre
\newcounter{cptScomp\currentSsae} % le compteur de compétences rattachées à la ressource
\newcounter{cptSressource\currentSsae} % Le compteur de ressources dans la SAé
}
% ****************************
% Ajout des heures à la saé courante
\def\ajoutSheures#1#2#3{
\expandafter\xdef\csname Straining\currentSsae\endcsname{#1} % heures de formation encadrées
\expandafter\xdef\csname Stp\currentSsae\endcsname{#2} % heures de tp
\expandafter\xdef\csname Sprojet\currentSsae\endcsname{#3} % heures de projet
}
% ****************************
% Ajout du descriptif (description des objectifs)
\def\ajoutSdescription#1{
\begingroup\let\+\relax
\expandafter\gdef\csname Rdescriptif\currentSsae\endcsname{\noexpand #1} % descriptif
\endgroup
}
% ****************************
% Ajout des compétences
% \ajoutcompetence{nom_competence}{niveau}
\def\ajoutScompetence#1#2{
\addtocounter{cptScomp\currentSsae}{1} % le compteur de la comp dans la ressource
\xdef\currentScomp{\Alph{cptScomp\currentSsae}} % La lettre de la comp dans la ressource
\expandafter\xdef\csname Scomp\currentSsae\currentScomp\endcsname{#1} % le nom de la comp
\expandafter\xdef\csname Sniveau\currentSsae\currentScomp\endcsname{#2} % le nom de la comp
\newcounter{cptSac\currentSsae\currentScomp} % le compteur d'ac pour la compétence rattachées à la ressource
}
% ****************************
% Ajout d'AC aux compétences
\def\ajoutSac#1#2{
\addtocounter{cptSac\currentSsae\currentScomp}{1} % le compteur de l'ac pour la comp dans la ressource
\xdef\currentSac{\Alph{cptSac\currentSsae\currentScomp}} % La lettre de l'ac pour la comp dans la ressource
\expandafter\xdef\csname Raccode\currentSsae\currentScomp\currentSac\endcsname{#1} % le nom de la comp
\expandafter\xdef\csname Racname\currentSsae\currentScomp\currentSac\endcsname{#2} % le nom de la comp
}
% ****************************
% Ajout des ressources mobilisées par l'étudiant
\def\ajoutSressources#1#2{
\addtocounter{cptSressource\currentSsae}{1} % le compteur de la sae dans la ressource
\xdef\currentSressource{\Alph{cptSressource\currentSsae}} % La lettre
\expandafter\xdef\csname Sressourcecode\currentSsae\currentSressource\endcsname{#1} %
\expandafter\xdef\csname Sressourcename\currentSsae\currentSressource\endcsname{#2} %
}
% ****************************
% Ajout des livrables
\def\ajoutSlivrables#1{
\begingroup\let\+\relax
\expandafter\gdef\csname Rlivrables\currentSsae\endcsname{\noexpand #1} % descriptif
\endgroup
}
% ****************************
% Ajout des mots-clés
\def\ajoutSmotscles#1{
\expandafter\xdef\csname Smotscles\currentSsae\endcsname{#1} % mots-clés
}

View File

@ -14,7 +14,7 @@
\xdef\CODE{#1} % le code de la ressource sous la forme AA
\xdef\COMP{#2} % le code de la compétence sous la forme A
\forLoop{1}{\value{cptressourceac\CODE\COMP}}{noligne}{
\forLoop{1}{\value{cptRac\CODE\COMP}}{noligne}{
\xdef\contenu{{\csname Raccode\CODE\COMP\Alph{noligne}\endcsname} |
{\csname Racname\CODE\COMP\Alph{noligne}\endcsname}}
\contenu
@ -26,11 +26,11 @@
% Tableau des SAE
\newcommand*{\tableauSAE}[1]{%
\xdef\CODE{#1} % le code de la ressource sous la forme AA
\ifthenelse{\equal{\value{cptressourcesae\CODE}}{0}}{ % Si pas de prérequis
\ifthenelse{\equal{\value{cptRsae\CODE}}{0}}{ % Si pas de prérequis
Aucune
}{
\begin{tabular}[t]{@{}T@{}}%
\forLoop{1}{\value{cptressourcesae\CODE}}{noligne}{
\forLoop{1}{\value{cptRsae\CODE}}{noligne}{
\xdef\contenu{{\csname Rsaecode\CODE\Alph{noligne}\endcsname} |
{\csname Rsaename\CODE\Alph{noligne}\endcsname}}
\contenu
@ -43,12 +43,12 @@
% Tableau des pré-requis
\newcommand*{\tableauPrerequis}[1]{%
\xdef\CODE{#1} % le code de la ressource sous la forme AA
\ifthenelse{\equal{\value{cptressourceprerequis\CODE}}{0}}{ % Si pas de prérequis
\ifthenelse{\equal{\value{cptRprerequis\CODE}}{0}}{ % Si pas de prérequis
Aucun
}{ % Si des pré-requis
\begin{tabular}[t]{@{}T@{}}%
\forLoop{1}{\value{cptressourceprerequis\CODE}}{noligne}{
\forLoop{1}{\value{cptRprerequis\CODE}}{noligne}{
\xdef\contenu{{\csname Rprerequiscode\CODE\Alph{noligne}\endcsname} |
{\csname Rprerequisname\CODE\Alph{noligne}\endcsname}}
\contenu

View File

@ -91,21 +91,21 @@ bottom=15mm
%\tableauACD{AA}{A}
% \tableauAC{AA}{A}
\newcounter{noressource}
\newcounter{nosae}
% Les ressources du semestre 1
\forLoop{1}{\value{cptressourceA}}{noressource}{
%A\Alph{noressource}
\tableauRessource{A\Alph{noressource}}
\newpage
}
%\forLoop{1}{\value{cptRA}}{noressource}{
%%A\Alph{noressource}
%\tableauRessource{A\Alph{noressource}}
%\newpage
%}
\forLoop{1}{\value{cptressourceB}}{noressource}{
%A\Alph{noressource}
\tableauRessource{B\Alph{noressource}}
\newpage
}
%\forLoop{1}{\value{cptressourceB}}{noressource}{
%%A\Alph{noressource}
%\tableauRessource{B\Alph{noressource}}
%\newpage
%}
%\tableauRessource{AA}
%\tableauRessource{AB}

View File

@ -4,36 +4,38 @@
\nouveausemestre{}
\input{ressources/R101.tex}
\input{ressources/R102.tex}
\input{ressources/R103.tex}
\input{ressources/R104.tex}
\input{ressources/R105.tex}
\input{ressources/R106.tex}
\input{ressources/R107.tex}
\input{ressources/R108.tex}
\input{ressources/R109.tex}
\input{ressources/R110.tex}
\input{ressources/R111.tex}
\input{ressources/R112.tex}
\input{ressources/R113.tex}
\input{ressources/R114.tex}
\input{ressources/R115.tex}
%\input{ressources/R102.tex}
%\input{ressources/R103.tex}
%\input{ressources/R104.tex}
%\input{ressources/R105.tex}
%\input{ressources/R106.tex}
%\input{ressources/R107.tex}
%\input{ressources/R108.tex}
%\input{ressources/R109.tex}
%\input{ressources/R110.tex}
%\input{ressources/R111.tex}
%\input{ressources/R112.tex}
%\input{ressources/R113.tex}
%\input{ressources/R114.tex}
%\input{ressources/R115.tex}
\input{saes/SAE11.tex}
% Semestre 2
\nouveausemestre{}
\input{ressources/R201.tex}
\input{ressources/R202.tex}
\input{ressources/R203.tex}
\input{ressources/R204.tex}
\input{ressources/R205.tex}
\input{ressources/R206.tex}
\input{ressources/R207.tex}
\input{ressources/R208.tex}
\input{ressources/R209.tex}
\input{ressources/R210.tex}
\input{ressources/R211.tex}
\input{ressources/R212.tex}
\input{ressources/R213.tex}
\input{ressources/R214.tex}
%
%% Semestre 2
%\nouveausemestre{}
%
%\input{ressources/R201.tex}
%\input{ressources/R202.tex}
%\input{ressources/R203.tex}
%\input{ressources/R204.tex}
%\input{ressources/R205.tex}
%\input{ressources/R206.tex}
%\input{ressources/R207.tex}
%\input{ressources/R208.tex}
%\input{ressources/R209.tex}
%\input{ressources/R210.tex}
%\input{ressources/R211.tex}
%\input{ressources/R212.tex}
%\input{ressources/R213.tex}
%\input{ressources/R214.tex}

View File

@ -1,4 +1,4 @@
from ressource import Ressource
from ressource import Ressource, SAE
from ressourcedocx import *
import pypandoc
@ -13,7 +13,6 @@ fichiers = os.listdir(REPERTOIRE_RESSOURCES)
fichiers = sorted(fichiers) # tri par ordre alphabétique
ressources = {"S1": [], "S2": []}
saes = {"S1": [], "S2": []}
for file in fichiers:
fichieryaml = REPERTOIRE_RESSOURCES + "/" + file
if file.startswith("R"): # si c'est une ressources
@ -21,6 +20,20 @@ for file in fichiers:
sem = "S" + str(r.ressource["semestre"])
ressources[sem].append(r)
# Chargement des ressources
REPERTOIRE_SAE = "export"
REPERTOIRE_LATEX = "../latex/saes"
fichiers = os.listdir(REPERTOIRE_RESSOURCES)
fichiers = sorted(fichiers) # tri par ordre alphabétique
saes = {"S1": [], "S2": []}
for file in fichiers:
fichieryaml = REPERTOIRE_RESSOURCES + "/" + file
if file.startswith("S"): # si c'est une sae
s = SAE(fichieryaml)
sem = "S" + str(s.sae["semestre"])
saes[sem].append(s)
# Eléments de tests
r1 = ressources["S1"][0]
@ -30,12 +43,23 @@ output1 = pypandoc.convert_text(temp1, 'tex', format='md',
print("ici")
# Export latex
for sem in ressources:
for r in ressources[sem]:
# Export latex des ressources
if False:
for sem in ressources:
for r in ressources[sem]:
fichierlatex = REPERTOIRE_LATEX + "/" + "{}.tex".format(r.ressource["code"])
contenu = r.to_latex()
fichierlatex = REPERTOIRE_LATEX + "/" + "{}.tex".format(r.ressource["code"])
contenu = r.to_latex()
with open(fichierlatex, "w", encoding="utf8") as fid:
fid.write(contenu)
print(f"Export de {fichierlatex} ")
# Export latex des ressources
for sem in saes:
for s in saes[sem]:
fichierlatex = REPERTOIRE_LATEX + "/" + "{}.tex".format(s.sae["code"].replace("É", "E"))
contenu = s.to_latex()
with open(fichierlatex, "w", encoding="utf8") as fid:
fid.write(contenu)
print(f"Export de {fichierlatex} ")

37
python/pn/modele_sae.tex Normal file
View File

@ -0,0 +1,37 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ressources
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\nouvellesae{#code}{#titre}
\ajoutSheures{#heures_encadrees}{#heures_tp}{#heures_projet}
%% Les compétences et les ACs
\ajoutScompetence{RT1-Administrer}{\niveauA}
#compRT1
\ajoutScompetence{RT2-Connecter}{\niveauA}
#compRT2
\ajoutScompetence{RT3-Programmer}{\niveauA}
#compRT3
% Le description
\ajoutSdescription{
#description
}
% Les ressources
#ressources
% Livrable
\ajoutSlivrables{
#livrables
}
% Mots-clés
\ajoutSmotscles{#motscles}

View File

@ -102,4 +102,85 @@ class Ressource():
# chaine = chaine.replace("&", "\&")
chaine = chaine.replace("\\tightlist\n", "")
return chaine
return chaine
class SAE():
"""Modélise une ressource lorsqu'elle est extraite d'un yaml"""
__LOGGER = logging.getLogger(__name__)
def __init__(self, fichieryaml):
with open(fichieryaml, "r", encoding="utf8") as fid:
yaml = ruamel.yaml.YAML()
try:
self.sae = yaml.load(fid.read())
except:
Ressource.__LOGGER.warning(f"Pb de chargement de {fichieryaml}")
def to_latex(self, modele="pn/modele_sae.tex"):
"""Génère le code latex décrivant la ressource"""
modlatex = get_modele(modele) #"pn/modele_ressource.tex")
# Préparation des ac
ajoutac = "\\ajoutSac{%s}{%s}"
compRT = []
for accomp in self.sae["acs"]:
comps = []
for no_ac in range(len(self.sae["acs"][accomp])): # les ac de la comp
code_ac = self.sae["acs"][accomp][no_ac]
comps.append( ajoutac % (code_ac, DATA_ACS[accomp][code_ac]) )
compRT.append("\n".join(comps))
# Préparation des ressources
ajoutressources = "\\ajoutSressources{%s}{%s}"
resRT = []
for (i, res) in enumerate(self.sae["ressources"]): # in range(len(self.apprentissages)):
resRT.append(ajoutressources % (res, get_officiel_ressource_name_by_code(res)))
ressources = "\n".join(resRT)
# préparation du descriptif
descriptif = self.sae["description"]
if descriptif == "Aucun":
descriptif = ""
SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de description")
else:
descriptif = descriptif.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml
descriptif = md_to_latex(descriptif)
# préparation des livrables
livrables = self.sae["livrables"]
if livrables == "Aucun":
livrables = ""
SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de livrables")
else:
livrables = livrables.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml
livrables = md_to_latex(livrables)
chaine = ""
chaine = TemplateLatex(modlatex).substitute(code=self.sae["code"],
titre=self.sae["titre"],
heures_encadrees=self.sae["heures_encadrees"],
heures_tp=self.sae["tp"],
heures_projet=self.sae["projet"],
compRT1=compRT[0],
compRT2=compRT[1],
compRT3=compRT[2],
description=caracteres_recalcitrants(descriptif),
ressources=ressources,
livrables= livrables,
motscles = caracteres_recalcitrants(self.sae["motscles"]),
)
# chaine = chaine.replace("&", "\&")
chaine = chaine.replace("\\tightlist\n", "")
return chaine
def md_to_latex(contenu):
"""Réalise la conversion markdown to latex avec pypandoc"""
contenu = pypandoc.convert_text(contenu, 'tex', format='md',
extra_args=['--atx-headers'])
contenu = contenu.replace("\r\n", "\n")
contenu = caracteres_recalcitrants(contenu)
contenu = remove_ligne_vide(contenu)
return contenu