我正在使用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
结合使用:您需要用括号括起来。biblatex
biblatex-chicago
natbib
\Aristotle
\cite[{\Aristotle{1260}[a][2]}]{Aristotle1992}