向量范数以下的空间过多

向量范数以下的空间过多

我正在尝试找到向量范数的正确定义。我之前使用过这个宏:

\newcommand{\norme}[2][]{\ensuremath{\left\lVert #2 \right\rVert_{#1}}}

(可选参数用于指定一些特殊规范)。

但有时它会产生不好的结果。看看这个:

\documentclass{article}
\usepackage{amsmath}
\usepackage{esvect}

\newcommand{\norme}[2][]{\ensuremath{\left\lVert #2 \right\rVert_{#1}}}

\begin{document}
\begin{equation*}
    \norme[p]{u}^2, \norme[p]{\vv{u}}^2, \norme[p]{AB}^2, \norme[p]{\vv{AB}}^2.
\end{equation*}
\end{document}

问题是,当向量上方有一个箭头时(即,当norme参数的高度和深度之间存在不对称时),结果看起来有点丑陋。

规范,版本 1

我在一个法国论坛上发现了这个新定义:

\newcommand\norme[2][]{%
  \begingroup\setbox0 \hbox{\ensuremath{#2}}%
  \edef\drule{\vrule height\the\dimexpr\ht0+.25ex\relax
    depth\the\dimexpr\dp0+.25ex\relax width.6pt }% 
  \quitvmode
  \hbox{\drule\kern.16667em\drule\kern.16667em \box0
    \kern.16667em\drule\kern.16667em\drule}\endgroup_{#1} 
}

现在的问题是,垂直条似乎不像分隔符那样起作用,因此正方形和标准右侧的 p 看起来有点太接近了:

\documentclass{article}
\usepackage{amsmath}
\usepackage{esvect}

\newcommand\norme[2][]{%
  \begingroup\setbox0 \hbox{\ensuremath{#2}}%
  \edef\drule{\vrule height\the\dimexpr\ht0+.25ex\relax
    depth\the\dimexpr\dp0+.25ex\relax width.6pt }% 
  \quitvmode
  \hbox{\drule\kern.16667em\drule\kern.16667em \box0
    \kern.16667em\drule\kern.16667em\drule}\endgroup_{#1} 
}

\begin{document}

\begin{equation*}
  \norme[p]{u}^2, \norme[p]{\vv{u}}^2, \norme[p]{AB}^2, \norme[p]{\vv{AB}}^2.
\end{equation*}

\end{document}

规范,版本 2

我可以添加什么来恢复分隔符的正确行为?

谢谢你的帮助。

[编辑] 我认为我需要在宏定义的某个地方放置“\mathopen”和“\mathclose”,但我不知道在哪里......

答案1

也许您可以用来\adjustbox手动设置高度和垂直偏移。

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\usepackage{esvect}
\usepackage{adjustbox}

\newcommand{\norme}[2][]{\ensuremath{\left\lVert #2 \right\rVert_{#1}}}

\begin{document}
\begin{equation*}
    \norme[p]{u}^2, 
    \norme[p]{\vv{u}}^2, 
    \norme[p]{AB}^2, 
    \norme[p]{\adjustbox{raise=-0.5ex, set height=2.0ex}{$\vv{AB}$}}^2.
\end{equation*}
\end{document}

答案2

使用commath包:

\documentclass[12pt]{article}

\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{esvect}

\usepackage{commath}

\begin{document}
\[\enVert[0]{u}^{2}_{p}, \enVert[0]{\vv{u}}^{2}_{p}, \enVert[0]{AB}^{2}_{p}, \enVert[0]{\vv{AB}}^{2}_{p}  \]
\[\enVert[1]{u}^{2}_{p}, \enVert[1]{\vv{u}}^{2}_{p}, \enVert[1]{AB}^{2}_{p}, \enVert[1]{\vv{AB}}^{2}_{p}  \] 
\end{document}

在此处输入图片描述

答案3

您可以使用\DeclarePairedDelimiterXPP数学工具来定义 norme。它定义一个星号版本,相当于\left … \right分隔符前面隐含的一对 ,或者在 中使用可选参数\big, \Big, \bigg, \Bigg,相当于一对\bigl … \bigr, &c。

\documentclass{article}
\usepackage{mathtools}
\usepackage{esvect}

\DeclarePairedDelimiterXPP\norme[1]{}\lVert\rVert{_p}{#1}

\begin{document}


\begin{equation*}
  \norme*{u}^2, \norme*{\vv{u}}^2, \norme*{AB}^2, \norme*{\vv{AB}}^2.
\end{equation*}

\begin{equation*}
  \norme*{u}^2, \norme*{\vv{u}}^2, \norme*{AB}^2, \norme[\big]{\vv{AB}}^2.
\end{equation*}

\end{document} 

在此处输入图片描述

相关内容