2010-10-14 2 views
0

мне нужен макрос, который извлекает пары числа из строки, выглядит следующим образом:LaTeX: Используйте некоторые символы в строке

n1-m1,n2-m2,n3-m3,n4-m4 (it could be longer) 

где n1, m1, n2, m2, ... число от 0 - 15. Как я могу получить пар (n1, m1) и (n2, m2), (n3, m3) и т. Д. Внутри моего макроса? Мне нужно будет использовать каждую пару один раз, после чего я могу, при необходимости, игнорировать пару.

Предполагая, что каждую цифру представляет собой 2-значный номер (не элегантная вещь, чтобы сделать), и разделку код я нашел Debilski в этом форуме, мне удалось получить первую пару, выполнив следующие действия:

\documentclass[11pt]{article} 
\def\macroGetPairs #1{\getPairs#1.\wholeString} 
\def\getPairs#1#2-#3#4,#5\wholeString { 
\if#1.% 
\else 
    % Test if pair was successfully extracted 
    Got pair (#1#2,#3#4). Still left: #5\\ 

    % Begin recursion 
    %\takeTheRest#5\ofTheString 
\fi} 


\def\takeTheRest#1\ofTheString\fi 
{\fi \getPairs#1\wholeString} 


\begin{document} 
\macroGetPairs{10-43,40-51,60-73,83-97} 
\end{document} 

Однако я не уверен, как заставить рекурсию работать для меня, чтобы получить остальные пары. Я думал, что просто раскопки линии

%\takeTheRest#5\ofTheString 

должен сделать это, но это не сработает. Обратите внимание, что тестовый вызов макроса:

\macroGetPairs{10-43,40-51,60-73,83-97} 

Любые предложения? Большое спасибо,

ERM

ответ

0

Это, кажется, чтобы получить тест на работу:

\documentclass{article} 

\def\macroGetPairs#1{\getPairs#1,.\wholeString} 
\def\getPairs#1#2-#3#4,#5\wholeString {% 
    Got pair (#1#2,#3#4).\\ 
\if#5.\else% 
    \getPairs#5\wholeString 
\fi} 

\begin{document} 
\noindent\macroGetPairs{10-43,40-51,60-73,83-97} 
\end{document} 

Ваш код был в основном работает, но не было никакого способа для \getPairs, чтобы соответствовать его вклад в окончательный расширение (\getPairs 83-97). Тест на конец рекурсии (\if#1.) также тестировал #1, а не #5, что я и сделал здесь. Возможно, если бы был другой способ форматирования аргумента \getPairs, который бы сработал.

+0

спасибо. Это имеет большой смысл. Большое спасибо. Я только сейчас изучаю, как играть с возможностями программирования LaTeX, и я получаю удовольствие, но все, что я делаю, идет по примерам в Интернете, так что действительно все, что я могу сделать, это вывести из них вещи, а не изучать их. Я буду продолжать публиковать вопросы по мере их получения. Еще раз спасибо! – ERM