脚注を記述できる MovableType プラグイン:Footnote - Open MagicVox.net
私は結構脚注(※1)を使うんだけど、今まではずっと手動で記事末尾や段落の下に書き入れてた。
でも、それだと後で注釈が増えたときに番号を付け直さないと行けなかったり、本文と脚注が同じような見た目で分かりづらかったりして、いろいろと面倒。
そこで、いいプラグインがないか探してみたところ、上記の「Footnote」を発見。
早速これを導入してテンプレートを書き換え。
あとは、Movable Typeの編集画面でHTML編集モードに切り替え(※2)、<footnote>(~)<footnote>で囲めばOK。
専用タグは<fn>も使えるけど、なんとなく「function」を連想してしまうので、私は長い方を使うことにした。
また、footnoteタグ内直下の丸括弧は、上記の「Footnote」紹介記事にも書いてあるように、万一記事がプラグインで処理されなかったとき(RSSなど)の退行措置(※3)。
ところで、実はこの記事でも使ってるけど、本文側に脚注がある場合、記事ページでは問題ないけど、インデックスページで問題が出てしまう。
具体的には、「Footnote」プラグインは同一ページ内に脚注を置く場合にしか対応していないため、インデックスページの脚注が処理されても記事ページ末尾にある脚注にリンクできない。
そこで、プラグイン自体に少し手を入れて、第3引数に記事URLを指定できるように改造(※4)。
(以下、変更したgather_footnote部分のみ抜粋)
### Filter - gather_footnote
MT::Template::Context->add_global_filter (gather_footnote => sub {
my ($text, $format, $ctx) = @_;
my $footnotes = $ctx->stash ($MYNAME. q{::footnotes}) || [];
if (ref $format ne 'ARRAY') {
$format = [ '%s', $format, '' ];
}else{
$format = [ $format->[0], $format->[1], $format->[2] ];
}
if (lc($format->[1]) eq 'reset') {
$footnotes = [];
my $pagefile = $format->[2];
$format = $ctx->stash ($MYNAME. qq{::format})
or return "$MYNAME: No format";
$format = [ $format->[0], $format->[1], $pagefile ];
}
$ctx->stash ($MYNAME. qq{::format}, $format);
$text =~ s!<($tag)>\(?(.*?)\)?</\1>!sub {
push @$footnotes, $_[0];
my $index = scalar @$footnotes;
my $idattr = "";
if ($format->[2] eq ""){
$idattr = " id=\"$refer\"";
}
sprintf $format->[0],
sprintf qq{<a title="%s"$idattr href="$format->[2]#$anchor">$format->[1]</a>},
MT::Util::encode_html (MT::Util::remove_html($_[0])), $index,$index, $index;
}->($2)!ge;
$ctx->stash ($MYNAME. qq{::footnotes}, $footnotes);
$text;
});
これで、無事インデックスでも脚注が使えるようになった。
ところで、元のソースの37~44行目にある
if (ref $format ne 'ARRAY') {
$format = [ '%s', $format ];
if (lc $format eq 'reset') {
$footnotes = [];
$format = $ctx->stash ($MYNAME. qq{::format})
or return "$MYNAME: No format";
}
}
の部分だけど、これだともしかして「reset」パラメータが使えないんじゃ...?バグ?
コメント