--- myst: html_meta: keywords: LaTeX,création de fichier, --- # 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](/1_generalites/documentation/listes_de_discussion/comment_rediger_un_exemple_complet_minimal), 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  : ```{noedit} \begin{filecontents}[⟨option(s)⟩]{⟨nom de fichier⟩} ⟨texte⟩ \end{filecontents} ``` ou ```{noedit} \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` ou `overwrite`: É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` : ```{noedit} %% 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`](/2_programmation/compilation/recuperer_le_nom_du_fichier_compile), 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} ``` :::{sources} - https://latexref.xyz/fr/filecontents.html :::