Page 1 sur 1

[ok]Exporter le corps du document dans un fichier auxiliaire

MessagePosté: Jeudi 08 Juin 2017, 10:32
par evariste_G
Bonjour.

Je souhaite créer un sty dans lequel j'ai besoin de sauvegarder tout ce qu'il y a dans l'environnement \begin{document} \end{document} dans un fichier auxiliaire.
Pour cela, j'utilise
Code: Tout sélectionner
\AtBeginDocument{}
\AtEndDocument{}

mais je n'arrive pas à sauvegarder le contenu. J'ai tenté avec le package fancyvrb :
Code: Tout sélectionner
\AtBeginDocument{\VerbatimEnvironment\begin{VerbatimOut}{\jobname.sav}}   
\AtEndDocument{\end{VerbatimOut}\input{\jobname.sav}}

J'ai atteint mes limites et je sais qu'il me manque beaucoup de notions nécessaires pour faire ce dont j'ai besoin.

Y aurait-il quelqu'un qui sache faire cela ?

Re: Exporter le corps du document dans un fichier auxiliaire

MessagePosté: Jeudi 08 Juin 2017, 15:56
par un bon petit
Quelques manipulations de catcodes suffisent.
Attention, \AtBeginDocument ne fonctionne pas car le \@begindocumenthook est trop loin de la fin de la macro \doucment.

Code: Tout sélectionner
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\makeatletter
\newwrite\sav@body
\newcount\sav@cnt
\def\grab@body{\begingroup\sav@cnt\z@\loop
   \ifnum\sav@cnt<\@cclvi\catcode\sav@cnt12 \advance\sav@cnt\@ne\repeat
   \newlinechar`\^^M \grab@body@i}
\begingroup\edef\tmp@namedef{\endgroup\long\def\noexpand\grab@body@i##1\expandafter\@gobble\string\\\detokenize{end{document}}}
\tmp@namedef{%
   \immediate\openout\sav@body\jobname.sav
   \immediate\write\sav@body{#1}\immediate\closeout\sav@body
   \endgroup\input\jobname.sav
   \end{document}\ingnorespaces}
\g@addto@macro\document\grab@body
\makeatother
\begin{document}
coucou

Voici un    \textbf{texte} qui se retrouve dans un fichier...
\end{document}

Re: Exporter le corps du document dans un fichier auxiliaire

MessagePosté: Jeudi 08 Juin 2017, 17:49
par evariste_G
Ah oui, en effet... Cette solution n'aurait pas pu sortir de mon cerveau car je n'avais pas les connaissances suffisantes.
Il ne me reste plus qu'à méditer sur tout ça, mais ça fonctionne une fois adapté à mon contexte (ça, je n'en doutais pas...).

Merci beaucoup !

Re: [ok]Exporter le corps du document dans un fichier auxili

MessagePosté: Jeudi 08 Juin 2017, 18:44
par touhami
Bon jour. Une solution
Code: Tout sélectionner
\makeatletter
\g@addto@macro{\document}{\VerbatimOut{\jobname.sav}}
\AtEndDocument{\endVerbatimOut\input{\jobname.sav}}
\makeatother

Re: Exporter le corps du document dans un fichier auxiliaire

MessagePosté: Jeudi 08 Juin 2017, 18:48
par un bon petit
evariste_G a écrit:mais ça fonctionne une fois adapté à mon contexte (ça, je n'en doutais pas...)

Il faut parfois douter. Il ne doit y avoir nulle part de \end{document} dans le corps du document.
Par exemple, \verb|\end{document}| ou pire "%\end{document}" à la fin d'une ligne commentée quelque part fera échouer le processus à coup sûr.

Re: [ok]Exporter le corps du document dans un fichier auxili

MessagePosté: Vendredi 09 Juin 2017, 16:22
par evariste_G
D'accord. Merci pour ce supplément d'information. Mais c'est déjà pas mal comme solution; ça convient aux documents dits standards (a priori, c'est uniquement pour des sujets de devoirs, donc aucune raison qu'il y ait des portions exotiques).