2010-01-04 14 views
5

Tôi gặp sự cố sau. Tôi đã xác định một macro, \func như sauLatex - trích xuất chuỗi con/bỏ qua các ký tự

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

bây giờ tôi muốn xác định một vĩ mô

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

Ai đó có thể cho tôi biết làm thế nào để thực hiện \MyFunc?

Đây là những gì nên xảy ra:

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

Tôi chỉ có thể thay đổi mã của \MyFunc. \func sẽ vẫn như cũ.

+0

Chính xác lý do tại sao bạn đang cố thực hiện việc này? –

+1

Tôi có chú thích trong thuật toán được định nghĩa là chú thích {blah blah \ func {algorithm_name} blah blah} Khi tôi tạo ToC, tôi muốn trích xuất chỉ thuật toán_name (cùng với định dạng do \ func và bỏ qua phần còn lại – Jus12

+0

Hãy thử '\ caption [\ func {algorithm_name}] {blah blah \ func {algorithm_name} blah blah} '. –

Trả lời

10

Điều này có thể được thực hiện bằng lập trình LaTeX chuẩn. Một cái gì đó như:

 
\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

Đã kiểm tra và làm việc tại đây. Có nhiều cách khác để có được kết quả, nhưng điều này nên đơn giản nhất. –

+1

cảm ơn !! thats chính xác những gì tôi đang tìm kiếm :) Có tài nguyên nào tốt cho việc học lập trình (La) TeX không? – Jus12

+1

Tôi nên đề cập rằng tôi đã phải thay đổi '\ newcommand' trong mã của bạn thành' \ DeclareRobustCommand', và sau đó mọi thứ hoạt động hoàn hảo! (điều này có liên quan đến tài liệu thực tế của khóa học, chứ không phải ví dụ đồ chơi ở trên) – Jus12