在带参数的宏中重新定义宏

在带参数的宏中重新定义宏

我已经尝试了好几个小时了。可能是我错过了一些简单的事情...

我有一个宏\newcommand{\cf}[1]{\footnote{Cf. #1}}(通常使用\cf{\cite{xx}})。现在我想扩展它,让它记住我最后使用的参考文献,如果再次使用相同的参考文献,则不打印引文而是打印“Ibd。”。

因此我修改了它

\newcommand{\cf}[1]{
  Cf.    
  \ifthenelse{\equals{\SVE}{#1}}{%
    ibd.}{%
    #1
    \def\SVE#1
  }
}

但那行不通。\SVE仍然是空的(或者不管我先如何初始化它)。到目前为止,我做了很多实验,像疯了一样把\expandafters、\noexpands、... 放来放去……但没有结果。

- 编辑:

以下是复制的完整代码:

\documentclass{article}

% somewhere in my preamble
\usepackage{ifthen}
\newcommand{\LLfootnoteLastCite}{}
\newcommand\LLfootnoteCite[1]{%
    \ifthenelse{\equal{\LLfootnoteLastCite}{#1}}{%
        ibd.}{%
        #1%
        \def\LLfootnoteLastCite{#1}%
    }%
}
\newcommand{\LLfootnote}[3]{\footnote{#3~#2\ifx#10\else, S. #1\fi.}}

% the exposed commands
\newcommand{\vgl}[2][0]{\LLfootnote{#1}{\LLfootnoteCite{#2}}{Vgl.}}


% small working example
\begin{document}
  This is a\vgl{\cite{Reference}}. And this is the second\vgl{\cite{Reference}}. And this is a third\vgl{\cite{Reference2}}
\end{document}

答案1

在此处输入图片描述

\documentclass{article}

\usepackage{ifthen}

\newcommand\SVE{}% initialize

\newcommand{\cf}[1]{%you need this %
  Cf.    
  \ifthenelse{\equal% \equal not \equals
       {\SVE}{#1}}{%
    ibd.}{%
    #1% you need thi s%
    \def\SVE{#1}% braces are mandatory for \def
  }% you need this %
}
\begin{document}

\cf{aaa} \cf{aaa} \cf{zzz} \cf{zzz}

\end{document}

相关内容