名前: しっぽ愛好家 日時: 2002-12-18 16:28:22 IPアドレス: 210.230.97.*
>>14060 >(foo 2002: 24) >(ibid.: 40) >のように"ibid."と自動的に表示させるようにすることは可能でしょうか。 可能か否かは ``ソースファイル中のどのような記述に対して'' 上記のような出力を得たいのか,という点(すなわち``仕様'')によります. 例えば,thebibliography 環境の中で \bibitem[<label>]{<key>} <reference> %%% <label> は ``文献記号'',<key> は参照用の ``参照キー'', %%% <reference> は文献自体の記述 のように記述している文献を (\cite{<key>}: ***) (\cite{<key>}: ###) という具合に別々の \cite を用いて引用している限り, ご質問にあるような出力を得るのは困難でしょう. %%% 直前の \cite で用いられた ``参照キー'' を記憶しておくことは可能です. %%% しかし,2 つの \cite が上記の例のように互いに近接しているのか, %%% それとも \cite どうしの間に長いテキストが挟まれているのか, %%% を判定する方法はありません. しかし,\cite の仕様を多少変更すれば,ご質問にあるような出力を 得ることも比較的容易です. 例えば,``参照キー'' に文字 : が含まれないと仮定すると, 次のような定義を用いることができます. %%% 必要に応じて,定義を \makeatletter と \makeatother で囲んでください. \DeclareRobustCommand*\cite[1]{% \let\@citea\@empty \let\@prev@key\relax (%%% (*) \@for\@citeb:=#1\do{% \@citea \def\@citea{)\penalty\@m\ (}%%% (*) \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\@citeb \expandafter\expandafter\expandafter{% \expandafter\@firstofone\@citeb\@empty}% \expandafter\@cite@splitarg\@citeb::\@nil%%% (***) \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi \@ifundefined{b@\@citeb}% {\mbox{\reset@font\bfseries ?}% \G@refundefinedtrue \@latex@warning{Citation `\@citeb' on page \thepage \space undefined}}% {\hbox{% \ifx\@citeb\@prev@key ibid.% \else \csname b@\@citeb\endcsname \fi}% \ifx\@citec\@empty\else :\ \ignorespaces\@citec\relax \fi%%% (**) \let\@prev@key\@citeb}}% )}%%% (*) \def\@cite@splitarg#1:#2:#3\@nil{\def\@citeb{#1}\def\@citec{#2}}%%% (***) この定義を用いた場合, \cite{<key>} は (<label>) を出力し, \cite{<key>:<option>} は (<label>: <option>) を出力します. %%% <key> などは先程用いたものと同じです. %%% ここで,<key> と <option> の区切りに : を用いているので, %%% <key> には : が含まれないことを仮定しました. %%% %%% もちろん,区切りに用いる文字を他の文字に変更することは, %%% %%% 上記の定義中の (***) というコメントをつけた行にある : を %%% %%% 他の文字に変更すればできます. %%% なお,<option> 部分に : が含まれる場合には <option> 部分を %%% {,} で囲んでください. さらに, \cite{<key>:<option1>, <key>:<option2>} のように 同じ参照キーを並べた場合, (<label>: <option1>) (ibid.: <option2>) のように出力されます. %%% ここで,<option1> などはオリジナルの定義では \cite のオプション引数で %%% 与えるようにしていますが,ここでは,``参照キー'' ごとに異なる %%% ``オプション'' を使えるように,仕様を変更してみました. %%% なお,``文献記号'' を囲む括弧を変更するには,上記の定義中の %%% (*) というコメントをつけた行の (,) を変更します. %%% また,``オプション部分'' の前の : を変更するには,(**) というコメントを %%% つけた行の : を変更します. %%% まあ,``既製品'' がどこかにあるかもしれませんが…
この書き込みへの返事: