我可以使用花括号作为宏参数分隔符吗?

我可以使用花括号作为宏参数分隔符吗?

是否有任何技巧可以让{宏的参数分隔符成为可能?例如,使用以下定义:

\def\start#1\fin{+++#1+++}

电话

\start coucou\fin{3}4

将显示

++++库库+++34

因为\fin是宏参数的正确分隔符\start。现在,我希望整个\fin{3}作为分隔符。这样与上面相同的调用现在将输出:

++++凑凑+++4

问题是如何在分隔符中包含花括号。

編輯1我特别希望以下调用

\start coucou\fin{2}blabla\fin{3} 

输出

coucou\fin{2}blabla

但就大卫的评论而言,这似乎是不可能的。

答案1

如果的参数\fin是简单的数字,您可以检查参数是否为3;这是一个纯 TeX 版本(将标准的东西放入 LaTeX 中)。

\def\start{+++\startaux}
\def\startaux#1\fin#2{%
  #1%
  \ifnum#2=3
    +++%
  \else
    \fin{#2}%
    \expandafter\startaux
  \fi
}
\def\fin#1{-#1-}

\start cocou\fin{3}

\start cocou\fin{2}blabla\fin{3}

\bye

在此处输入图片描述

答案2

不,您可以拥有\lbrace一个在某些情况下起作用的命令标记{,并且可以拥有不同 catcode 的字符标记,{例如 12(其他),但标记列表(无论如何构造)不能具有不匹配的 catcode 1 或 2 的标记。


所以你能做的最好的事情是:

\def\start#1\fin#2{%
\ifnum3=#2 +++#1+++\fi}

答案3

这给出了您想要的输出。但我不确定它是否能解决导致您提出这个问题的问题。

\documentclass{article}
\def\start#1\fin{+++#1+++\fin}
\def\fin#1{}
\begin{document}
\start fish\fin{3}4
\end{document}

相关内容