我尝试本地重新定义命令失败,但不确定原因

我尝试本地重新定义命令失败,但不确定原因

我想修饰一些文本,然后重新打印未修饰的文本。这是我用来执行此操作的代码。

\documentclass{article}
\usepackage{xcolor}
\makeatletter
\newcommand{\@aeformatcontent}[1]{\parbox[t]{5in}{\emph{#1}}}
\newcommand{\aeformatcontent}[1]{%%'
  $\star$\hspace*{0.5em}\@aeformatcontent{#1}\par
  \bgroup
    \def\aeget#1{#1}%%'
    $\phantom{\star}$\hspace*{0.5em}\@aeformatcontent{#1}%%'
  \egroup
} 

\newcommand{\aeget}[1]{\csname aephrase #1\endcsname}
\newcommand{\aedefine}[1]{\expandafter\def\csname aephrase #1\endcsname{{\color{red}#1}}}

\makeatother

\begin{document}

  \aedefine{this is a trial}
  \aeget{this is a trial}

  \aeformatcontent{\aeget{this is a trial}}

\end{document}

当我尝试编译它时,出现错误:

! Use of \aeget doesn't match its definition.
<argument> \aeget {
                   this is a trial}
l.24 ... \aeformatcontent{\aeget{this is a trial}}

? 

如果我替换\def\aeget#1{#1}

\renewcommand{\aeget}[1]{#1}

我陷入了无限循环,直到超出了 LaTeX 的容量。

我不明白为什么这两种方法都不起作用。我也不明白为什么我会收到不同的错误消息。

答案1

您的内部重新定义\aeget需要双倍使用参数文本:

\def\aeget##1{##1}

这将重置\aeget为无操作,但由于它是在内部重新定义的\aeformatcontent你必须#加倍.另请参阅在其他命令中定义 LaTeX 命令

在此处输入图片描述

\documentclass{article}
\usepackage{xcolor}% http://ctan.org/pkg/xcolor
\makeatletter
\newcommand{\@aeformatcontent}[1]{\parbox[t]{5in}{\emph{#1}}}
\newcommand{\aeformatcontent}[1]{%%'
  $\star$\hspace*{0.5em}\@aeformatcontent{#1}\par
  \bgroup
    \def\aeget##1{##1}%%'
    $\phantom{\star}$\hspace*{0.5em}\@aeformatcontent{#1}%%'
  \egroup
}

\newcommand{\aeget}[1]{\csname aephrase #1\endcsname}
\newcommand{\aedefine}[1]{\expandafter\def\csname aephrase #1\endcsname{{\color{red}#1}}}

\makeatother

\begin{document}

  \aedefine{this is a trial}
  \aeget{this is a trial}

  \aeformatcontent{\aeget{this is a trial}}

\end{document}

相关内容