![如何将“fnpct”包与 natbib 一起使用?](https://linux22.com/image/377564/%E5%A6%82%E4%BD%95%E5%B0%86%E2%80%9Cfnpct%E2%80%9D%E5%8C%85%E4%B8%8E%20natbib%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我使用的natbib
是选项super
,它以上标数字的形式生成引文标注。这些数字看起来很像脚注标记。我想使用函数包将引文标注数字移到标点符号之外并改善字距。不幸的是,默认情况下它仅适用于\footnote
s,而不是 natbib 的\cite
s。根据文档第 8 章和这个答案,您可以通过在前言中fnpct
添加命令来与 Biblatex 一起破解。但我使用的是 BibTeX 而不是,如果我尝试添加该命令,我的 TeX 容量就会超出。\AdaptNoteOpt\cite\multcite
natbib
biblatex
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
使用fnpct
v1.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}
使用fnpct
v0.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}