マクロの呼出しを明示するようにするとそれとひきかえに、m4では必要だった「展開されるのを回避するためのクウォート」が必要なくなり、記述がわかりやすくなったように感じます。以下、より複雑なマクロを示します。名前の連結が起きるマクロ{m55_define|foo|bar}{m55_dnl}{m55_define|barbaz|quuz}{m55_dnl}{{foo}baz}↑入力、出力↓quuzm55_dnlは、m4のdnlと同じで、その後改行まで入力を読み飛ばさせるという副作用がある組込みマクロです。マクロ呼出しに展開されるマクロ{m55_define|foo|`{bar}'}{m55_dnl}{m55_define|bar|`{baz}'}{m55_dnl}{m55_define|baz|quuz}{m55_dnl}{foo}quuz「マクロ呼出しに展開されるマクロ」のデモです。m55でもm4と同様、マクロ呼出しの実引数はそれ自身がまず展開されようとするので、クウォートでくくってやる必要があります。いう名前のマクロは定義されていないので、エラーになります。複数回展開されるマクロ{m55_define|foo|bar}{m55_dnl}{m55_define|bar|baz}{m55_dnl}{m55_define|baz|quuz}{m55_dnl}{{{foo}}}quuz「複数回展開されるマクロ」のデモです(一つ前の「マクロ呼出しに展開される」との違いに注意してください)。m4では「その名前で定義されたマクロが見つかり続ければ」展開されますが、m55ではこのように、展開を意図していることが明らかな書き方が必要です。厳格過ぎる、と感じるかもしれませんし、実際そうかもしれませんが、ともかくそういう言語設計になっています。引数のあるマクロ引数のあるマクロはm4と同様です。foo実装についてGitHubリポジトリを見ていただければわかりますが、awkで実装してあり、全体で500行ちょっとです。算術式のbcによる計算を効率よくおこなうための仕掛けのため、シェルスクリプトによるwrapperが必要になっていますが、これはgawk依存の機能(双方向パイプ)を使えば必要ないのですが、nawkでも動くようこのようにしています。機能を階層分けして、関数にしてあるので行数がちょっと多めになっています。改造するには前後のコードを追う必要があってちょっと大変かもしれませんが、一旦読めてしまえば容易に組込みマクロの追加などはできるでしょう。月別アーカイブMathJax読み込みはてなブログをはじめよう!metanestさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。