我可以定义一个宏来接受下一个空格之前的所有内容吗?

我可以定义一个宏来接受下一个空格之前的所有内容吗?

我想制作一个快捷宏,在公式中为函数名称添加前缀,以便根据函数类型以某种方式修饰它们。使用“普通”宏会导致括号过多,我正在寻找更简洁的宏。

我试图定义一个宏,它将截断所有内容直到下一个空格(或者,如果可能的话,直到下一个非字母标记),并将其视为参数。这可能吗?

示例(不要关注宏观主体):

\def\f <what goes here?> {\mathop{\mathrm{#1}}}
\def\kw <what goes here?> {\mathop{\color{red} #1}} 
...
Consider the following:
\[
   \kw return \f isBool x \kw or \f isString x
\]

相当于:

Consider the following:
\[
   \mathop{\color{red} return} 
   \mathop{\mathrm{isBool}} x 
   \mathop{\color{red} or}
   \mathop{\mathrm{isString}} x
\]

并且,如果可能的话,这样的宏应该能够理解它是否接收带括号的参数,因此无论是否有空格都\kw{return}可以将return其作为参数,以便对于那些不知道其特殊行为的人来说它可以像普通宏一样使用。

欢迎任何 TeX/LaTeX 解决方案......

答案1

是的: 。请注意和\def\mymacro#1 {your definition}之间的空格。#1{

答案2

你可以使用如下方法抓取到下一个字母之前的所有内容

\long\def\use#1{#1}
\def\grab{\futurelet\nexttoken\grabauxI}
\def\grabauxI{%
  \ifx\nexttoken\sptoken
    \expandafter\grabspace
  \else
    \ifx\nexttoken\bgroup
      \expandafter\expandafter\expandafter\grabgroup
    \else
      \expandafter\expandafter\expandafter\grabstd
    \fi
  \fi
}
\use{\let\sptoken= } %
\expandafter\def\expandafter\grabspace\space{%
  \expandafter\expandafter\expandafter\def
  \expandafter\expandafter\expandafter\grabbed
  \expandafter\expandafter\expandafter{\expandafter\grabbed\space}%
  \grab
}
\long\def\grabgroup#1{%
  \expandafter\def\expandafter\grabbed\expandafter{\grabbed{#1}}%
  \grab
}
\long\def\grabstd#1{%
  \ifcat\noexpand#1a%
    \expandafter\grabend\expandafter#1%
  \else
    \expandafter\def\expandafter\grabbed\expandafter{\grabbed#1}%
    \expandafter\grab
  \fi
}
\long\def\grabend#1{%
  \expandafter\kwaux\expandafter{\grabbed}%
  #1%
}
\def\kw{%
  \def\grabbed{}%
  \grab
}
\long\def\kwaux#1{\showtokens{#1}}

(我在这里只是使用了\showtokens“有效载荷”作为演示)。我不太确定这是否是你想要的,因为这样\kw return什么也抓不住!其他答案已经处理了如何抓取空间。

请注意,上述内容可以概括为,抓取器部分不需要“内置”有效载荷(分离出\kw抓取器),因此它可以应用于几个不同的接口命令。

答案3

使用 作为参数的分隔符\def\foo#1 #2 {...}

这对于来说并不容易(甚至不可能?)\newcommand

如果应该保留一个,即Second Third,则必须将其与一对分组{...},即先定界。

\documentclass{article}

\def\foo#1 #2 {Specified parameters:

1: \textbf{#1}%

2: \textbf{#2}%

}


\begin{document}
\foo First Second Third

\foo First {Second Third} Fourth

\end{document}

在此处输入图片描述

相关内容