2010-10-14 9 views
0

je besoin d'une macro qui extrait des paires de nombre d'une chaîne qui ressemble à ceci:LATEX: Utilisez des caractères dans une chaîne

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

n1, m1, n2, m2, ... sont des nombres de 0 - 15. Comment puis-je obtenir les paires (n1, m1) et (n2, m2), (n3, m3), etc. dans ma macro? J'aurai besoin d'utiliser chaque paire une fois, après quoi je peux, si nécessaire, ne pas tenir compte de la paire.

En supposant que chaque chiffre est un nombre à 2 chiffres (pas une chose élégante de le faire), et le dépeçage d'un code que je trouve par Debilski dans ce forum, j'ai réussi à obtenir la première paire procédant comme suit:

\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} 

Cependant, je ne sais pas comment obtenir la récursivité qui fonctionne pour moi pour obtenir le reste des paires. Je pensais que simplement décommentant la ligne

%\takeTheRest#5\ofTheString 

devrait le faire, mais cela ne fonctionne pas. Notez que l'appel de test de la macro est:

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

Des suggestions? Merci beaucoup,

ERM

Répondre

0

Cela semble obtenir votre test au travail:

\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} 

Votre code était essentiellement de travail, mais il n'y avait aucun moyen pour \getPairs pour correspondre à son entrée sur la finale expansion (\getPairs 83-97). Votre test de fin de récursivité (\if#1.) testait également #1 plutôt que #5, ce que j'ai fait ici. Peut-être que s'il y avait une manière différente de formater l'argument à \getPairs cela aurait fonctionné.

+0

Merci beaucoup. Cela a du sens. Merci beaucoup. Je suis en train d'apprendre à jouer avec les capacités de programmation de LaTeX et je m'amuse, mais tout ce que je fais est d'utiliser des exemples sur le web, donc tout ce que je peux faire est d'inférer des choses, pas vraiment les apprendre. Je continuerai à poster des questions à mesure que je les aurai. Encore une fois, merci! – ERM

Questions connexes