2009-10-02 7 views
7

どのようにしてユーザー定義ラテックスマクロをすべてその定義に置き換えることができますか?自動的な方法で下にファイルを生成する方法ラテックスマクロをその定義に置き換える方法(ラテックスを使用)

old.tex

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

このファイルを指定された例えば

new.tex

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

代わりのラテックスマクロロジックをperlで再実装するには、これを行うためにラテックスまたはtexエンジンを使用できますか?

+0

興味深い質問です。不可能ではないにしても、これは本当に難しいと思います。適切なTeXスクリプトはすべての行のすべてのトークンを解析し、それがユーザー定義のコマンドかどうかをチェックする必要があります。これはかなり複雑だと思います。ドキュメント内でのコード変更のようなことは、それをさらに複雑にします。私はあなたが完全に異なる解決策を見つけようとすることをお勧めします。 TeXは入力ファイルからDVIまたはPDF出力ファイルをタイプセットするのには問題ありませんが、他のものは非常に複雑です。 – Philipp

+0

おそらく、あなたの.texファイルを解析してマクロを置き換えるためにperlやあなたの使用する言語を使うほうがずっと良いでしょう。 – Mica

+0

[This](http://stackoverflow.com/questions/2462656/transform-a-tex-source-so-that-all-macros-are-replaced-by-their-definition)stackoverflow質問には答えがあります:[tme](http://www.astro.indiana.edu/~jthorn/software.html#tme) – Mauro

答えて

0

これが行わ見られなかったが、決して2中途半端なアイデア:

  1. あなたはすべてのこれらのマクロをインライン展開したい理由は、すべてあなたのマクロを拡大するドキュメント内の\tracingmacros=1を設定し、デバッグ用の場合、出力はログファイルに保存されます。

  2. CTANアーカイブは、あなたが(newcommandではなく)定義にインライン展開に使用することができますpackage提供していますが、あなたが見てみると、それは、インラインを実行するために変更するかもしれませんどのように痛みを伴う表示される場合があります場合、私は知りませんでした\ defの代わりに\ newcommandを展開します。

1

Jinja2などのテンプレートエンジンをPythonで使用することを検討してください。

デフォルトの{%、{{など}から構文を変更して、LaTeX自身の互換性を高めることができます。たとえば:テンプレートの環境に渡される機能に加えて

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) 

、Jinja2のはmacrosをサポートしています。期待通りたとえば、上記のコードは動作するはずです:

[% macro blah(egg, spam) -%] 
foo [=egg] \to [=spam] bar 
[%- endmacro %] 

[= blah("chicken","pork") ] 
% substitutes with "foo chicken \to pork" 

私はあなたの目標が何であるかわからないんだけど、これは仕事のビットが必要ですが、あなたはなら全く克服できない問題ではありませんPythonに詳しい。

私は役立つことを願っています。

7

出来上がり http://www.ctan.org/tex-archive/support/de-macro

これは、Pythonである:

[...](再)で定義されたマクロを拡大していきますnewcommandや、文書内、newenvironmentコマンドを(再)または中ドキュメントの「プライベート」パッケージファイル

+0

ニース。 (これはPythonスクリプトですが、この質問を読んでいる人にとってはまだ役に立つかもしれません) – ShreevatsaR

+1

アドレスが変更されたようです: http://www.ctan.org/tex-archive/support/de-macro –

+0

もし可能ならば私はあなたを永遠に愛し、4年前から見知らぬ人です。 –

関連する問題