我见过一些可以传递parameters
以构建模板的示例,例如\int_step_inline
:您可以写入#1
以表示循环的当前值。我想知道它是如何工作的,并尝试一下。
据我所知TeXbyTopic
,在每次扩展中,#1
都被替换为<parameter token1>
并且##
被替换为#
(这里有一个问题,###
和是如何####
替换的?)。
但我不确定当#1
作为宏的参数传递时会发生什么。似乎#1
只是替换了#n
宏。
我有以下例子。
\def\a#1{\def\b##1{#1}}
如果我有正确的想法。\a{*#1*}
展开为\def\b#1{*#1*}
,则会\b{test}
得到*test*
。 从输出来看,似乎我是对的,但我想知道我是否真的得到了正确的想法,或者有一些我忽略的额外信息。
答案1
这可能不完整:
- 类似于
<parameter text>
in ,后跟数字 1--9 表示参数。以及引发错误的任何其他用#1#2
例。\def\x#1#2{...}
#
#
- 一个特殊情况是
<parameter text>
以 结尾#
。例如,\def\x#1#{...}
。这意味着#1
由 分隔{
。
- 一个特殊情况是
- 在 中
<replacement text>
,#1
被#9
视为对应参数 token 并被##
视为单个#
。 任何其他用例都会#
引发错误。 - 在其他情况下,例如作为宏参数(
\a{#1}
),没有什么特殊情况发生#
。
因此您可以使用\def\a#1{\def\b##1{\def\c####1####{...}}}
。