• Emacs と Perl を使って,XML-RPC 経由で Movable Type のエントリを編集するツールを配布しています.良かったら持っていってください.( 2004/10/24 update) mapae logo
  • Movable Type で footnote*1 を生成する plugin を配布しています.良かったら持っていってください.( 2004/03/04 update )
  • その他の配布物等

*1: 脚注.よ〜するに,こ〜ゆ〜やつです.

Footnote Plugin

| コメント(2) | トラックバック(26)

ハイパー日記システムtDiaryではわりとメジャーな footnote *1 機能.しかし,Movable Type 周りでは,この機能を持つプラグインは見つかりませんでした *2.そこで,自分で作ってみることにしました.

初めは,add_text_filter なる API で作ってみたのですが,仕様上の制約によりあまり良い感じにはなりませんでした.しかし,これ以外の(プラグイン用の) API を用いたプラグインでは,テンプレートでしか使うことはできません.

で,解決策を探していたのですが,...ありました. Macros というプラグインを使えば良いようです.このプラグインは,テンプレート中でマクロを定義しておくと,任意の場所(エントリの中までも)で展開できるというものです.で,これを用いて footnote plugin を作ってみました.

1. はじめに

このプラグインは,Movable Type において,footnote *3を自動的に生成するためのものです.ただし,通常のプラグインはテンプレート中でしか作用しないため,別途,Macros の導入が必要です.

1.1. 入手先

本プラグインについて,私は一応著作権を主張しますが,改変,再利用等自由にやっていただいて構いません.また,使用上何か問題があっても,一切の責任は負いません.


*1 *3: 脚注.こんな感じのもの.
*2: 単に私が見つけられなかっただけかもしれない.

2. 導入

2.1. Macros プラグインの導入

本プラグインは,Macros プラグインの下で動作するように作られています.まずこれを導入してください.なお,既に導入している場合は,この節を読み飛ばしてもらっても構いません.

まず,Macros をダウンロードし,展開します.次に展開されたファイルを所定の位置にコピーします.基本的には,「macros.pl」「macros.pm」「postproc.pm」の3つのファイルを

  • (mt.cgi があるディレクトリ)/plugins/macros.pl
  • (mt.cgi があるディレクトリ)/extlib/bradchoate/macros.pm
  • (mt.cgi があるディレクトリ)/extlib/bradchoate/postproc.pm

としてコピーすれば良いでしょう *4.詳細については,Macros のマニュアルを読んでください.

2.2. footnote プラグインの導入

前述の footnote.pl をダウンロードし,以下にコピーしてください.

  • (mt.cgi があるディレクトリ)/plugins/footnote.pl

*4: 「(mt.cgi があるディレクトリ)/extlib/bradchoate/」というディレクトリは無いと思いますので,作ってください.

3. 設定の例

本プラグインを利用するための設定は,各テンプレートの中に記述します.これらの定義は,大きく以下の3つに分けられます.

  • 定義部
  • 適用部
  • 表示部

以下,それぞれについて設定例 *5を挙げます.

3.1. 定義部

ここでは,脚注を使うためのタグや 脚注 へのリンクの表示形式を定義します.これは,後述の適用部より前に記述してください.

<MTMacroDefine ctag="fn">
<MTFootnote value="[MTMacroContent]" reset="[MTMacroAttr name='reset']">
<MTFootnoteSet>
<sup>
<a href="#fn-<$MTEntryID$>-<$MTFootnoteTotalCount$>"
   id="efn-<$MTEntryID$>-<$MTFootnoteTotalCount$>"
   title="<$MTFootnoteString remove_html='1'$>">
*<$MTFootnoteCount$></a>
</sup>
</MTFootnoteSet>
<MTFootnoteGet>
<MTIfFootnoteExist>
<hr/>
<div>
<MTFootnotes>
<MTFootnoteNumbers glue=" ">
<a href="#efn-<$MTEntryID$>-<$MTFootnoteTotalNumber$>"
   id="fn-<$MTEntryID$>-<$MTFootnoteTotalNumber$>">
