Verwenden Sie eine Vorlage-Engine wie Jinja2 mit Python.
Möglicherweise möchten Sie die Syntax von den Standardwerten {%, {{usw.) ändern, um sie besser mit LaTeXs eigenen kompatibel zu machen. Zum Beispiel:
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)
Neben den Funktionen, die auf die Vorlage Umgebung übergeben werden, unterstützt Jinja2 macros. Zum Beispiel sollte Ihr obigen Code wie erwartet als:
[% macro blah(egg, spam) -%]
foo [=egg] \to [=spam] bar
[%- endmacro %]
[= blah("chicken","pork") ]
% substitutes with "foo chicken \to pork"
Ich bin nicht sicher, was Ihre Ziele sind, und dies erfordert ein wenig Arbeit, aber es ist kein unüberwindbares Problem überhaupt, wenn Sie vertraut mit Python.
Ich hoffe, dass hilft.
Interessante Frage. Ich denke, das ist wirklich schwer, wenn nicht unmöglich. Ein entsprechendes TeX-Skript müsste jedes Token in jeder Zeile analysieren und prüfen, ob es sich um einen benutzerdefinierten Befehl handelt, was meiner Meinung nach ziemlich komplex ist. Dinge wie Catcode-Änderungen im Dokument erschweren es noch weiter. Ich würde vorschlagen, dass Sie versuchen, eine völlig andere Lösung zu finden. TeX eignet sich gut zum Einstellen einer DVI- oder PDF-Ausgabedatei aus einer Eingabedatei, aber alles andere ist extrem kompliziert. – Philipp
Sie sind wahrscheinlich besser dran mit Perl oder der Sprache Ihrer Wahl, um Ihre .tex-Dateien zu parsen und die Makros zu ersetzen. – Mica
[This] (http://stackoverflow.com/questions/2462656/transform-a-tex-source-so-that-all-macros-are-replaced-by-their-definition) stackoverflow Frage hat eine Antwort dafür : [tme] (http://www.astro.indiana.edu/~jthorn/software.html#tme) – Mauro