From 459ad40a7832c39ddea3eb9fd6e92451d8c31049 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 16 Jan 2020 14:50:32 +0100 Subject: [PATCH] Work on #348 - generate PDF doc via pandoc / LaTeX --- docs/latex/cassiopee_doc_en.tex | 83 +++++++++++++++++ docs/latex/cassiopee_doc_fr.tex | 83 +++++++++++++++++ docs/latex/logo_pole.png | Bin 0 -> 32461 bytes docs/latex/logos.tex | 14 +++ mkdocs2pdf.py | 153 ++++++++++++++++++++++++++------ 5 files changed, 304 insertions(+), 29 deletions(-) create mode 100644 docs/latex/cassiopee_doc_en.tex create mode 100644 docs/latex/cassiopee_doc_fr.tex create mode 100644 docs/latex/logo_pole.png create mode 100644 docs/latex/logos.tex diff --git a/docs/latex/cassiopee_doc_en.tex b/docs/latex/cassiopee_doc_en.tex new file mode 100644 index 000000000..2fad7dd95 --- /dev/null +++ b/docs/latex/cassiopee_doc_en.tex @@ -0,0 +1,83 @@ +%******************************************************************************* +% @file cassiopee_doc_en.tex +% Modèle de documentation en anglais de Cassiopée, basé sur le modèle de rapport pour INRAE. +% À utiliser avec le modèle https://gitlab.irstea.fr/david.dorchies/latex_models +% @author David Dorchies, Mathias Chouet (INRAE Montpellier) +% @date Jan 2020 +%******************************************************************************* +\documentclass[12pt,a4paper,titlepage,twoside]{report} + + +% Insertion des différents préambules au document +\input{rapport/english/preambule_rapport_english} +\input{rapport_inrae/preambule_inrae} + + +%******************************************************************************* +%Données de titre et d'auteur pour la page de garde, les entêtes et pieds de page +%******************************************************************************* +% Le titre doit être relativement court mais assez explicite +\newcommand{\service}{UMR G-EAU} +\newcommand{\titre}{Cassiopée 4 software} +\newcommand{\sousTitre}{User documentation} +%Statut du document [rapport final, rapport intermédiaire] +% auteur intellectuel, rédacteur du document, il peut y avoir plusieurs auteurs ; chaque auteur est renseigné sous la forme « Prénom NOM » +\newcommand{\auteur}{David DORCHIES} +% date de validation du document (qui entraine sa diffusion)] +\newcommand{\dateValidation}{\today} +% Site INRAE +\newcommand{\site}{ + UMR G-EAU + + INRAE Montpellier +} +% Adresse du site +\newcommand{\adresse}{361 rue J-F Breton - BP 5095\\34196 Montpellier cedex 5} +% Téléphone et télécopie +\newcommand{\telephone}{tél. : +33(0)4670400} +% Sites internet +\newcommand{\website}{ + \url{www.g-eau.fr} \\ + \url{www.inrae.fr} +} + + +%******************************************************************************* + + +\begin{document} +%Supprime les veuves et orphelines +\widowpenalty=10000 +\clubpenalty=10000 +\raggedbottom + +% Integre la page de garde +%\input{title.tex} +\input{rapport_inrae/cover_inrae} +\input{rapport/headfoot_content} + +\cleardoublepage + +% Table des matières +\cleardoublepage +\tableofcontents + + +%******************************************************************************* +% Contenu de la documentation en anglais, généré par pandoc via mkdocs2pdf.py +%******************************************************************************* +\chapter{Documentation} +\input{cassiopee_doc_contents_en} + + +\chapter{List of figures} +\listoffigures +\listoftables + + +% 4ème de couverture +\cleartobackcover +\input{rapport_inrae/backcover_inrae.tex} + + +\end{document} diff --git a/docs/latex/cassiopee_doc_fr.tex b/docs/latex/cassiopee_doc_fr.tex new file mode 100644 index 000000000..a34975a57 --- /dev/null +++ b/docs/latex/cassiopee_doc_fr.tex @@ -0,0 +1,83 @@ +%******************************************************************************* +% @file cassiopee_doc_fr.tex +% Modèle de documentation en français de Cassiopée, basé sur le modèle de rapport pour INRAE. +% À utiliser avec le modèle https://gitlab.irstea.fr/david.dorchies/latex_models +% @author David Dorchies, Mathias Chouet (INRAE Montpellier) +% @date Jan 2020 +%******************************************************************************* +\documentclass[12pt,a4paper,titlepage,twoside]{report} + + +% Insertion des différents préambules au document +\input{rapport/francais/preambule_rapport_francais} +\input{rapport_inrae/preambule_inrae} + + +%******************************************************************************* +%Données de titre et d'auteur pour la page de garde, les entêtes et pieds de page +%******************************************************************************* +% Le titre doit être relativement court mais assez explicite +\newcommand{\service}{UMR G-EAU} +\newcommand{\titre}{Logiciel Cassiopée 4} +\newcommand{\sousTitre}{Documentation utilisateur} +%Statut du document [rapport final, rapport intermédiaire] +% auteur intellectuel, rédacteur du document, il peut y avoir plusieurs auteurs ; chaque auteur est renseigné sous la forme « Prénom NOM » +\newcommand{\auteur}{David DORCHIES} +% date de validation du document (qui entraine sa diffusion)] +\newcommand{\dateValidation}{\today} +% Site INRAE +\newcommand{\site}{ + UMR G-EAU + + INRAE Montpellier +} +% Adresse du site +\newcommand{\adresse}{361 rue J-F Breton - BP 5095\\34196 Montpellier cedex 5} +% Téléphone et télécopie +\newcommand{\telephone}{tél. : +33(0)4670400} +% Sites internet +\newcommand{\website}{ + \url{www.g-eau.fr} \\ + \url{www.inrae.fr} +} + + +%******************************************************************************* + + +\begin{document} +%Supprime les veuves et orphelines +\widowpenalty=10000 +\clubpenalty=10000 +\raggedbottom + +% Integre la page de garde +%\input{title.tex} +\input{rapport_inrae/cover_inrae} +\input{rapport/headfoot_content} + +\cleardoublepage + +% Table des matières +\cleardoublepage +\tableofcontents + + +%******************************************************************************* +% Contenu de la documentation en français, généré par pandoc via mkdocs2pdf.py +%******************************************************************************* +\chapter{Documentation} +\input{cassiopee_doc_contents_fr} + + +\chapter{Table des illustrations} +\listoffigures +\listoftables + + +% 4ème de couverture +\cleartobackcover +\input{rapport_inrae/backcover_inrae.tex} + + +\end{document} diff --git a/docs/latex/logo_pole.png b/docs/latex/logo_pole.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1038067c2e83d700a7161574829742dd2e321b GIT binary patch literal 32461 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	X_G<z)a{1x% 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 literal 0 HcmV?d00001 diff --git a/docs/latex/logos.tex b/docs/latex/logos.tex new file mode 100644 index 000000000..7e5bc3068 --- /dev/null +++ b/docs/latex/logos.tex @@ -0,0 +1,14 @@ +% Example of logos layout for page "cover_inrae.tex" + +\hfill +\includegraphics[width=8cm]{logo_pole.png} + +\vspace{3mm} + +\hfill +\includegraphics[width=4cm]{rapport_inrae/logo_inrae_couv_haut.png} + +\vspace{3mm} + +\hfill +\includegraphics[width=4cm]{rapport_inrae/logo_geau.png} diff --git a/mkdocs2pdf.py b/mkdocs2pdf.py index d25414e10..cc27bab22 100644 --- a/mkdocs2pdf.py +++ b/mkdocs2pdf.py @@ -14,17 +14,32 @@ # - python3 ./mkdocs2pdf.py # -outputDir = 'docs/fr/pdf' -filename = 'cassiopee_docs-fr' +import os +import sys +import yaml +import re +import shutil +baseDir = os.getcwd(); + +buildDir = os.path.join(baseDir, 'docs/pdf_build') +outputDir = os.path.join(baseDir, 'src/assets/docs/pdf') + +latexModelDir = 'latex_models' +modelDir = os.path.join(buildDir, latexModelDir) + +mergedDocFilenamePrefix = 'cassiopee_doc_contents_' +filenamePrefix = 'cassiopee_doc_' + +latexModelRepository = 'https://gitlab.irstea.fr/david.dorchies/latex_models.git' + +# Reads an MkDocs configuration file def readConfig(sYAML): f = open(sYAML, 'r') with f: try: - import yaml dMkdocsYaml = yaml.load(f, Loader=yaml.SafeLoader) except yaml.YAMLError as e: - import sys sys.exit("ERROR on YAML loading {}: {}".format(sYAML, str(e))) return dMkdocsYaml @@ -32,7 +47,6 @@ def getMdHeader(title, level): return "#" * level + " " + title + "\n" def shiftMdHeaders(mdContent, level): - import re if level == 0: return mdContent @@ -44,20 +58,21 @@ def shiftMdHeaders(mdContent, level): lMd[i] = ("#" * level) + item return "\n".join(lMd) -def explore(docs_dir, nav, output = '', level = 0): +# Browses MkDocs configuration file and merges .md files +def exploreAndMerge(docs_dir, nav, output = '', level = 0): """ @param docs_dir path to the mkdocs content files - @param dictionnary with the structure to explore + @param nav dictionnary with the structure to explore @param output markdown files content already merged """ - import os, re if type(nav) is str: nav = [nav] for d in nav: if type(d) is str: filepath = os.path.join(docs_dir, d) f = open(filepath, 'r') - path = os.path.join('..', os.path.dirname(filepath)) + # Triple "../" because file will be compiled from pdf_build/latex_models + path = os.path.join('../../..', os.path.dirname(filepath)) s = f.read() + "\n" # Modification of image and links paths s = re.sub(r'(\!\[.+\]\()(.+)(\))', r'\1'+path+r'/\2\3', s) @@ -70,31 +85,20 @@ def explore(docs_dir, nav, output = '', level = 0): for key, value in d.items(): if type(value) is list: output += "\n" + getMdHeader(key, level) + "\n" - output = explore(docs_dir, value, output, level) + output = exploreAndMerge(docs_dir, value, output, level) level -= 1 return output - -if __name__ == '__main__': - - # Read config - dMkdocsYaml = readConfig('mkdocs.yml') - # Create string with merged MarkDown - s = explore(dMkdocsYaml['docs_dir'], dMkdocsYaml['nav']) - # Save the md file - import os - os.makedirs(outputDir, exist_ok=True) - OutputPath = os.path.join(outputDir, filename) - with open('{}.md'.format(OutputPath), 'w') as f: - f.writelines(s) - # Convert to tex format +# Creates a filePath.tex LaTeX contents file based on filePath.md +def convertMdToTex(filePath): + # Convert .md to .tex os.system( - 'pandoc {0}.md -f markdown -t latex -s -o {0}.tex'.format(OutputPath) + 'pandoc {0}.md -f markdown -t latex -s -o {0}.tex'.format(filePath) ) # Remove header of tex file bContent = False ls = [] - with open('{}.tex'.format(OutputPath), 'r') as f: + with open('{}.tex'.format(filePath), 'r') as f: for line in f: if line.strip() == '\\end{document}': bContent = False @@ -106,9 +110,100 @@ if __name__ == '__main__': for i, line in enumerate(ls): ls[i] = line.replace('\\includegraphics', '\\includegraphics[max size={\\textwidth}{0.9\\textheight}]') - with open('{}.tex'.format(OutputPath), 'w') as f: + with open('{}.tex'.format(filePath), 'w') as f: f.writelines(ls) +def getLatexModel(): + # Clone Git repository + os.chdir(buildDir) + os.system( + 'git clone {} {}'.format(latexModelRepository, latexModelDir) + ) + # back to original working drectory + os.chdir(baseDir) + +# Inject generated merged documentation and necessary resources (template, logos…) +# into LaTeX models directory by symlinking them +def injectContentIntoModel(mergedDocFilenameTex, lang): + """ + @param mergedDocFilenameTex filename of the generated LaTeX merged doc, with its .tex extension, without directory + @param lang language; used to inject content in the right template + """ + # Symlink necessary resources + os.chdir(modelDir) + relPathToMergedTexDoc = os.path.join('..', mergedDocFilenameTex) + os.system( + 'ln -s {} .'.format(relPathToMergedTexDoc) + ) + latexTemplate = 'cassiopee_doc_' + lang + '.tex' + relPathToLatexTemplate = os.path.join('../../latex', latexTemplate) + os.system( + 'ln -s {} .'.format(relPathToLatexTemplate) + ) + os.system( + 'ln -s ../../latex/logo_pole.png .' + ) + os.system( + 'rm rapport_inrae/logos.tex' + ) + os.system( + 'ln -s ../../../latex/logos.tex rapport_inrae/' + ) + # back to original working drectory + os.chdir(baseDir) + +# Build a PDF file from the LaTeX source +def buildPDF(lang): + # Compile LaTeX source + os.chdir(modelDir) + sourceTexFile = 'cassiopee_doc_' + lang + '.tex' + outputPdfFile = 'cassiopee_doc_' + lang + '.pdf' + os.system( + 'latexmk -f -pdf -interaction=nonstopmode {} > /dev/null 2>&1'.format(sourceTexFile) + ) + # copy generated PDF to release directory + shutil.copy(outputPdfFile, outputDir) + # back to original working drectory + os.chdir(baseDir) + +# Creates the PDF documentation file for the given language +def buildDocForLang(lang): + + # Prepare temporary build directory + os.makedirs(buildDir, exist_ok=True) + # Prepare output directory + os.makedirs(outputDir, exist_ok=True) + + # Read config + yamlPath = 'mkdocs-' + lang + '.yml' + print("yamlPath: " + yamlPath) + dMkdocsYaml = readConfig(yamlPath) + + # Create string with merged MarkDown + s = exploreAndMerge(dMkdocsYaml['docs_dir'], dMkdocsYaml['nav']) + # Save the merged .md file + mergedDocFilename = mergedDocFilenamePrefix + lang + print("filename: " + mergedDocFilename) + mergedDocOutputPath = os.path.join(buildDir, mergedDocFilename) + with open('{}.md'.format(mergedDocOutputPath), 'w') as f: + f.writelines(s) + + # Convert to tex format + convertMdToTex(mergedDocOutputPath) + + # Get INRAE report LaTeX model and inject merged content inside + getLatexModel() + injectContentIntoModel(mergedDocFilename + '.tex', lang) + + # Build PDF from LaTeX source + buildPDF(lang) + + # Clean build dir + shutil.rmtree(buildDir) + + +if __name__ == '__main__': -# latexmk -f -pdf -interaction=nonstopmode rapport_inrae.tex -# latexmk -c \ No newline at end of file + for l in ['fr', 'en']: + print('building PDF doc for language "{}"'.format(l)) + buildDocForLang(l) -- GitLab