320

What is the "best LaTeX practices" for writing absolute value symbols? Are there any packages which provide good methods?

Some options include |x| and \mid x \mid, but I'm not sure which is best...

8
  • 60
    \usepackage{amsmath}...\(\lvert x\rvert\); \mid denotes a relation symbol and is wrong for the absolute value.
    – egreg
    Jan 31, 2012 at 23:45
  • 2
    Should I do $\usepackage{mathtools}...\DeclarePairedDelimiter{\vert}{\lvert}{\rvert} as per your answer to a previous question? tex.stackexchange.com/a/42274/9757 Jan 31, 2012 at 23:47
  • 3
    It's a good possibility. It depends on how many absolute values you have in your document; for a couple I wouldn't bother. But \vert is not a good choice, as it's already defined.
    – egreg
    Jan 31, 2012 at 23:50
  • 4
    Thanks! Why do people not just use the keyboard | symbol? Feb 1, 2012 at 0:16
  • 29
    You can actually use |, but in some situations a certain care is needed. For instance \(|{-1}|=1\) without the braces would come out wrong, while \(\lvert-1\rvert=1\) surely gives correct output.
    – egreg
    Feb 1, 2012 at 0:22

9 Answers 9

246

I have been using the code below using \DeclarePairedDelimiter from the mathtools package.

Since I don't think I have a case where I don't want this to scale based on the parameter, I make use of Swap definition of starred and non-starred command so that the normal use will automatically scale, and the starred version won't:

enter image description here

If you want it the other way around comment out the code between \makeatother...\makeatletter.

\documentclass{article}
\usepackage{mathtools}

\DeclarePairedDelimiter\abs{\lvert}{\rvert}%
\DeclarePairedDelimiter\norm{\lVert}{\rVert}%

% Swap the definition of \abs* and \norm*, so that \abs
% and \norm resizes the size of the brackets, and the 
% starred version does not.
\makeatletter
\let\oldabs\abs
\def\abs{\@ifstar{\oldabs}{\oldabs*}}
%
\let\oldnorm\norm
\def\norm{\@ifstar{\oldnorm}{\oldnorm*}}
\makeatother

\newcommand*{\Value}{\frac{1}{2}x^2}%
\begin{document}
    \[\abs{\Value}  \quad \norm{\Value}  \qquad\text{non-starred}  \]
    \[\abs*{\Value} \quad \norm*{\Value} \qquad\text{starred}\qquad\]
\end{document}
10
  • 6
    @egreg: Agreed. But I have not encountered that with \abs yet. BTW, I like your "always is generally wrong" :-) Jan 31, 2012 at 23:57
  • 3
    @jamaicanworm: I used \dfrac in this case to make a larger fraction in inline mode. This is not normally recommended in inline mode as it breaks paragraph spacing. I will update the solution to remove that. Feb 1, 2012 at 0:16
  • 5
    There's a reason why it's preferable to use the *-version for the automatic resizing macro: always using \left and \right is wrong, in general.
    – egreg
    Oct 15, 2012 at 17:24
  • 5
    +1, even though I have to say that this answer is not very skim-reading friendly with the huge "starred"/"non-starred" picture and the remark somewhere in the text "BTW, normal behaviour is the other way around". The question OTOH is one that makes everything in this thread very prone to being skim-read.
    – Christian
    Feb 27, 2013 at 18:10
  • 6
    a definite advantage of using commands like \abs and \norm which no one seems to have mentioned: since the | symbol has special meaning in the makeidx context, trying to enter terminology using a bare | within \index{...} will result in (delayed) errors and a lot of hair pulling for someone not really familiar with that usage. commands like the ones shown here (or even just bare \vert, \Vert or \mid) is a lot safer and worth becoming familiar with. Aug 19, 2017 at 3:14
107

Note if you just use | you get mathord spacing, which is different from the spacing you'd get from paired mathopen/mathclose delimiters or from \left/\right even if \left/\right doesn't stretch the symbol. Personally I prefer the left/right spacing from mathinner here (even if @egreg says I'm generally wrong:-)

\documentclass{amsart}

\begin{document}

$  \log|x||y|b $

$  \log\left|x\right|\left|y\right|b $

$  \log\mathopen|x\mathclose|\mathopen|y\mathclose|b $

\end{document}

enter image description here

88

One can also use commath package.

\documentclass{article}

\usepackage{commath}

\begin{document}
\[ \norm{a \vec{u}} = \abs{a} \, \norm{\vec{v}} \]
\end{document}

enter image description here

3
56

The physics LaTeX package also implements abs and norm:

\documentclass{article}

\usepackage{physics}

\begin{document}
    \[ c = \abs{-c} \]
    \[ \vu{a} = \frac{\vb{a}}{\norm{\vb{a}}} \]
\end{document}

enter image description here

1
  • 1
    I think this is the easiest solution!
    – Tropilio
    Feb 27, 2018 at 11:23
32

A simple, LaTeX native way of doing this is by using the \| delimiter, with the standard \left and \right modifiers (source).

For example:

\left\| \sum_{i=1}^{n} x^2 \right\|

gives

enter image description here

4
  • 9
    Also: using the | delimiter (without the preceding backslash) inserts a single vertical bar.
    – pietrodn
    Aug 11, 2017 at 12:06
  • 5
    For fun try \|+a\|, as you can see this is wrong, and thus generally users should not just use |...| or \|...\| as they may accidentally come into situations where this is wrong. I'll leave it as an exercise why this happens. Plus in your example the fences does not need to be that tall.
    – daleif
    Aug 11, 2017 at 12:11
  • 1
    With \|+a\| the spacing appears to be wrong, but with \left\|+a\right\| it appears to be fine.
    – pietrodn
    Aug 11, 2017 at 12:19
  • 5
    Correct because one is left and the other is right. But \left and \right should only be added when actually needed (which is actually not often). My complain to your answer is that it is not good in general, for reasons that are explained in comments to other answers in this thread.
    – daleif
    Aug 11, 2017 at 12:22
9
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
  %begin equation
\lVert w \rVert
%end equation
\]
\end{document}  

enter image description here

3

For LyX users: maybe I have just overlooked how to do it correctly, but I couldn't find a way of doing this natively.

I thus used a 1x1-Matrix environment and set the kind to determinant. It might just be a hack, but it works fine in my usecase.

1
  • At least in the case of Lyx 2.1.4, I find that I can simply type \lvert and \rvert into my display formula and Lyx "does the right thing." In my specific case I want absolute value bars around a fraction, so I used \bigg\lvert on the one side and \bigg\rvert on the other side.
    – Greg Hill
    Apr 17, 2019 at 3:48
1

If you don't want to use any package, use \mid.

1
  • 6
    \vert doesn't require any package either, and the spacing isn't as awful as with \mid. Feb 27, 2020 at 23:26
0
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{esvect,commath}
\author{Nguyễn Văn Minh Hiếu}
\begin{document}
$\overrightarrow{AB}$\\
$\abs{\vv{AB}}$\\
$\abs[1]{\vv{a}}+\abs[1]{\vv{b}}=\abs[1]{\vv{c}}$\\
\end{document}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .