natbib:修改特定源类型的引用样式,其他保持默认

natbib:修改特定源类型的引用样式,其他保持默认

我正在使用natbib并想修改一种特定类型的来源(古典文本)的标点符号样式,而其余来源的标点符号应保留其默认设置。

具体来说,我想引用没有作者姓名和没有逗号的古代文献:例如亚里士多德的《政治学》第 123 节,文中引用如下:

blablabla(政治 123)

而其他来源则应以默认方式在文中引用,即作者年份,年份和页码之间用逗号分隔:

yadayayaya (Smith 1992, 33)。

到目前为止,我正在使用\defcitealias\citepalias,除了标点符号外,效果很好:

\defcitealias{Aristotle1992}{\textit{Politics}}  
\citepalias[123]{Aristotle1992}

结果是

(政治,123)

=> 我想去掉这里的逗号,但仍然保留其他引用的逗号。

有没有办法从natbib包内部实现这一点(如果可能的话,我宁愿不切换到例如biblatex)......? 我将非常感激任何帮助。


下面是一些示例代码(希望这可以归类为可行的示例):

\documentclass{article}
\begin{filecontents}{\jobname.bib}
@BOOK{Aristotle1992,
  title = {The Politics},
  publisher = {London: Penguin},
  year = {1992},
  author = {Aristotle}
    }

@BOOK{Smith2003,
  title = {Blalala},
  publisher = {London: Penguin},
  year = {2003},
  author = {Smith, John}
    }
\end{filecontents}  
\usepackage{natbib}  
\begin{document}  

\defcitealias{Aristotle1992}{\textit{Politics}}    

This is as close as I get to what I want, but I would like to get rid of the comma:  

\citepalias[123a]{Aristotle1992}  

Other sources should be referred to in the usual way though (author date, page):  

\citep[p.~222]{Smith2003}  

\bibliographystyle{chicago}    
\bibliography{\jobname}  
\end{document}

答案1

将代码放在后面usepackage{natbib}

\usepackage{etoolbox}
\makeatletter
\let\save@NAT@cmt\NAT@cmt % saving comma 
\def\restore@NAT@cmt{\global\let\NAT@cmt\save@NAT@cmt} % restoring comma
\def\fix@NAT@cmt{\def\NAT@cmt{\space\restore@NAT@cmt}} % fix for citepalias
\preto\citepalias{\fix@NAT@cmt}{}{}  % patching citepalias
\makeatother

输出: 在此处输入图片描述

答案2

您也可以使用该classics包:

在此处输入图片描述

\documentclass{article}
\usepackage{classics}
\newclassic{Aristotle}{#1|\textit{#1}|#1}

\begin{document}

\Aristotle [Politics]{1260}[a]

\Aristotle [Politics]{1260}[a][2]

\Aristotle*[Politics]{1260}[a][2]{1261}[b][3]

\end{document}

这是如何与、或(以及 deimi 的答案)classics结合使用:您需要用括号括起来。biblatexbiblatex-chicagonatbib\Aristotle

\cite[{\Aristotle{1260}[a][2]}]{Aristotle1992} 

相关内容