【问题标题】:LaTeX: Use some characters in a stringLaTeX:在字符串中使用一些字符
【发布时间】:2010-10-14 06:51:35
【问题描述】:

我需要一个宏,它可以从如下所示的字符串中提取成对的数字:

  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

【问题讨论】:

    标签: latex macros arguments


    【解决方案1】:

    这似乎让你的测试工作:

    \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 的编程功能,我玩得很开心,但我所做的只是通过网络上的示例进行操作,所以我所能做的只是从中推断出东西,而不是真正学习它们。我会在收到问题后继续发布问题。再次感谢!
    猜你喜欢
    • 2020-12-31
    • 2012-04-19
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多