*<$MTFootnoteNumber$></a>
</MTFootnoteNumbers>
: <MTFootnoteString><br />
</MTFootnotes>
</div>
</MTIfFootnoteExist>
</MTFootnoteGet>
</MTFootnote>
</MTMacroDefine>

3.2. 適用部

ここでは,footnote プラグインを適用する部分を指定します.通常は,「<$MTEntryBody$>」「<$MTEntryMore$>」に適用することになりますから,これらを「<MTMacroApply><$MTEntryBody$></MTMacroApply>」「<MTMacroApply><$MTEntryMore$></MTMacroApply>」と書き換えてください.

3.3. 表示部

適用部以外で脚注を表示させたい場合,任意の位置に記述します.通常は,上記適用部の直後に書いておきます.

<MTIfFootnoteExist>
<hr/>
<div>
<MTFootnotes>
<MTFootnoteNumbers glue=" ">
<a href="#efn-<$MTEntryID$>-<$MTFootnoteTotalNumber$>"
   id="fn-<$MTEntryID$>-<$MTFootnoteTotalNumber$>">
*<$MTFootnoteNumber$></a>
</MTFootnoteNumbers>
: <MTFootnoteString><br />
</MTFootnotes>
</div>
</MTIfFootnoteExist>

3.4. 使用例

上記のように指定した場合は,エントリ内に「ほげ<fn>ふが</fn>」という記述があれば,「ほげ *6」と変換され,指定された場所には脚注番号とともに「ふが」と表示されます.

文章量の多いエントリ等で,途中で脚注を表示させたい場合は,「<fn></fn>」と記述すると,それまでに指定された脚注をその位置に表示します.また,「<fn reset="1"></fn>」とした場合は,それまでの脚注を表示し,さらに移行の脚注番号が 1 から始るようになります *7

余談

余談となりますが,定義部や表示部を全てのテンプレートに書き込むのは面倒くさいことです.また,後に変更したい場合にも大変面倒くさい作業を行わなくてはなりません.そこで,テンプレートモジュール機能 *8を使うと便利です.

例えば,定義部を「fndefine」,表示部を「fnprint」という名前でテンプレートモジュールとして登録しておきます.そして,各テンプレートには,

<MTInclude module="fndefine">

や,

<MTInclude module="fnprint">
と記述することにより,各テンプレートに直接記述した場合と同じ効果が得られます.

*5: 必要に応じて好みのスタイル等を追加してください.
*6: ふが
*7: 1 から始るのはリンク文字列だけであり,URL は引き続きの連番になります.
*8: 「(Blog の)編集メニュー」→ 「Template の定義」→「Template Modules」

4. 各タグの説明

この章では,Footnote プラグインで用いられるタグについて説明します.前述の設定例をカスタマイズしたい場合は参考にしてください.なお,Macros プラグインのタグについては,Macros のマニュアルを参照してください.

MTFootnote
footnote の定義を行うコンテナタグです.この中で,MTFootnoteSet と MTFootnoteGet を用います.ただし,そのうち一つだけしか用いない場合は省略可能です.
value 属性
footnote の内容を指定します.
reset 属性
脚注の表示を行う場合,この属性値が真であれば,移行の脚注番号が 1 から始ります.
MTFootnoteSet
コンテナタグであり,この中で footnote の内容を設定するときの定義を行います.親要素の MTFootnote で value 属性に空文字列が与えられた場合,この要素は無視されます.MTFootnote を省略した場合は,この要素内の先頭で FootnoteString 要素により footnote の内容を指定する必要があります.
MTFootnoteGet
コンテナタグであり,この中で footnote の内容を取り出すときの定義を行います.親要素の MTFootnote で value 属性に空文字列以外の文字列が与えられた場合,この要素は無視されます.MTFootnote 要素を省略した場合は,この要素も省略できます.
MTFootnoteString
footnote の内容を指定したり取り出したりします.属性値の与え方により挙動が変化します.
value 属性を指定
属性値を footnote の内容として記憶します.このタグの位置には,内容は表示されません.
value 属性を指定しない
該当する footnote の内容を表示します.
MTFootnotes
コンテナタグであり,この中で脚注の表示の仕方を定義します.
MTFootnoteCount
footnote の通し番号を表示します.これは,エントリ内での通し番号です.前述の設定例では,これと MTEntryID を組み合わせてエントリ内のリンクを実現しています.
MTFootnoteNumbers
コンテナタグであり,getFootnote コンテナタグの中で使います.
Footnote プラグインでは,内容が全く同じ footnote はまとめて表示されます.この場合に,MTFootnoteNumbers コンテナタグの内容が必要なだけ繰り返し表示されます.
glue属性
表示する footnote の通し番号が複数ある場合,それぞれの間にこれで指定された文字列が挿入されます.
MTIfFootnoteExist
条件タグです.表示すべき footnote が存在する場合に真となります.

