2010-03-08 12 views
14

Estoy tratando de construir un comando que es similar al látex \cite{}, que acepta una lista separada por comas de parámetros como estoparámetros divididos separados por comas en el látex

\cite{Wall91, Schwartz93}

me gustaría pasar cada elemento en la lista separada por comas que el parámetro representa para otro comando y devuelve la concatenación de los resultados individuales. Me imagino que sea algo como esto:

\newcommand{\mycite}[1]{% 
    \@for\var:=\split{#1} do{% 
    \processCitation{\var}% 
    }% 
} 

literatura sobre manipulación de cadenas, variables y bucles en LaTeX sería genial!

También: ¿Hay alguna manera de unir los resultados individuales utilizando comas nuevamente?

Gracias!

Respuesta

17

Utilización de Enlace de Roberto llegué a esta solución: ejemplo

\makeatletter 

% Functional foreach construct 
% #1 - Function to call on each comma-separated item in #3 
% #2 - Parameter to pass to function in #1 as first parameter 
% #3 - Comma-separated list of items to pass as second parameter to function #1 
\def\foreach#1#2#3{% 
    \@[email protected]{#1}{#2}#3,\@[email protected]% 
} 

% Internal helper function - Eats one input 
\def\@swallow#1{} 

% Internal helper function - Checks the next character after #1 and #2 and 
% continues loop iteration if \@[email protected] is not found 
\def\@[email protected]#1#2{% 
    \@ifnextchar\@[email protected]% 
    {\@swallow}% 
    {\@foreach{#1}{#2}}% 
} 

% Internal helper function - Calls #1{#2}{#3} and recurses 
% The magic of splitting the third parameter occurs in the pattern matching of the \def 
\def\@foreach#1#2#3,#4\@[email protected]{% 
    #1{#2}{#3}% 
    \@[email protected]{#1}{#2}#4\@[email protected]% 
} 

\makeatother 

Uso:

% Example-function used in foreach, which takes two params and builds hrefs 
\def\makehref#1#2{\href{#1/#2}{#2}} 

% Using foreach by passing #1=function, #2=constant parameter, #3=comma-separated list 
\foreach{\makehref}{http://stackoverflow.com}{2409851,2408268} 

% Will in effect do 
\href{http://stackoverflow.com/2409851}{2409851}\href{http://stackoverflow.com/2408268}{2408268} 
+0

¿Y cómo se usa esto? ¿Podría dar un ejemplo? – AVB

+0

¡Gracias por el ejemplo! +1 para preguntas y respuestas. ¿Te importa echar un vistazo aquí: http://stackoverflow.com/questions/2389081/ Tal vez tengas una idea. – AVB

+0

No hay problema. Gracias por el voto ¡Echa un vistazo a la solución que di en tu publicación! –

-3

Puede utilizar el paquete cite como

\usepackage{cite} 
... 
\cite{citation1, citation2, citation3} 

Marque esta link.

+3

Lo siento, pero la pregunta es cómo construir un comando como citar a ti mismo. –

Cuestiones relacionadas