インライン引用では、Smith (2010a, b) ではなく Smith (2010a, 2010b) を使用する

インライン引用では、Smith (2010a, b) ではなく Smith (2010a, 2010b) を使用する

私は執筆に 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つのエントリのキーが と であると仮定するとsm1sm2次のように記述することで目的を達成できます。

\citeauthor{sm1} (\citeyear{sm1}, \citeyear{sm2})

注:パッケージには、、およびのnatbibオプションがありますが、これらは主に数値形式の引用コールアウト向けに設計されているようです。著者年形式の引用コールアウトの場合、パッケージはやなどのオプションを提供していないようです。そのため、上記に示した扱いにくいコードが必要になります。sortcompresssort&compressnosortnocompress

関連情報