2010-03-08 42 views
14

Tôi cố gắng để xây dựng một lệnh tương tự như LaTeX \cite{}, mà chấp nhận một danh sách bằng dấu phẩy của các thông số như thế nàythông số bằng dấu phẩy tách trong LaTeX

\cite{Wall91, Schwartz93}

Tôi muốn vượt qua mỗi trong danh sách được phân tách bằng dấu phẩy mà tham số đại diện cho một lệnh khác và trả về kết nối của các kết quả riêng lẻ. Tôi tưởng tượng nó giống như thế này:

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

Văn học về thao tác chuỗi, biến và lặp trong LaTeX sẽ tuyệt vời!

Ngoài ra: Có cách nào để tham gia kết quả riêng lẻ bằng lại dấu phẩy không?

Cảm ơn!

Trả lời

17

Sử dụng liên kết Roberto của tôi đến giải pháp này: ví dụ

\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 

Cách sử dụng:

% 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

Và cách sử dụng tính năng này? Bạn có thể đưa ra một ví dụ? – AVB

+0

Cảm ơn ví dụ! 1 cho câu hỏi và trả lời cả hai. Bạn có nhớ nhìn vào đây không: http://stackoverflow.com/questions/2389081/ Có thể bạn sẽ có một ý tưởng. – AVB

+0

Không sao cả. Cảm ơn bạn đã bỏ phiếu. Hãy xem giải pháp tôi đã đưa ra trong bài đăng của bạn! –

-3

Bạn có thể sử dụng gói cite như

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

Kiểm tra link này.

+3

Xin lỗi, nhưng câu hỏi là làm thế nào để xây dựng một lệnh như trích dẫn chính mình. –

Các vấn đề liên quan