2010-01-04 15 views
5

Tengo el siguiente problema. He definido una macro, \func de la siguiente maneraLatex - extraer caracteres de subcadena/ignorar

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

ahora quiero definir otra macro

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

¿Puede alguien decirme cómo implementar \MyFunc?

Esto es lo que debería ocurrir:

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

sólo puedo cambiar el código de \MyFunc. \func debe permanecer como está.

+0

¿Exactamente por qué estás tratando de hacer esto? –

+1

Tengo una leyenda en los algoritmos que se define como leyenda {blah blah \ func {algorithm_name} blah blah} Cuando creo el ToC, quiero extraer solo el algorithm_name (junto con el formateo debido a \ func e ignorar el resto. – Jus12

+0

Pruebe '\ caption [\ func {algorithm_name}] {blah blah \ func {algorithm_name} blah blah}' . –

Respuesta

10

Esto se puede hacer con la programación estándar de LaTeX. Algo como:

 
\documentclass{article} 
\newcommand\func[1]{X #1 Y} 
\makeatletter 
\newcommand\MyFunc[1]{% 
    \[email protected]{\func}{#1}% 
    \[email protected] 
    \[email protected]@[email protected]#1\@nil 
    \fi 
} 
\def\[email protected]@[email protected]#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} 
+0

probado y trabajado aquí. Hay otras maneras de obtener el resultado, pero esto debería ser lo más simple. –

+1

gracias !! eso es exactamente lo que estaba buscando :) ¿Hay algún recurso bueno para aprender (La) la programación de TeX? – Jus12

+1

Debo mencionar que tuve que cambiar '\ newcommand' en tu código a' \ DeclareRobustCommand', ¡y luego todo funcionó perfectamente! (esto está relacionado con el documento real, por supuesto, no el ejemplo de juguete anterior) – Jus12