\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}