Pensez à utiliser un moteur de template tel que Jinja2 avec Python.
Vous pouvez changer la syntaxe par défaut {%, {{, etc. afin de la rendre plus compatible avec celle de LaTeX. Par exemple:
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(JINJA_DIRS),
comment_start_string='["', # don't conflict with e.g. {#1
comment_end_string = '"]',
block_start_string = '[%',
block_end_string = '%]',
variable_start_string = '[=',
variable_end_string = ']',
autoescape=True,
finalize=_jinja2_finalize_callback, # make a function that escapes TeX
)
template = env.get_template(self.template)
tex = template.render(content)
En plus des fonctions qui sont transmises à l'environnement du modèle, Jinja2 prend en charge macros. Par exemple, votre code ci-dessus devrait fonctionner comme prévu que:
[% macro blah(egg, spam) -%]
foo [=egg] \to [=spam] bar
[%- endmacro %]
[= blah("chicken","pork") ]
% substitutes with "foo chicken \to pork"
Je ne sais pas quels sont vos objectifs, et cela nécessite un peu de travail, mais il est pas un problème insurmontable du tout si vous êtes familier avec Python.
J'espère que cela aide.
Question intéressante. Je pense que c'est vraiment difficile, voire impossible. Un script TeX approprié devrait analyser chaque jeton dans chaque ligne et vérifier s'il s'agit d'une commande définie par l'utilisateur, ce qui, à mon avis, est assez complexe. Des choses comme les changements de codes cataclysmes dans le document le compliquent encore plus. Je suggère que vous essayez de trouver une solution complètement différente. TeX est bien pour composer un fichier de sortie DVI ou PDF à partir d'un fichier d'entrée, mais tout le reste est extrêmement compliqué. – Philipp
Il est probablement préférable d'utiliser perl ou la langue de votre choix pour analyser vos fichiers .tex et remplacer les macros. – Mica
[This] (http://stackoverflow.com/questions/2462656/transform-a-tex-source-so-that-all-macros-are-replaced-by-their-definition) la question stackoverflow a une réponse pour cela : [tme] (http://www.astro.indiana.edu/~jthorn/software.html#tme) – Mauro