LaTeX:在字符串中使用一些字符

时间:2010-10-14 06:51:36

标签: latex macros arguments

我需要一个从字符串中提取数字对的宏:

  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

1 个答案:

答案 0 :(得分: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可能有效。