2010-03-08 13 views
14

Próbuję zbudować polecenia, który jest podobny do LaTeX \cite{}, który akceptuje listę oddzielonych przecinkami parametrów jak tendzielona parametry oddzielone przecinkami w LaTeX

\cite{Wall91, Schwartz93}

chciałbym przejść każdy pozycja na liście rozdzielanej przecinkami, którą parametr reprezentuje dla innego polecenia i zwraca konkatenację poszczególnych wyników. Wyobrażam sobie, że jest coś takiego:

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

Literatura na ciąg manipulacji, zmiennych i pętli w LaTeX byłoby świetnie!

Również: Czy istnieje sposób, aby ponownie połączyć poszczególne wyniki za pomocą przecinków?

Dzięki!

Odpowiedz

17

Korzystanie odnośnik Roberta I przybył do tego rozwiązania: Przykład

\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 

Zastosowanie:

% 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

A jak się z tego korzysta? Czy mógłbyś podać przykład? – AVB

+0

Dzięki za przykład! +1 dla pytania i odpowiedzi dla obu. Czy możesz spojrzeć tutaj: http://stackoverflow.com/questions/2389081/ Może masz pomysł. – AVB

+0

Bez problemu. Dziękuję za głosowanie. Spójrz na rozwiązanie, które dałem w Twoim poście! –

-3

Można użyć pakietu cite jak

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

Check to link.

+3

Przepraszam, ale pytanie brzmi: jak zbudować polecenie, takie jak sam cytuj. –

Powiązane problemy