Smith (2010a, 2010b) em vez de Smith (2010a, b) durante a citação in-line

Smith (2010a, 2010b) em vez de Smith (2010a, b) durante a citação in-line

Estou usando o pacote natbib para escrever.

Por exemplo, Smith tem 2 artigos, ambos publicados em 2010. Eu os rotulei como Sm1 e sm2 em meu arquivo .bib. Agora, quando cito os artigos usando \citet{Sm1,Sm2}, produz Smith (2010a, b). Mas quero que seja como Smith (2010a, 2010b). Alguém pode me ajudar?

Responder1

Eu corrigiria \NAT@citexpara evitar a verificação do ano, então você não precisa saber o ano com antecedência. Funcionará em todos os casos.

\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}

Como sempre, o filecontents*ambiente serve apenas para tornar o exemplo independente.

insira a descrição da imagem aqui

Explicação. O \NAT@citexcomando é a parte principal do processo; em dois lugares isso acontece

\ifx\NAT@last@yr\NAT@year
  <something if the current citation has the same year as the preceding one>
\else
  <otherwise>
\fi

Com o patch alteramos a condicional (primeira linha) para \iffalse, então o branch “true” nunca será seguido.

Responder2

Supondo que as chaves das duas entradas sejam sm1e sm2, você pode atingir seu objetivo escrevendo

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

Observação: O natbibpacote apresenta as opções sort, compresse sort&compress, mas elas parecem ser voltadas principalmente para chamadas de citação em estilo numérico. Para chamadas de citação no estilo autorano, o pacote não parece fornecer opções como nosortou nocompress- daí a necessidade do código de aparência complicada fornecido acima.

informação relacionada