我想修饰一些文本,然后重新打印未修饰的文本。这是我用来执行此操作的代码。
\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}