我正在尝试找到向量范数的正确定义。我之前使用过这个宏:
\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参数的高度和深度之间存在不对称时),结果看起来有点丑陋。
我在一个法国论坛上发现了这个新定义:
\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}
我可以添加什么来恢复分隔符的正确行为?
谢谢你的帮助。
[编辑] 我认为我需要在宏定义的某个地方放置“\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}