Frage

Wie kann ich alle Vorkommen von benutzerdefinierten Latex-Makros mit ihren Definitionen ersetzen?

Zum Beispiel gegeben, um diese Datei

old.tex

\newcommand{\blah}[2]{#1 \to #2}
...
foo \blah{egg}{spam} bar
...

, wie die Datei unten in einer automatischen Art und Weise erzeugen

new.tex

...
foo egg \to spam bar
...

Statt Latex Makro Logik mit Perl von Neuimplementierung, kann ich Latex oder tex Motor selbst, dies zu tun?

War es hilfreich?

Lösung

Nie gesehen dies getan, aber 2 unausgegorene Ideen:

  1. Wenn der Grund, warum Sie alle diese Makros inline für das Debuggen ist erweitern möchten, dann in Ihrem Dokument Einstellung \tracingmacros=1 werden alle Ihre Makros erweitern, aber die Ausgabe geht in eine Protokolldatei.

  2. Die CTAN Archiv bietet eine Paket , dass Sie Erweiterungen innerhalb Definitionen Inline verwenden können (aber nicht newcommand), aber ich wusste nicht, ob newcommand statt \ def Sie vielleicht einen Blick und sehen, wie schmerzhaft es Inline-Erweiterungen von \ ändern könnte sein, auszuführen.

Andere Tipps

VOILÀ http://www.ctan.org/tex-archive/support/de- Makro

Dies ist ein Python, dass:

  

[...] wird Makros erweitern definiert in (Re) newcommand oder (wieder) newenvironment Befehle innerhalb des Dokuments oder im Dokument des „private“ Paketdatei.

Betrachten wir ein Template-Engine wie Jinja2 mit Python.

Sie empfehlen Sie, die Syntax von dem Standard {% zu ändern, {{usw., um es kompatibel mit LaTeX eigenen 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 Makros . Zum Beispiel sollte Ihr obiger 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 mit Python vertraut sind.

Ich hoffe, das hilft.

ich im Jahr 2007 ein C-Programm zurück schrieb \ newcommand zu erweitern: http: //www.gtoal .com / src / newcommand / - ich denke, es ist nicht an der Zeit diese Frage gestellt wurde indiziert wurde. Erwähnens es jetzt für alle noch auf der Suche nach so etwas und finden auf dieser Seite.

Aus dem Code ...

// FOR DOCUMENTATION, SEE MY BLOG POST:
//    http://techennui.blogspot.com/2007/11/quick-hack-17-in-series-of-42-inlining.html

// Expands LaTeX \newcommand macros to allow submission of documents
// to print services which do not allow user-defined macros.

// Valid input formats are:
// \newcommand{\whatever}{Replacement text}
// \newcommand{\whatever}[2]{Expand #1 and #2 but not \#1 or even $\#1$}
// - anything else ought to be passed through verbatim; if an insurmountable
// error is detected, the program exits with a non-0 return code.

// The purpose of this utility is similar to:
//    http://winedt.org/Macros/LaTeX/uncommand.php
// which I wasn't aware of when I wrote it.  Though I would like to see how
// well that program handles the test input file, to see if it does the
// right thing with some of the more complex definitions :-)
//
// See also http://texcatalogue.sarovar.org/entries/de-macro.html
// and http://www.mackichan.com/index.html?techtalk/685.htm~mainFrame
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top