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

LaTeX:在字符串中使用一些字符,latex,macros,arguments,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]{

我需要一个宏,该宏从如下字符串中提取数对:

  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}
有什么建议吗?多谢各位


这似乎能让你的测试发挥作用:

\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
,可能会奏效。

非常感谢。这很有道理。非常感谢你。我现在正在学习如何使用LaTeX的编程功能,我玩得很开心,但我所做的只是通过网络上的例子,所以我所能做的只是从它们中推断出一些东西,而不是真正地学习它们。当我收到问题时,我会继续发帖。再一次,谢谢!