\renewcommand{\cite} 不起作用

\renewcommand{\cite} 不起作用

我在我的文档中使用了\cite很多,但现在我发现我真正需要的\citep是(来自 natbib)。没问题,我想,只需重新定义命令\cite

\renewcommand{\cite}[1]{\citep{#1}}

这对于我的笔记本电脑(Mac)上的版本有效LaTeX,但在我的 Linux 机器上却\renewcommand没有效果。

我如何安全地重新定义\cite命令,以便它适用于所有 LaTeX 发行版?

PS:不起作用的版本是这个:

pdfTeX 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian)
kpathsea version 5.0.0

更新:在\let也没有用之后(见答案)我发现了问题的根源:我有\usepackage{natbib}命令我的\renewcommand{\cite}命令。更改顺序即可解决问题。

答案1

正如您所指出的,顺序很重要。请注意,您可以通过以下方式获得与 \renewcommand 大致相同的效果,但工作量较少

\renewcommand\cite{\citep}

也就是说,你不需要参数。这对于 \url 之类的东西来说通常是必要的,它会在查看参数之前更改 catcode,但在这种情况下可能没有任何区别。

答案2

你可以尝试

\let\cite\citep

反而。

更新:看到您更新的问题后:我认为\let如果您也将其放在后面,那么应该可以解决问题\usepackage{natbib}。通常,在所有包加载后放置重新定义可以防止宏被意外覆盖。

答案3

可以使用 \AtBeginDocument 来避免这些问题,例如:

\AtBeginDocument{\renewcommand\cite{\citep}}

如果您正在创建自己的包,那么这将允许您在 natbib 之前加载您的包并重新定义引用命令。

相关内容