(latex_config)= # LaTeX ``` {warning} {{phystool}} compile les fichiers {{latex}} avec `pdflatex` et l'option `--shell-escape` activée. Ceci représente un risque de sécurité car du code malveillant pourrait être exécuté. Soyez certain que les fichiers, les paquets et classes que vous utilisez pour compiler vos sources sont dignes de confiance. ``` ## Vue d'ensemble {{phystool}} est conçu de façon à laisser à l'utilisateur la liberté de compiler ses documents {{latex}} comme il le souhaite. L'idée de base est de faire en sorte que chaque {{pdbfile}} génère un {{pdf}} indépendant qui puisse facilement être inclus dans une série d'exercices, un test ou tout autre document. Si l'objectif est, par exemple, de produire une série d'exercices, quelques lignes de code suffisent: ```{code-block} latex :linenos: :caption: serie-exercices.tex :name: exercise-sheet \documentclass[pdb=~/physdb_dev]{physexos} \begin{document} \PdbExercise{9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888} \PdbExercise{b7ac63e2-b44b-4848-9f15-9531c93c4e95} \end{document} ``` Ce fichier {{tex}} inclut deux {{pdbfile}} simplement en faisant référence à leur {{uuid}}. Le contenu de l'un de ces fichiers est: ```{code-block} latex :linenos: :caption: 9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888.tex \begin{exercise}{Eureka} Vérifiez que la période d’oscillation d'Archimède est indépendante de la température du chat de Schrödinger. \end{exercise} ``` Comme indiqué [précédemment](#definition_type), {{phystool}} est capable de déterminer que ce fichier est de type `exercice` avec `Eureka` pour titre, car son `pattern` match la première ligne. {{phystool}} est aussi capable de le compiler indépendamment en créant un fichier temporaire dont le contenu est: ```{code-block} latex :linenos: :caption: /tmp/physauto-9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888.tex :name: physauto-temporary-file \documentclass{physauto} \PdbSetDBPath{~/physdb_dev} \begin{document} \PdbInclude{9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888} \end{document} ``` ## En détail Les {{pdbfile}} marqués `standalone=false` (par défaut), ne peuvent pas être compilé directement et doivent donc être inclus avant compilation dans un fichier temporaire. Ce [fichier temporaire](#physauto-temporary-file) est automatiquement crée par {{phystool}} et possède toujours la même structure. Par contre, les fichiers marqués `standalone=true`, peuvent être compilé tel quel et ne nécessitent pas de fichier temporaire. ```{important} Comme le fichier temporaire crée lors de la compilation n'est pas modifiable par l'utilisateur, il faut que la classe `auto_latex` fournisse toutes les définitions, commandes et environnement nécessaires à la compilation. ``` ```{important} Pour que {{phystool}} puisse compiler les fichiers {{pdbfile}}, il doit avoir accès aux classes et éventuels paquets personnels utilisés et ceux-ci doivent donc être placés dans le répertoire `phystex`. ``` ```{note} Afin de permettre à {{phystool}} de parser correctement les logs {{latex}}, il faut légèrement modifier la configuration du compilateur afin que les logs affichent des lignes plus longues. Pour cela, il suffit de modifier/rajouter la ligne suivante au fichier `texmf.cnf`: max_print_line=1000 ``` ```{note} Lorsqu'un fichier est compilé avec {{phystool}}, les fichiers auxiliaires sont tous placés dans des sous-répertoire de `~/.phystool/texaux/` reflétant le chemin du fichier de base. Par exemple, les fichiers auxiliaires produit durant la compilation de `~/travail/serie-exercies.tex` seront placés dans `~/.phystool/texaux/travail/`. Cela permet de ne pas polluer les répertoires contenant le code source {{latex}} avec des fichiers de compilation. ``` La classe `auto_latex` définie dans la [configuration de la base de donnée](#configuration_db) est la classe centrale sur laquelle repose la compilation de tous les {{pdbfile}} non `standalone`. Le [fichier temporaire](#physauto-temporary-file) fait appel à deux commandes qui **doivent** être définies dans cette classe: `\PdbSetDBPath` : Cette commande prend, comme argument obligatoire, le chemin absolu de la base de donnée afin de l'assigner à une variable réutilisée lors de chaque inclusion. ```{code} latex \NewDocumentCommand{\PdbSetDBPath}{m}{ \tl_gset:Nn \c_pdb_path_tl {#1} } ``` `\PdbInclude` : Cette commande prend, comme argument obligatoire, le {{uuid}} du {{pdbfile}} afin d'inclure son contenu {{tex}} dans le fichier parent: ```{code} latex \NewDocumentCommand{\PdbInclude}{m}{ \group_begin: \file_input:n {\c_pdb_path_tl #1.tex} \group_end: } ``` ## {{phystex}} La librairie {{phystex}} peut servir d'exemple pour définir différents rendus pour un même {{pdbfile}} en fonction du type de document à produire. Par exemple, dans cette librairie, il existe trois classes principales qui permettent un rendu différent de l'environnement 'exercise' pour une série d'exercices, un test ou un polycopié. Le rendu par défaut produit par `physauto` est différent de celui de ces trois classes. ```{figure} _static/phystex-dependency-graph.png :alt: Graphe de dépendance phystex :width: 100% :align: center Arbre de dépendance des classes et paquets {{latex}} fournis dans {{phystex}} ```