我在我的文档中使用了\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 之前加载您的包并重新定义引用命令。