apacite
2012 年 2 月 14 日推出了该软件包的新版本,其中添加了三个选项来选择不同的引用命令: apaciteclassic
、natbibapa
和nocitation
。我在 MiKTeX 2.9 上安装了该软件包并尝试使用它。该apaciteclassic
选项没有任何问题。但是,当我尝试时,natbibapa
我收到此错误(我粘贴了部分日志):
("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\natbib\natbib.sty"
Package: natbib 2010/09/13 8.31b (PWD, AO)
\bibhang=\skip48
\bibsep=\skip49
LaTeX Info: Redefining \cite on input line 694.
\c@NAT@ctr=\count89
)
LaTeX Info: Redefining \BBA on input line 3.
! Undefined control sequence.
\apacite.sty-h@@k ...elist {\orig@mb@citenamelist
,citeauthort,citeauthorp,c...
l.3
?
! Emergency stop.
\apacite.sty-h@@k ...elist {\orig@mb@citenamelist
,citeauthort,citeauthorp,c...
l.3
End of file on the terminal!
这是一个最小的工作示例(产生错误):
\documentclass[12pt]{report}
\usepackage[natbibapa]{apacite}
\begin{document}
Lorem ipsum dolor sit amet. \citet{shermis1999comparison} consectetur adipiscing elit.
\bibliographystyle{apacite}
\bibliography{myrefs}
\end{document}
以下是围兜条目:
@ARTICLE{shermis1999comparison,
author = {Shermis, M.D. and Lombard, D.},
title = {A comparison of survey data collected by regular mail and electronic mail questionnaires},
journal = {Journal of Business and Psychology},
year = {1999},
volume = {14},
pages = {341--354},
number = {2},
publisher = {Springer}
}
有人可以安装新软件包并查看他/她在使用该natbibapa
选项时是否遇到相同的错误吗?我做错了什么吗?
我感谢任何帮助。
答案1
apacite.sty
1966 至 1994 行表示什么,这一点不太清楚。
它在假设选项已经指定的\@mb@citenamelist
情况下定义一个命令;对于选项,它说classic
natbibapa
\if@APAC@natbib@apa
\AtEndOfPackage{%
\let\orig@mb@citenamelist\@mb@citenamelist
\edef\@mb@citenamelist{%
\orig@mb@citenamelist,%
citeauthort,citeauthorp,citefullauthort,citefullauthorp,Citeauthort,%
<...other strings...>
}
}
\fi
但是\@mb@citenamelist
不是定义,所以整个事情失败了。一个猜测是,选项natbibapa
应该扩充列表,所以说
\makeatletter
\def\@mb@citenamelist{%
cite,fullcite,shortcite,citeNP,fullciteNP,shortciteNP,%
citeA,fullciteA,shortciteA,citeauthor,fullciteauthor,shortciteauthor,%
citeauthorNP,fullciteauthorNP,shortciteauthorNP,%
citeyear,citeyearNP,nocite,nocitemeta,%
maskcite,maskfullcite,maskshortcite,maskciteNP,maskfullciteNP,%
maskshortciteNP,maskciteA,maskfullciteA,maskshortciteA,%
maskciteauthor,maskfullciteauthor,maskshortciteauthor,%
maskciteauthorNP,maskfullciteauthorNP,maskshortciteauthorNP,%
maskciteauthorA,maskfullciteauthorA,maskshortciteauthorA,%
maskciteyear,maskciteyearNP,masknocite%
}
\makeatother
前加载apacite.sty
即可解决问题。
第二种可能性是,为该选项提供的列表natbibapa
是详尽的,在这种情况下添加
\makeatletter\def\@mb@citenamelist{}\makeatother
加载之前apacite
将是临时的解决方案。
当然这是应该引起开发人员注意的事情apacite
。