![具有可变数量参数且在下标中使用的新命令](https://linux22.com/image/281176/%E5%85%B7%E6%9C%89%E5%8F%AF%E5%8F%98%E6%95%B0%E9%87%8F%E5%8F%82%E6%95%B0%E4%B8%94%E5%9C%A8%E4%B8%8B%E6%A0%87%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9A%84%E6%96%B0%E5%91%BD%E4%BB%A4.png)
是否有可能使最后两种情况起作用,而不需要将命令调用括在花括号中?
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\makeatletter
\def\command{\@ifnextchar\bgroup{\commandOne}{\commandNone}}
\def\commandOne#1{{\boldsymbol#1}}
\def\commandNone{{\boldsymbol\alpha}}
\makeatother
\begin{document}
\title{Cases}
\maketitle
\section*{Case 1}
$\command$
\section*{Case 2}
$\command{\beta}$
\section*{Case 3}
$A_{\command}$ % <--- WANTED: $A_\command$
\section*{Case 4}
$A_{\command{\beta}}$ % <--- WANTED: $A_\command{\beta}$
\end{document}
如果我删除花括号,会出现以下错误:
! Missing { inserted.
谢谢你!
问候,伊凡
答案1
\makeatletter
\def\command{\bgroup\@ifnextchar\bgroup{\commandOne}{\commandNone}}
\def\commandOne#1{\boldsymbol{#1}\egroup}
\def\commandNone{\boldsymbol\alpha}\egroup}
\makeatother
但不要这样做,最好将括号明确化,也不要让可选参数采用{
分隔宏。LaTeX 付出了很多努力来尝试为命令提供一致的语法,并且可选参数应该被[]
分隔。
所以
\newcommand\command[1][\alpha]{\boldsymbol{#1}}
和
\command[\beta]