Considere el uso de un motor de plantillas como Jinja2 con Python.
Es posible que desee cambiar la sintaxis del valor predeterminado {%, {{, etc. para que sea más compatible con la propia LaTeX. Por ejemplo:
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)
Además de las funciones que se pasan al medio ambiente de la plantilla, Jinja2 apoya macros. Por ejemplo, el código anterior debería funcionar como se espera como:
[% macro blah(egg, spam) -%]
foo [=egg] \to [=spam] bar
[%- endmacro %]
[= blah("chicken","pork") ]
% substitutes with "foo chicken \to pork"
No estoy seguro de cuáles son sus objetivos, y esto requiere un poco de trabajo, pero no es un problema insuperable en absoluto si estás familiarizado con Python.
Espero que ayude.
Pregunta interesante. Creo que esto es realmente difícil, si no imposible. Un script TeX apropiado tendría que analizar cada token en cada línea y comprobar si es un comando definido por el usuario, lo que creo que es bastante complejo. Cosas como los cambios de código de catálogo en el documento lo complican aún más. Sugeriría que intentes encontrar una solución completamente diferente. TeX está bien para componer un archivo de salida DVI o PDF desde un archivo de entrada, pero cualquier otra cosa es extremadamente complicado. – Philipp
Probablemente esté mucho mejor utilizando perl o el idioma de su elección para analizar sus archivos .tex y reemplazar las macros. – Mica
[This] (http://stackoverflow.com/questions/2462656/transform-a-tex-source-so-that-all-macros-are-replaced-by-their-definition) La pregunta de stackoverflow tiene una respuesta para ella : [tme] (http://www.astro.indiana.edu/~jthorn/software.html#tme) – Mauro