我遇到了一个恼人的问题natbib
。当super
使用参数时,引用会顺利地变成上标,但页码或章节号却不会。
\documentclass{article}
\usepackage[numbers, square, super]{natbib}
\begin{document}
Some information.\cite[p.~56]{who09}
\begin{thebibliography}{0}
\bibitem{who09} Who J F. Nice Book. 2009.
\end{thebibliography}
\end{document}
以上示例将页码显示为普通文本,而不是上标。删除super
页码后会将其放入括号中。
答案1
虽然这种引用方式并不常见(因为约瑟夫·赖特在他的评论中建议),您可以通过重新定义 natbib 的内部宏来获得所需的结果\NAT@citesuper
。 以下是此类重新定义的一个工作示例:
\documentclass{article}
\usepackage[numbers, square, super]{natbib}
\makeatletter
\renewcommand\NAT@citesuper[3]{\ifNAT@swa
\if*#2*\else#2\NAT@spacechar\fi
\unskip\kern\p@\textsuperscript{\NAT@@open#1\if*#3*\else,\NAT@spacechar#3\fi\NAT@@close}%
\else #1\fi\endgroup}
\makeatother
\begin{document}
Some text\cite[p.~56]{who09} some text\cite{who09}
\begin{thebibliography}{0}
\bibitem{who09} Who J F. Nice Book. 2009.
\end{thebibliography}
\end{document}
答案2
我无法发表评论,所以我很想把这个作为答案发布出来。虽然要求的确切示例(如重复的一样)并不常见,但这种修改有一个非常常见的用途:通过在方括号中添加相应的字母,将其转换为 [1a]、[1b] 中的子引用,\cite[a]{foo}, \cite[b]{foo}
也适用于 Natbib。
我查看了 Gonzalo 的代码片段,猜测哪些部分太多了,然后对其进行了修改。也许可以删除更多代码,但我不知道应该删除哪些代码,这是第一个可行的示例。(我特别怀疑任何包含无关内容的内容#2
,但我不想继续研究这个问题,因为我很快就要交论文了。)
\makeatletter
\renewcommand\NAT@citesuper[3]{\ifNAT@swa
\if*#2*\else#2\NAT@spacechar\fi
\unskip\kern\p@\textsuperscript{\NAT@@open#1#3\NAT@@close}%
\else #1\fi\endgroup}
\makeatother