%20%EB%8C%80%EC%8B%A0%20Smith(2010a%2C%202010b).png)
저는 글쓰기에 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
패키지에는 , compress
및sort&compress
대부분 숫자 스타일 인용 설명선에 맞춰져 있는 것 같습니다. 저자연도 스타일 인용 콜아웃의 경우 패키지는 nosort
또는 같은 옵션을 제공하지 않는 것으로 보입니다 nocompress
. 따라서 위에 제공된 번거로워 보이는 코드가 필요합니다.