是否有任何技巧可以让{
宏的参数分隔符成为可能?例如,使用以下定义:
\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}