我将如何编写宏\firstArgument
以及\macroName
它将执行以下操作:
\firstArgument{\bf{a}} reduces to a
\macroName{\bf{a}} reduces to bf
我知道这种方法\def\dismantle#1{{\let\Large\@firstofone #1}}
,但它对我来说不是一个解决方案,因为它只适用于\bf
我正在寻找对所有宏都执行此操作的宏。
更新:在整个讨论过程中,情况变得清晰起来,“firstArgument”仅应暗示此处所指的结构。同样,它\bf
仅用作任意示例。这一点很重要,因为当宏的定义尚不清楚时,TeX 没有参数的概念,而该概念可能依赖于该定义。
答案1
答案2
与 TeX 一样,它们与定义和扩展宏的概念密切相关,让我们完全避免使用术语“参数”和“参数”,而是使用第 24 章:TeXbook 垂直模式摘要中引入的用于定义 TeX 的“词性”的 Backus/Naur 符号的修改形式:
如果将其应用于 token 模式
⟨控制序列⟩⟨左括号⟩⟨平衡文本⟩⟨右括号⟩
- ⟨控制序列⟩既不是
\outer
标记,也不是活动字符,也不是可通过\csname\endcsname
或通过类别代码为 0(转义)的单个字符(即反斜杠)构造的“无名控制序列标记”,位于输入行未注释的末尾,而\endlinechar
的值不是正数 - ⟨平衡文本⟩不包含根据以下定义的标记
\outer
仅,而\escapechar
-parameter 具有其通常值 92(十进制):
\documentclass{article}
\makeatletter
\newcommand\firstArgument[1]{\@secondoftwo#1}%
\newcommand\macroName[1]{\expandafter\expandafter\expandafter\@gobble\expandafter\string\@firstoftwo#1}%
\makeatother
\begin{document}
\ttfamily\selectfont
\firstArgument{\textbf{a}}
\macroName{\textbf{a}}
\end{document}