名前: しっぽ愛好家 日時: 2003-11-28 18:21:23 IPアドレス: 211.4.121.*
>>23902 %%% もうひとつ重要な情報が抜けているので確認しますが, \bibitem[{\it Sato}, 2000]{Sato2000} ... のように与えた文献項目に対して, \cite{Sato2000} とすると ``[Sato, 2000]'' 出力され, さらに別の \bibitem[Other person, sometime]{otherlabel}... という文献項目があるとき, \cite{Sato2000, otherlabel} と記述すると ``[Sato, 2000; Other person, sometime]'' と出力される, という具合ですか(\cite の引数をどういう形式で与えるのか, という情報も要るのです)? %%% これも,LaTeX2e のオリジナルの \cite の挙動とほとんど同じです. %%% 文献項目間の区切りのコンマをセミコロンに変更しているようですが, %%% それはごく些細なカスタマイズです. とりあえず,\bibitem のオプション引数で与えた ``文献番号(というより, 文献記号)'' を解析して,人名部分と刊行(あるいは発表)年の部分を 切り分ければ,次の例のようにそれらを適宜並べ換えることができます. %%% 段落の先頭での \altcite の挙動に関しても対処しました. %%% (\leavevmode か何かで明示的に段落を開始すればいいので, %%% \cite/\altcite に \leavevmode を補っただけですが…) %%% また,``既製品'' がありそうな気もしますが,気にしないことにします. \documentclass{article} \makeatletter \DeclareRobustCommand*\cite{% \leavevmode \@ifnextchar[% {\@tempswatrue\@xcite\@cite\@citefmt}% {\@tempswafalse\@xcite\@cite\@citefmt[]}} %%% 全体を [, ] で囲む(#2 はコメント部分) \def\@cite#1#2{[#1\if@tempswa; #2\fi]} %%% 個々の項目は ``Name, year'' の形式 \def\@citefmt{{\@cite@namepart}, {\@cite@yearpart}} \DeclareRobustCommand*\altcite{% \leavevmode \@ifnextchar[% {\@tempswatrue\@xcite\@altcite\@altcitefmt}% {\@tempswafalse\@xcite\@altcite\@altcitefmt[]}} %%% とりあえず,コメント部分はセミコロンで区切って後置 \def\@altcite#1#2{#1\if@tempswa ; #2\fi} %%% 個々の項目は ``Name [year]'' の形式 \def\@altcitefmt{{\@cite@namepart}\ [{\@cite@yearpart}]} \def\@xcite#1#2[#3]#4{% %%% #1: 全体の整形用マクロ %%% #2: 個々の項目の整形用マクロ %%% #3: コメント(\cite あるいは \altcite のオプション引数) %%% #4: ``参照キー'' のリスト \let\@citea\@empty #1% {\@for\@citeb:=#4\do{% \@citea\def\@citea{;\penalty\@m\ }% \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% \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}}% {\expandafter\expandafter\expandafter\@cite@parse \csname b@\@citeb\endcsname,,\@nil \hbox{#2}}}}% {#3}} \def\@cite@parse#1,#2,#3\@nil{%%% #1: name, #2: year, #3: junk \def\@cite@namepart{#1}% \protected@edef\@cite@yearpart{\@firstofone#2\@empty}} \makeatother \begin{document} See \cite{Sato2000, Suzuki2001} See also \altcite{Sato2000, Suzuki2001} \begin{thebibliography}{\textit{Suzuki}, 2001} \bibitem[\textit{Sato}, 2000]{Sato2000} Sato \dots \bibitem[\textit{Suzuki}, 2001]{Suzuki2001} Suzuki \dots \end{thebibliography} \end{document} %%% \bibitem[{\textit{Sato}, \textit{Suzuki} and \textit{Yamada}}, 2002] %%% のように,人名部分にコンマが含まれる場合には,人名部分を {, } で %%% 囲んでください. %%% 先に提示した \altcite の定義は,\altcite にオプション引数を %%% つけない場合にエラーが生じました.すみません.
この書き込みへの返事: