len() マクロは、引数に含まれている文字列の長さ (文字数) を返します。たとえば、
len(abcdef)
は 6 を返し、
len((a,b))
は 5 を返します。
substr() マクロは、文字列の部分文字列を生成します。たとえば以下のマクロは、文字列 s の i 番目の位置 (起点は 0) から始まる n 文字の部分文字列を返します。
substr(s, i, n)
n が省略されている場合には、i 文字目以降の文字列が返されます。たとえば、以下のように入力すると、
substr(`now is the time',1)
以下の文字列が返されます。
ow is the time
i または n が範囲を超えている場合は、結果は不定です。
index(s1,s2) マクロは、文字列 s1 の中で文字列 s2 が現われる場所のインデックス (位置) を返します。文字列 s2 が含まれていない場合は -1 が返されます。substr() の場合と同様に、文字列の起点は 0 です。
translit() は、文字置換を行います。このマクロの一般形式を以下に示します。
translit(s,f,t)
このマクロは、f に指定された文字を t に指定された対応する文字に置換して s を変更します。
たとえば、以下の入力を使用すると、
translit(s, aeiou, 12345)
母音字はそれに対応する数字に置換されます。t が f より短い場合は、t に指定されていない文字は削除されます。t に何も指定されていない場合は、f の中の文字が s から削除されます。
したがって、以下の場合には、s から母音字 a,e,i,o,u がすべて削除されます。
translit(s, aeiou)
マクロ dnl() は、dnl() の後から復帰改行までの文字 (復帰改行も含む) をすべて削除します。このマクロは主に、m4 の出力に必要ない空の行を削除するために使用されます。たとえば、以下を入力すると、定義に含まれない行の終わりは復帰改行になります。
define(N, 100) define(M, 200) define(L, 300)
したがって、復帰改行を必要としない出力に復帰改行がコピーされます。これらの各行に dnl() を追加すると、復帰改行はなくなります。また、以下のように記述した場合も、同じ結果を得ることができます。
divert(-1) define(...) ... divert