关于 \newcommand 的语法

关于 \newcommand 的语法

我有以下非常基本的问题。

假设我想用 \newcommand 创建一个快捷方式,将其命名为\newcommand{\Bla}{BLA^{bla}}。现在,如果我在文本中用附加的 来调用它^{...},例如,我写入\Bla^{...}以获取输出BLA^{bla...},则会出现错误。

我知道为什么会出现错误,但我仍然有以下疑问:如何通过继续使用快捷方式来避免此错误?

PS:非常欢迎任何帮助或编辑,因为我几乎找不到如何给我的问题起一个实际的名字(正如标题和标签清楚显示的那样),

答案1

您的任务可以通过使用 TeX 基元以经典方式解决:

\def\Bla{\futurelet\next\Blax}
\def\Blax{\ifx^\next\afterfi{\Blay}\else\afterfi{\Blay^{}}\fi}
\def\Blay^#1{BLA^{bla#1}}
\def\afterfi#1#2\fi{\fi#1}

%test:
$\Bla, \Bla^2$

\Bla宏使用支持宏\Blax\Blay。第二个宏定义宏的主要行为,即在^{bla}或之后打印 BLA ^{bla<text>}。我们假设\Bla在数学模式下使用。将\futurelet\next\Blax下一个标记保存到\next并运行\Blax。如果是,则\Blax运行,而在其他情况下则运行。\Blay\next^\Blay^{}

% suppose \Bla z:
\next is z
\Blay^{} expands to BLA^{bla} followed by z
% suppose \Bla^z:
\next is ^
\Blay^{z} expands to BLA^{blaz}.

答案2

\NewDocumentCommand可以使用所谓的修饰。这些是可选参数,以特定标记开头,如下所示:

\documentclass[]{article}

%\usepackage{xparse} % no longer needed with newer LaTeX versions
\NewDocumentCommand \bla { E{^}{{}} }{Bla^{bla#1}}

\begin{document}
$\bla$ and $\bla^{2}$.
\end{document}

类型参数的语法E乍一看有点奇怪:E{<list of tokens>}{<list of defaults>}。这就是为什么我使用E{^}{{}}^将是标记,并且默认属于^将是空)。使用两个修饰,您可以执行类似 的操作E{^_}{{}{abc}},这将创建两个参数,一个以^默认为空值开始,另一个以_默认为开始abc

相关内容