2010-01-04 6 views
5

Ho il seguente problema. Ho definito una macro, \func come segueLatex - estrae la sottostringa/ignora i caratteri

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

Ora voglio definire un altro macro

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

qualcuno può dirmi come implementare \MyFunc?

Ecco ciò che dovrebbe accadere:

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

posso cambiare solo il codice di \MyFunc. \func dovrebbe rimanere così com'è.

+0

Esattamente perché stai cercando di farlo? –

+1

Ho una didascalia in algoritmi definita come didascalia {blah blah \ func {algorithm_name} blah blah} Quando creo il ToC, voglio estrarre solo l'algoritm_name (insieme alla formattazione dovuta a \ func e ignora il resto – Jus12

+0

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

risposta

10

Questo può essere fatto con la programmazione standard LaTeX. Qualcosa di simile:

 
\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

Testato e lavorato qui. Ci sono altri modi per ottenere il risultato, ma questo dovrebbe essere il più semplice. –

+1

grazie !! questo è esattamente quello che stavo cercando :) Esiste una buona risorsa per l'apprendimento (La) programmazione TeX? – Jus12

+1

Devo dire che ho dovuto cambiare '\ newcommand' nel codice in' \ DeclareRobustCommand', e poi tutto ha funzionato alla perfezione! (questo è correlato al documento vero e proprio, non l'esempio del giocattolo sopra) – Jus12