使用 DeclarePairedDelimiter 时出错

使用 DeclarePairedDelimiter 时出错

\norm在将我的命令与我的\LpOmega命令作为可选参数结合使用时遇到错误:

\documentclass{minimal}
\usepackage{mathtools}

\DeclarePairedDelimiter{\Norm}{\lVert}{\rVert}
\newcommand*{\norm}[2][{}]{\Norm*{#2}_{#1}}

\newcommand*{\Lp}[2]{L^{#2}(#1)}
\newcommand*{\LpOmega}[2][{}]{L^{#2}(\Omega_{#1})}

\begin{document}
    \[\norm[\LpOmega[1]{2}]{\sum_{i=1}^nu_i}\]
    \[\norm[{\LpOmega[1]{2}}]{\sum_{i=1}^nu_i}\]
    \[\norm[\Lp{\Omega_1}{2}]{\sum_{i=1}^nu_i}\]
\end{document}

文档中的第一行代码导致错误Argument of \\LpOmega has an extra }.,而第二行和第三行产生预期结果。所以它与可选参数有关[1]\LpOmega有人可以向我解释这个错误并向我展示一种修复它的方法,而不必每次都多加一对括号?我更愿意继续使用构造,\LpOmega[]{}因为它对我来说非常方便。

附加问题:通过或定义\LpOmega和的可选参数是否有区别,或者它们是否等效?\norm[{}][]

答案1

括号不成对,因此\norm[\LpOmega[1]{2}]第一个右括号完成可选参数,并且 LaTeX 将其\LpOmega[1作为可选参数获取,这会导致错误。

您可以使用 \NewDocumentCommand 定义命令。它将正确配对括号。我更改了类,因为 minimal.cls 不适合真实示例,它太简单了。

\documentclass{article}
\usepackage{mathtools}

\DeclarePairedDelimiter{\Norm}{\lVert}{\rVert}
\NewDocumentCommand{\norm}{O{}m}{\Norm*{#2}_{#1}}

\newcommand*{\Lp}[2]{L^{#2}(#1)}
\newcommand*{\LpOmega}[2][]{L^{#2}(\Omega_{#1})}

\begin{document}
    \[\norm[\LpOmega[1]{2}]{\sum_{i=1}^nu_i}\]
    \[\norm[{\LpOmega[1]{2}}]{\sum_{i=1}^nu_i}\]
    \[\norm[\Lp{\Omega_1}{2}]{\sum_{i=1}^nu_i}\]
\end{document}

相关内容