5. 注意事項

脚注文字列の先頭に「(」,末尾に「)」がある場合,これらの各個記号は無視されます.これは,本プラグインが解釈されない場合 *9,例えば上記の例では,「ほげふが」と表示されるのを回避するためです.
常に,「ほげ<fn>(ふが)</fn>」と書くようにすれば,本プラグインが解釈されない場合でも表示は「ほげ(ふが)」となり,おかしな文章になることはありません.また,脚注として表示された場合は,前後の各個は自動的に取り除かれます.


*9: Excerpt(概要)を特に指定しなかった場合で本文から自動生成される場合など

6. 仕様上の制限

  • 複数のエントリをまたいだ脚注は設定出来ません.
  • 脚注の中で脚注を使うことは出来ません.

7. 最近の更新履歴

  • (2008-08-24) 定期部のサンプルが間違っていたため、修正しました。ご指摘くださった方、ありがとうございました。
  • (2004-03-04) Ver.0.6 エントリの途中で脚注番号をリセットできるように変更.これに伴いタグを変更したので,旧バージョンからアップデートする場合は,各設定についても修正してください.
  • (2004-01-28) Ver.0.5 脚注を任意の位置で表示できるように変更.これに伴いタグを変更したので,旧バージョンからアップデートする場合は,各設定についても修正してください.
  • (2004-01-26) ちょっとしたバグ修正....といっても一文字足しただけ.
  • (2004-01-23) Perl5.005 対応....といっても「use warnings」を外しただけ.
  • (2003-12-21) こうめい@なるぱら氏のご指摘により,上記設定例からクラス指定を削除.(プラグイン本体の修正はありません.)
  • (2003-12-08) タグと各個の間にホワイトスペースが含まれる場合でも正しく除去できるように修正.
  • (2003-12-04) setFootnote 内で FootnoteString を使ったとき,戻り値が正しくない問題を修正.
  • (2003-11-29) 重複する脚注に対応.

トラックバック(26)

トラックバックURL: http://d.nym.jp/mt/trackback/1602

MTでtDiaryのような脚注機能を実現するプラグインを(・∀・)ハケーン!! 続きを読む

先日、国産で注釈が使えるようになるMTプラグインがあったので利用しようとしたのですが、残念ながら自分のトコロでは正常に稼動できませんでした。 で、先ほど巡回してましたら、IGALOG さんのエントリーで IGALOG: MTの脚注プラグイン というモノがあり、さっそく導入し... 続きを読む

IGALOG: MTの脚注プラグイン MTの脚注プラグイン 脚注がつけられるんだー、おもしろそー。 つけてみよう。... 続きを読む

猫も満足しておる 続きを読む

希望があったのでサーバーにインストールさせていただきました。 six olq: Footnote PluginFootnote Plugin [Information] [MovableType] ハイパー日記システムやtDiaryではわりとメジャーな footnote*1 機能.しかし,Movable Type 周りでは,この機能を持つプラグインは... 続きを読む

PukiWiki/TrackBack 0.1 - MovableType (2004年4月26日 12:06)

MovableType plugin 脚注がねーよ。 six olq: Footnote Plugin view-source:http://d.nym.jp/archives/2003/11/10051631.html 脚注プラグイン。 続きを読む

まぁ、ワシなんぞの日記なんぞで、注釈を必要とする場面がどのくらいあるかは別の話ですが。表題のプラグインを導入してみた。 Footnote Plugin:http://d.nym.jp/archives/2003/11/10051631.html どんな感じになるかと言うと.... 私のUX50SONYから2003年8月9日に発... 続きを読む

