如何使用可选参数嵌套命令?

如何使用可选参数嵌套命令?

我在制作可以嵌套的规范化器命令时遇到了问题。这是我目前的代码:

\documentclass{article}
\newcommand{\nrml}[2][]{N_{#1}(#2)}

\begin{document}
$\nrml[\nrml{H}]{J}$
\end{document}

它工作正常,但是当我尝试时,$\nrml[\nrml[G]{H}]{J}$我收到一堆错误代码,第一个是“ \nrml 的参数有一个额外的 }。”我该如何解决这个问题?

编辑:最初发布的代码不正确,已修复。

编辑2:它看起来像是$\nrml[{\nrml[G]{H}}]{J}$我想做的事情,但我需要用大括号将已经用方括号表示的参数括起来,这似乎很荒谬,而这是我想避免的事情。

答案1

如果您使用 定义命令xparse,问题就会自动得到解决;请注意,只有在实际指定的情况下,您也可以轻松插入下标。

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\nrml}{om}{%
  N\IfValueT{#1}{_{#1}}(#2)%
}

\begin{document}

$\nrml[\nrml{H}]{J}$

$\nrml[\nrml[K]{H}]{J}$

\end{document}

在此处输入图片描述

答案2

将外部可选参数括在括号中。问题在于 LaTeX 处理可选参数的方式(请参阅Bug?LaTeX 错误解析嵌套的可选参数)。

\documentclass{article}
\newcommand{\nrml}[2][]{N_{#1}(#2)}

\begin{document}
$\nrml[\nrml{H}]{J}$

$\nrml[{\nrml[G]{H}}]{J}$
\end{document}

在此处输入图片描述

相关内容