%20%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE%20%D0%A1%D0%BC%D0%B8%D1%82%20(2010a%2C%20b)%20%D0%B2%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%86%D0%B8%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F.png)
Для написания текстов я использую пакет natbib.
Например, у Смита есть 2 статьи, обе опубликованы в 2010 году. Я обозначил их как Sm1 и sm2 в моем файле .bib. Теперь, когда я цитирую статьи с помощью \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
Команда — это основная часть процесса; в двух местах она
\ifx\NAT@last@yr\NAT@year
<something if the current citation has the same year as the preceding one>
\else
<otherwise>
\fi
С помощью патча мы меняем условный оператор (первая строка) на \iffalse
, поэтому «истинная» ветвь никогда не будет выполнена.
решение2
Предполагая, что ключами двух записей являются sm1
и sm2
, вы можете достичь своей цели, записав
\citeauthor{sm1} (\citeyear{sm1}, \citeyear{sm2})
Примечание: natbib
Пакет содержит параметры sort
, compress
и sort&compress
, но они, похоже, в основном предназначены для числовых ссылок на цитаты. Для ссылок на цитаты в стиле authoryear пакет, похоже, не предоставляет такие параметры, как nosort
или nocompress
-- отсюда и необходимость в громоздком на вид коде, представленном выше.