自定义命令来表示 $L_1$ 度量距离,在数学模式内外均可使用

自定义命令来表示 $L_1$ 度量距离,在数学模式内外均可使用

我试图写入 define ,\ds(a,b)以便得到$||a - b||_1$。这也应该在数学环境中起作用,例如作为不等式语句的一部分,但我应该能够在文本主体中使用它,而\ds(a,b)无需将其括在 $$ 中。

到目前为止,我已经解决了这个问题,并浏览了 Tex.SE 中其他类似的问题:

\def\ds#1{\innerds(#1)}
\def\innerds(#1,#2) {\ensuremath{||#1 - #2||_1}\xspace}

这在一定程度上有效 - 我可以将其\ds(a,b)作为文本的一部分来写,但由于某种原因,当我在数学模式中使用它时出现以下错误:

Runaway argument?
c||_1\xspace \] \end {document} 
! File ended while scanning use of \innerds.
<inserted text> 
                \par 
<*> mwe_macro.tex

! Emergency stop.
<*> mwe_macro.tex

!  ==> Fatal error occurred, no output PDF file produced!

MWE(我已经尝试过)如下:

\usepackage[fleqn]{amsmath}
\usepackage{amssymb}
\usepackage{xspace}

\def\ds#1{\innerds(#1)}
\def\innerds(#1,#2) {\ensuremath{||#1 - #2||_1}\xspace}

\begin{document}
Outside math mode: \ds(a,b)
Inside math mode: $\ds(a,b)$
Inside displaymath:
\[ \ds(a,b) + \ds(b,c) \geq \ds(a,c) \]
\end{document}

编辑:结合下面的两个答案和评论,这就是我所采用的,它非常适合我的目的:

  \def\ds(#1,#2){\innerds{#1}{#2}}
  \def\innerds#1#2{\ensuremath{\lVert #1 - #2\rVert}}

(请注意,我删除了下标 1 - 当我定义正在使用的距离概念时只需要它一次,因此我将其移出宏)。

答案1

目前,当您使用\ds(a,b)宏时\ds,只需将(其作为参数即可。您需要类似的东西。

\def\ds(#1,#2){\innerds{#1}{#2}}
\def\innerds#1#2{\ensuremath{||#1 - #2||_1}\xspace}

答案2

的定义\ds是错误的。如果你想要一个像

\ds(a,b)

那么你应该这样做

\def\ds(#1,#2){\ensuremath{\|#1-#2\|_1}}

(注意\|而不是||)。不需要\xspace,因为 之后的空格不会被忽略)

不过,我不明白为什么使用\ensuremath它们。我发现如果数学总是视为数学。打字没什么好处

The distance \ds(a,b) is less than $1$

代替

The distance $\ds(a,b)$ is less than $1$

所以我更愿意

\def\ds(#1,#2){\|#1-#2\|_1}

amsmath可以改进它

\def\ds(#1,#2){\lVert #1-#2\rVert_1}

相关内容