Comment créer un fichier à la volée ?#
Que ce soit dans le cadre d’un travail collaboratif ou par exemple pour poser
une question (La)TeX avec
ECM,
il est parfois nécessaire de fournir, en plus d’un fichier principal (.tex
),
des fichiers externes (.tex
, .bib
, etc.) destinés à être insérés dans le
fichier principal. Il peut alors être pratique que les fichiers externes soient
créés à la volée lors de la compilation du fichier principal. C’est
classiquement le cas pour créer un fichier .bib
ou d’autres fichiers de
données similaires à partir du fichier principal, de sorte à rendre autonome ce
dernier. De même, cela peut être utile pour créer un fichier personnalisé de
style (un package) ou de classe, rendant ainsi encore le source autonome.
C’est ce que permet l’environnement filecontents
dont la syntaxe est :
\begin{filecontents}[⟨option(s)⟩]{⟨nom de fichier⟩}
⟨texte⟩
\end{filecontents}
ou
\begin{filecontents*}[⟨option(s)⟩]{⟨nom de fichier⟩}
⟨texte⟩
\end{filecontents*}
Ces instructions créent, par défaut dans le répertoire courant, un fichier nommé
⟨nom de fichier⟩
dont le contenu est ⟨texte⟩
. Par défaut un fichier déjà
existant n’est pas écrasé.
La version non étoilée de l’environnement filecontent
préfixe le contenu du
ficher créé d’une en-tête de commentaires TeX ; voir l’exemple ci-dessous. La
version étoilée filecontent*
n’inclut par l’en-tête.
Les options possibles sont :
force
ouoverwrite
:Écrase le fichier s’il existe.
noheader
:Omet l’en-tête. Équivalent à utiliser
filecontents*
.nosearch
:Vérifie uniquement si un fichier existe dans le répertoire courant, non dans le chemin complet de recherche.
Cet environnement peut être utilisé n’importe où dans le préambule, bien qu’il
apparaisse souvent avant la commande \documentclass
.
Par exemple, la compilation du fichier test.tex
suivant :
\documentclass{article}
\begin{filecontents}{JH.sty}
\newcommand{\monnom}{Jim Hef{}feron}
\end{filecontents}
\usepackage{JH}
\begin{document}
Un article de \monnom.
\end{document}
produit le fichier JH.sty
:
%% LaTeX2e file `JH.sty'
%% generated by the `filecontents' environment
%% from source `test' on 2015/10/12.
%%
\newcommand{\monnom}{Jim Hef{}feron}
Un autre exemple, faisant usage de la commande \jobname
, est le suivant :
% Fichier externe de bibliographie
\begin{filecontents}[noheader,force]{\jobname.bib}
@mvbook{knuth:ct,
author = {Knuth, Donald E.},
title = {Computers \& Typesetting},
date = {1984/1986},
volumes = 5,
publisher = {Addison-Wesley},
location = {Reading, Mass.},
langid = {english},
langidopts = {variant=american},
sorttitle = {Computers & Typesetting},
indexsorttitle = {Computers & Typesetting},
}
\end{filecontents}
% Fichier externe de données à utiliser avec `pgfplots`
\begin{filecontents}[noheader,force]{donnees-\jobname.dat}
Temps Rep1 Rep2
0 1 1
1 10 0.1
2 100 0.01
\end{filecontents}
% Fichier principal
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[a4paper]{geometry}
\usepackage{pgfplots}
\usepackage{csquotes}
\usepackage{biblatex}
\usepackage{babel}
\pgfplotsset{compat=1.18}
\addbibresource{\jobname.bib}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table[
x=Temps,y=Rep1
]{donnees-\jobname.dat};
\end{axis}
\end{tikzpicture}
On pourra avec profit lire \autocite{knuth:ct}.
\printbibliography
\end{document}