2017-10-20 23 views
1

J'essaie de trouver un moyen de changer mon flux de documents maître/enfant dans LaTeX en utilisant le paquet "subfiles", donc j'essaie d'ajouter et précédez à tous les fichiers que je l'ai déjà les lignes suivantes:Bash ou Python: Ajouter et ajouter une chaîne de manière récursive dans tous les fichiers .tex

Lines préfixer:

\documentclass[<mainfile>]{subfiles} 
\begin{document} 

ligne à Appen:

\end{document} 

Je pensais utiliser bash mais je pourrais être sympa aussi avec Python, je ne sais pas ce qui serait le mieux.

Si vous avez des suggestions :-)?

+1

Modifier les fichiers en utilisant 'sed' serait très rapide. –

+0

oui, postez le fragment d'entrée et le résultat attendu – RomanPerekhrest

Répondre

0

Une façon intuitive est d'utiliser cat

Par exemple, créez deux fichiers prepend.tex et append.tex qui contiennent le contenu que vous souhaitez ajouter. les concaténer avec le fichier source pour créer le fichier cible souhaité

$ cat prepend.tex source.tex append.tex > target.tex 

Pour l'appliquer de manière récursive à tous les fichiers existants dans un répertoire dit src/ vous pouvez utiliser:

$ find src/ -type f -name "*.tex" -exec sh -c "cat prepend.tex '{}' append.tex > '{}'.tmp" \; 

Cela va créer un nouveau fichier .tmp à côté de chaque fichier source. Assurez-vous que le résultat dans ces .tmp fichiers sont exaclty ce que vous voulez avant de passer à écraser les fichiers sources avec les .tmp les:

$ find src/ -type f -name "*.tmp" -exec rename -n 's/.tmp$//' '{}' \; 

changer l'option -n--f de la commande rename pour forcer l'écrasement

+0

Wawww qui a fonctionné super-lisse! Une seconde de réflexion pour trat tous les fichiers, et se sent très bien sécurisé pour utiliser les fichiers temporaires (je m'en souviendrai!). Merci beaucoup ! –

+0

@EtienneS Cool, heureux que je puisse aider :) D'ailleurs, 'sed' ou' awk' comme mentionné par d'autres utilisateurs peuvent également être utiles dans les cas où une édition plus complexe est nécessaire. – etopylight

+0

J'ai essayé avec sed mais c'était un peu compliqué: je ne suis pas encore habitué (ça doit être!) –