%20%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%20Smith%20(2010a%2C%202010b)%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B.png)
私は執筆に natbib パッケージを使用しています。
たとえば、スミスには 2 つの論文があり、どちらも 2010 年に出版されています。.bib ファイルでは、これらを Sm1 と sm2 とラベル付けしています。\citet{Sm1,Sm2} を使用してこれらの論文を引用すると、Smith (2010a, b) が生成されます。しかし、私は Smith (2010a, 2010b) としたいのです。どなたか助けていただけませんか?
答え1
\NAT@citex
年の確認を回避するためにパッチを適用します。そのため、事前に年を知る必要はありません。どの場合でも機能します。
\begin{filecontents*}{\jobname.bib}
@article{sma,
author={Smith, J.},
title={A},
journal={B},
year={2014},
}
@article{smb,
author={Smith, J.},
title={C},
journal={D},
year={2014},
}
\end{filecontents*}
\documentclass{article}
\usepackage[authoryear,round]{natbib}
\usepackage{xpatch}
% patch \NAT@citex to always use the year
\makeatletter
\xpatchcmd{\NAT@citex}
{\ifx\NAT@last@yr\NAT@year}
{\iffalse}
{}{}
\xpatchcmd{\NAT@citex}
{\ifx\NAT@last@yr\NAT@year}
{\iffalse}
{}{}
\makeatother
\begin{document}
\citep{sma,smb}
\citet{sma,smb}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
いつものように、filecontents*
環境は例を自己完結型にするためだけのものです。
説明。\NAT@citex
コマンドはプロセスの主要部分であり、2つの場所で
\ifx\NAT@last@yr\NAT@year
<something if the current citation has the same year as the preceding one>
\else
<otherwise>
\fi
パッチを使用して、条件 (最初の行) を に変更し\iffalse
、「true」ブランチが実行されないようにします。
答え2
2つのエントリのキーが と であると仮定するとsm1
、sm2
次のように記述することで目的を達成できます。
\citeauthor{sm1} (\citeyear{sm1}, \citeyear{sm2})
注:パッケージには、、およびのnatbib
オプションがありますが、これらは主に数値形式の引用コールアウト向けに設計されているようです。著者年形式の引用コールアウトの場合、パッケージはやなどのオプションを提供していないようです。そのため、上記に示した扱いにくいコードが必要になります。sort
compress
sort&compress
nosort
nocompress