如何将“fnpct”包与 natbib 一起使用?

如何将“fnpct”包与 natbib 一起使用?

我使用的natbib是选项super,它以上标数字的形式生成引文标注。这些数字看起来很像脚注标记。我想使用函数包将引文标注数字移到标点符号之外并改善字距。不幸的是,默认情况下它仅适用于\footnotes,而不是 natbib 的\cites。根据文档第 8 章和这个答案,您可以通过在前言中fnpct添加命令来与 Biblatex 一起破解。但我使用的是 BibTeX 而不是,如果我尝试添加该命令,我的 TeX 容量就会超出。\AdaptNoteOpt\cite\multcitenatbibbiblatex

MWE:尝试编译

\documentclass{article}
\usepackage[super,compress]{natbib}
\usepackage{fnpct}

\AdaptNoteOpt\cite\multcite

\begin{document}

Hello world \cite{Anderson}.

\end{document}

导致错误消息

!TeX 容量超出,抱歉 [主内存大小=5000000]。 \l__xparse_args_tl ...{Anderson}{Anderson}{Anderson}{Anderson}{Anderson}{And...

似乎出于某种原因,该\AdaptNoteOpt命令导致解析器重复{Anderson}无数次。我该如何解决这个问题?

编辑:我想这样做的原因是在这个问题。我希望引用上标位于标点符号之外。如果我手动执行此操作(Hello world.\cite{Anderson}),那么句号和上标之间的水平空间会有点太多。我想将上标移近标点符号一两个点(但不是直接在标点符号上方),这显然可以使用该fnpct包来完成。如果有更简单的方法可以做到这一点而不需要该包,我也会接受。

答案1

使用fnpctv1.x(2021 年 1 月更新答案)

使用 1.x 版本它可以原生运行:

\documentclass{article}
\usepackage[super,compress]{natbib}
\usepackage{fnpct}

\AdaptNote\cite{oom}{%
  \IfNoValueTF{#1}
    {#NOTE{#3}}
    {\IfNoValueTF{#2}{#NOTE[#1]{#3}}{#NOTE[#1][#2]{#3}}}%
}

\begin{document}

Hello world\cite{Anderson}.

\end{document}

使用fnpctv0.x (原始答案)

natbib定义\cite由此\DeclareRobustCommand\cite导致的问题。

的定义\cite现在是\protect\cite␣内部宏的名称\cite␣ 包含尾随空格我已用 表示

解决方案是

\expandafter\AdaptNoteOpt\csname cite \endcsname\multcite

后面的空白cite至关重要。

\documentclass{article}
\usepackage[super,compress]{natbib}
\usepackage{fnpct}

\expandafter\AdaptNoteOpt\csname cite \endcsname\multcite

\begin{document}

Hello world\cite{Anderson}.

\end{document}

在此处输入图片描述

相关内容