Précédent: \typeout, Monter: Terminal input/output [Table des matières][Index]
\write
Synopsis :
\write numéro{chaîne}
Écrit chaîne vers le fichier journal (.log), vers le
terminal, ou vers un fichier ouvert par \openout
. Par exemple,
\write6
écrit vers le flux textuel numéro 6
Si le code suivant apparaît dans le fichier fichierbase.tex alors cela ouvre le fichier fichierbase.jh, y écrit ‘Bonjour tout le monde !’ et un saut le ligne, et ferme ce fichier.
\newwrite\monfichier \immediate\openout\monfichier=\jobname.jh % \jobname est le nom % de base du fichier racine ... \immediate\write\monfichier{Bonjour tout le monde !} ... \immediate\closeout\monfichier
Le \newwrite
alloue un numéro de flux, en lui donnant un nom
symbolique pour se faciliter la vie, de sorte que flux
\newwrite\monfichier\the\monfichier
produit quelque chose du genre de
‘flux 3’. Ensuite \openout
associe le numéro de flux avec
le nom de fichier fourni. Et puis à la fin TeX exécute
\write3
ce qui place la chaîne dans le fichier.
Typiquement numéro est compris entre 0 et 15, parce que typiquement
les auteurs LaTeX suivent l’exemple précédent et le numéro est alloué
par le système. Si numéro est hors de l’intervalle de 0 à 15 ou
si il n’est pas associé à un fichier ouvert alors LaTeX écrit
chaîne vers le fichier journal. Si numéro est positif alors
en plus LaTeX écrit chaîne vers le terminal. Ainsi, test
\write-1{Bonjour tout le monde !}
place ‘Bonjour tout le
monde !’ suivi d’un saut de ligne dans le fichier journal (c’est ce que
la commande \wlog
fait ; voir \wlog). Et
\write100{Bonjour tout le monde !}
met la même chose dans le
fichier journal mais aussi met ‘Bonjour tout le monde !’ suivi d’un
saut de ligne dans la sortie terminal. (Mais 16, 17, et 18 sont des
valeurs spéciales de numéro ; voir ci-dessous.)
Dans LuaTeX, au lieu de 16 flux de sortie il y en a 256 (voir TeX engines).
Utilisez \write\@auxout{chaîne}
pour écrire vers le
fichier .aux courant qui est associé soit au fichier racine soit
au fichier inclus courant ; et utilisez
\write\@mainaux{chaîne}
pour écrire le fichier
.aux principal. Ces noms symboliques sont définis par LaTeX.
Par défaut LaTeX n’écrit pas chaîne vers le fichier
immédiatement. C’est ainsi parce que, par exemple, vous pourriez avoir
besoin de \write
pour sauvegarder le numéro de page courant, mais
au moment où TeX rencontre une commande \write
typiquement il
ne connaît pas quel est le numéro de page, puisque il n’a pas encore
découpé la sortie en pages. Ainsi, vous utilisez \write
dans
l’un des trois contextes suivants :
\immediate\write\@auxout{chaîne} %1 \write\@auxout{chaîne} %2 \protected@write\@auxout{}{chaîne} %3
\edef
de sorte que pour empêcher le
développement vous devez utiliser \noexpand
, un toks
, etc.
mais avec la différence que vous devez utiliser #
au lieu de
##
).
\shipout
). Au moment du
\shipout
, chaîne est développée à fond.
\protected@write
, est semblable au deuxième sauf
que vous pouvez utiliser \protect
pour éviter le
développement. Le premier argument qui est en plus vous permet d’insérer
localement des définitions supplémentaires pour que plus de macros
soient protégées ou pour avoir d’autres définitions spéciales pendant
l’écriture.
Voici un exemple simple de développement avec \write
dans lequel
chaîne contient une séquence de contrôle \triplex
que l’on
a définie comme le texte ‘XYZ’ :
\newwrite\fichierjh \openout\fichierjh=test.jh \newcommand{\triplex}{XYZ} \write\fichierjh{test \triplex test}
Ceci résulte en ce que le fichier test.jh contienne le texte ‘test XYZtest’ suivi d’un saut de ligne.
Les cas où numéro vaut 16, 17, ou 18 sont spéciaux. À cause du
comportement de \write
quand numéro est hors de
l’intervalle de 0 à 15 qu’on a déjà décrit plus haut, dans Plain TeX
\write16
et \write17
étaient parfois utilisés pour écrire
dans le fichier journal et le terminal ; toutefois, dans LaTeX, la
façon naturelle de faire ceci est d’utiliser \typeout
(voir \typeout). La commande \write18
est encore plus
spéciale ; les systèmes TeX modernes l’utilisent pour passer des
commandes au système d’exploitation (voir \write18).
D’ordinaire \write
produit en sortie une unique ligne. On peut y
insérer un saut de ligne avec ^^J
. Ainsi, l’exemple suivant
produit deux lignes dans le fichier journal :
\wlog{Les lignes parallèles ont beaucoup en commun.^^JMais elles ne se rencontrent jamais.}
Un cas usuel dans lequel des auteurs tentent d’écrire dans leur propre
fichier est pour les réponses à des exercices, ou dans quelque autre
situation où vous désirez écrire en sortie verbatim, sans développer les
macros. CTAN a plusieurs paquetages pour cela ; parmi lesquels
answers
.
• \write et la sécurité: | Sécurité. | |
• \message: | Écrit du texte vers le fichier journal et le terminal. | |
• \wlog: | Écrit du texte vers le fichier journal. | |
• \write18: | Exécute une commande du système d’exploitation. |
Précédent: \typeout, Monter: Terminal input/output [Table des matières][Index]