Movable Typeはそれなりに高機能なコンテンツ管理システム(誰も高度なプログラムとは言ってない)で使ってるといろいろ便利な事が多い→ユーザも多いんすけども、wikiを使ったほうが便利な事とかも結構あったりします。 たとえば、文書の階層化。wikiはコレが非常に得意... 続きを読む

■エントリ関係脚注プラグインポップアップで脚注を出します。こういうやつ専門用語が多いblogには必須。ちゃんと数字も順番に入れてくれます。無駄に多機能になっていくな・・MTPaginateプラグインページを分割するプラグイン。一つのアーカイブの中に多数のエントリが増... 続きを読む

結局、ブログに始まりブログに終わった1週間(笑) 昨日の段階で、ほぼ設定終了。よっしゃ。明日から中身書いてくぞぉ、と思ったときに、ハタと疑問に思ったこと。 はて。同じMT利用者で、脚注をつけているところもあるけれど、あれはどうやってつけるんだろう・・・。 管理... 続きを読む

Sweet Melancholy Days. - MT-Plugins (2004年8月11日 16:05)

今回導入しようと思ったプラグイン。 Supplemental Calendar Tags カレンダーを複数表示。 [参考] [E`] M::T > カレンダーを複数表示 mt-mostvisited どの記事か多く読まれているかわかる。 [参考] CROSSBREED > MTで人気記事ランキングを。 Footnote Plugin 注釈機能。 [... 続きを読む

むかし書いてた日記ではfootnoteてすとを入れる機能がありました。 これっ... 続きを読む

むかし書いてた日記ではfootnoteてすとを入れる機能がありました。 これっ... 続きを読む

私の文章は、文中に(....)等でコメントを入れる癖があり、読みにくいだろうなと... 続きを読む

MTの脚注プラグインという記事を以前のIGALOGで書いていた。 しかし以前の記... 続きを読む

six olq: Footnote Plugin  上記サイトから「脚... 続きを読む

・最近のコメント、トラックバックの表示 ・カレンダーを右に ・小ネタ用cgi追加... 続きを読む

ホームページで脚注というのもあまり一般的ではないかもしれませんが、長い文章でちょ... 続きを読む

埋め込み e-wordsを設置してみた。 続きを読む

脚注プラグインを導入してみました(使う予定がないのに(笑))(*'-') 下記サ... 続きを読む

 こちらを参考に、脚注機能をつけようとしたのですが、どうもうまくいかない。  <... 続きを読む

ちょっとは見えるようになったかもしれんです(´-`) なのでちょっと公開!明日辺... 続きを読む

six olq: Footnote Plugin  その3度目の罠はこれ。このプ... 続きを読む

ツールとしてのIT - 脚注を利用 (2005年12月14日 12:34)

Movable Typeを使って投稿を書いていて、時々脚注を使いたいなと思うこと... 続きを読む

FootnotePlugin と 「続きを読む」JavaScriptのONOFF対応 とを共存させる工夫をしてみた。 続きを読む

はてなダイアリーなどでは標準の機能として備わっている「脚注」。Movable Typeで実現を可能にするのが「Footnote」プラグインです(「MTMa... 続きを読む

コメント(2)

すばらしいプラグインの公開をありがとうございます。
当サイトでも搭載させていただきました。
そこで少し気になった点を。。。
表示部分に区切り線を入れているのですが、ここにスタイシートを適用するタグとなっていますが、これをそのまま利用した際に、当サイトではページを表示した際に文章が無色となってしまいます(全選択で表示できるようになります)。
この部分のみスタイルシートの適用をなくしたところ正常に表示されるようになりました。
とりあえず報告まで。

私が使っている設定をそのまま載せてしまったのですが,実際に使っているスタイルやブラウザによっては正しく表示されないかもしれませんね.ややこしいので,設定例からクラス指定部分を削除しておきました.
ご指摘有難うございました.

コメントする

最近のコメント

アーカイブ

Author

nym <n...@nym.jp>
Powered by Movable Type 5.161-ja