我试图写入 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}