\renewcommand 重新定义 \cite

\renewcommand 重新定义 \cite

我想重新定义,\cite{}以便文本像

\cite{blah:1991:pldi}

被替换为

\cite{blah:1991:pldi:short}

我尝试了以下操作:

\let\oldcite\cite
\renewcommand{\cite}[1]{\oldcite}{#1:short}}

但是,这不适用于有多个参数的情况\cite{}

例如,我想

\cite{blah1, blah2}  

被取代

\cite{blah1:short, blah2:short}

也一样。

有什么建议么?

答案1

假设您不使用重新定义的包\cite(如cite.sty),请尝试以下操作:

\makeatletter
\def\@citex[#1]#2{\leavevmode
  \let\@citea\@empty
  \@cite{\@for\@citeb:=#2\do
    {\@citea\def\@citea{,\penalty\@m\ }%
     \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
     \if@filesw\immediate\write\@auxout{\string\citation{\@citeb:short}}\fi
     \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
       \G@refundefinedtrue
       \@latex@warning
         {Citation `\@citeb' on page \thepage \space undefined}}%
       {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}
\makeatother

相关内容