Латекс - извлекает символы подстроки/игнорировать

У меня есть следующая проблема. Я определил макрос, \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 должен остаться как есть.

6
задан Jus12 14 June 2015 в 12:01
поделиться

1 ответ

Это можно сделать с помощью стандартного программирования LaTeX. Something like:

\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}
11
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: