8

我有以下问题。我定义了一个宏,\func如下

\newcommand{\func}[1]{% do something with #1  
X #1 Y
}

我现在想定义另一个宏

\newcommand{\MyFunc}[1]{  
% parse #1 and if it contains "\func{....}", ignore all except this part
% otherwise ignore #1 
}

有人可以告诉我如何实施\MyFunc吗?

这是应该发生的事情:

\MyFunc{123abcdefg}              % should print nothing
\MyFunc{123\func{abcd}efg}       % should print X abcd Y

我只能更改\MyFunc. \func应该保持原样。

4

1 回答 1

13

这可以通过标准的 LaTeX 编程来完成。就像是:

\documentclass{文章}
\newcommand\func[1]{X #1 Y}
\makeatletter
\newcommand\MyFunc[1]{%
  \in@{\func}{#1}%
  \ifin@
    \ignore@all@but@func#1\@nil
  \fi
}
\def\ignore@all@but@func#1\func#2#3\@nil{\func{#2}}
\makeatother
\开始{文档}
[\MyFunc{123abcdefg}] % 不应该打印任何内容
[\MyFunc{123\func{abcd}efg}] % 应该打印 X abcd Y
\结束{文档}
于 2010-01-05T02:33:31.257 回答