Re: #{ 形式の引数のマクロとアラインメント

名前: 北見 けん
日時: 2002-09-05 16:02:21
IPアドレス: 211.128.71.*

>>10647 >例えば、 > \def\Macro#1#{<#1>} >と定義して、 > \halign{\Macro{#}\cr >と使えば、テンプレートの uパートは“\Macro{”です。 >この時点でグルーピングレベルが決まります。 >そのあと“\Macro{”が展開されて、生じた“<>{”が読み込まれます。 >“>”のあとの“{”によってグルーピングのレベルがひとつ上がります。 と書いたのですが、わかりにくかったですね。 テンプレートの uパートが“\Macro{”だというところまでは確かにその通りです。 そのあとを以下のように書き換えます。 TeXがアラインメントの各行を組み立てるために、保存してあるテンプレート を読み始めます。uパートである“\Macro{”を読み込んだ時点で、 その後読み込むべき項目のグルーピングレベルが決まります。 決まった後に、“\Macro{”が展開されて、生じた“<>{”が読み込まれます。 “>”のあとの“{”によってグルーピングのレベルがひとつ上がります。 以下は、そのまま読んでいただいていいのですが、一応、再掲&加筆すると、 つまり、項目のグルーピングレベルが決まってから、項目を読みに行くまでの間に、 グルーピングレベルがひとつ上がってしまうわけです。 従って、例えば次のようなのが機能するようです。 \def\Macro#1#{} \halign{\Macro{#}\cr A\iffalse}\fi\cr B\iffalse}\fi\cr C\iffalse}\fi\cr} でも、この仕様は使いづらくはないでしょうか? このマクロ“\Macro{”は、 これ以上引数を必要としませんから先を読まなくても展開可能で、 展開したら“{”が出てくるのは(項目を読み始める前に)わかっているのですから。 実際、 \def\hboxto#1#{\hbox to#1} \halign{\hboxto 30pt{#}\cr A\hfil B\cr C\hfil D\cr} というようなのはだめで、 \halign{\hboxto 30pt{#}\cr A\hfil B\iffalse}\fi\cr C\hfil D\iffalse}\fi\cr} だったらうまくいくのです。 うまくいくというのは、“A\hfil B”が30ptの幅で組まれて、その下に “C\hfil D”が30ptの幅で組まれたものが置かれる、ということですが。

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)