LaTeX

Avertissement

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:

serie-exercices.tex
1    \documentclass[pdb=~/tuto_db]{physperso}
2
3    \begin{document}
4        \PdbExercise{9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888}
5        \PdbExercise{b7ac63e2-b44b-4848-9f15-9531c93c4e95}
6    \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:

9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888.tex
1    \begin{exercise}{Eureka}
2        Vérifiez que la période d’oscillation d'Archimède est indépendante de
3        la température du chat de Schrödinger.
4    \end{exercise}

Comme indiqué précédemment, 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:

/tmp/physauto-9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888.tex
1    \documentclass{physauto}
2    \PdbSetDBPath{~/tuto_db}
3    \begin{document}
4        \PdbPrint{9d1f2b06-fc3a-4eb4-8f7e-dadc8f0f0888}
5    \end{document}

En détail

Les PDBFile qui sont 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 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

Pour que phystool puisse compiler les fichiers PDBFile, il doit avoir accès aux classes et éventuels paquets personnels utilisés. C’est pour ces raisons que tous ces fichiers doivent être placé dans le répertoire phystex.

Le bénéfice additionnel à cette centralisation est de faciliter le partage de documents.

Important

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.

Classe auto_latex

La classe auto_latex est la classe centrale sur laquelle repose la compilation de tous les PDBFile non standalone. Le fichier temporaire 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.

\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:

\NewDocumentCommand{\PdbInclude}{m}{
	\group_begin:
		\file_input:n {\c_pdb_path_tl #1.tex}
	\group_end:
}

Note

Les définitions des commandes \PdbSetDBPath et \PdbInclude peuvent être modifiées à volonté. Les deux définitions proposées ci-dessus sont celle qui ont été implémentée dans phystex mais d’autres définitions sont possible.

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 contienne toutes les définitions, commandes et environnement nécessaires. Dans l’exemple donnée, l’environnemnt exercise doit aussi être définit.

Classes personnelles

Dans l’exemple de série d’exercices, la classe physperso prend comme option le chemin de la base de donnée et définit la commande \PdbExercise. Cette commande est similaire à la commande \PdbInclude de physauto, mais peut être spécialisée pour l’inclusion d’exercices. Il suffit pour cela de définir un autre comportement pour l’environnement exercise.

Note

En définissant habilement les classes \(\LaTeX\), il est possible d’obtenir différents rendus pour un même PDBFile. Par exemple, le rendu de l’environnement “exercise” peut être différent dans une série d’exercice, dans un test ou dans un polycopié. Voici ma configuration en exemple.