使用 natbib 上标页码

使用 natbib 上标页码

我遇到了一个恼人的问题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

相关内容