Latex - 提取子字符串/忽略字符

时间:2010-01-04 14:22:58

标签: latex parsing token tex if-statement

我有以下问题。我已经定义了一个宏,\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应保持原样。

1 个答案:

答案 0 :(得分:11)

这可以通过标准的LaTeX编程来完成。类似的东西:

\documentclass{article}
\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
\begin{document}
[\MyFunc{123abcdefg}]              % should print nothing
[\MyFunc{123\func{abcd}efg}]       % should print X abcd Y
\end{document}