인라인 인용 중 Smith(2010a, b) 대신 Smith(2010a, 2010b)

인라인 인용 중 Smith(2010a, b) 대신 Smith(2010a, 2010b)

저는 글쓰기에 natbib 패키지를 사용하고 있습니다.

예를 들어 Smith는 2010년에 출판된 2개의 논문을 가지고 있습니다. 저는 .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은 프로세스의 주요 부분입니다. 두 곳에서는 그렇습니다

\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

두 항목의 키가 sm1및 라고 가정하면 sm2다음을 작성하여 목표를 달성할 수 있습니다.

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

비고: natbib패키지에는 옵션이 포함되어 있습니다.sort 패키지에는 , compresssort&compress 대부분 숫자 스타일 인용 설명선에 맞춰져 있는 것 같습니다. 저자연도 스타일 인용 콜아웃의 경우 패키지는 nosort또는 같은 옵션을 제공하지 않는 것으로 보입니다 nocompress. 따라서 위에 제공된 번거로워 보이는 코드가 필요합니다.

관련 정보