153

Is there a convenient way to typeset the floor or ceiling of a number, without needing to separately code the left and right parts? For example, is there some way to do $\ceil{x}$ instead of $\lceil x \rceil$?

  • 4
    In case anyone else got here looking for mathjax notation, in mathjax, \lceil and \rceil are the appropriate markups. – Hugh Perkins Aug 21 '17 at 8:15
  • 2
    For me, $\lceil x \rceil$ was already the solution I was looking for ;) – Christopher K. Aug 29 at 16:24
195
\usepackage{mathtools}
\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}

The command \ceil will do; if called as \ceil*{x} it will add \left and \right; you can also call it as

\ceil[\big]{x} \ceil[\Big]{x} \ceil[\bigg]{x} \ceil[\Bigg]{x}

to state explicitly the size of the delimiters.

  • 22
    Even after more than 10 years of LaTeXing one still learns some new tricks! – yo' Jan 25 '12 at 17:32
  • 13
    Don't tell me! I learn new tricks even after 25 years! – egreg Jan 25 '12 at 17:34
  • 1
    @jamaicanworm There is, I believe also on this site. But I won't tell you: use \left and \right only when they are really needed. – egreg Apr 21 '12 at 17:50
  • 2
    @jamaicanworm Swap definition of starred and non-starred command discusses switching the starred with non-starred version. – Qrrbrbirlbel Nov 11 '12 at 1:36
  • 7
    To typeset the floor function, just replace "ceil" with "floor". This may be obvious, but it might save you the trouble of consulting documentation. – void-pointer Sep 30 '13 at 7:19
18

Here is a simple xparse implementation of \ceil, similar to that provided by mathtools' \DeclarePairedDelimiter:

xparse implementation of \ceil

\documentclass{article}
\usepackage{xparse}% http://ctan.org/pkg/xparse
\NewDocumentCommand{\ceil}{s O{} m}{%
  \IfBooleanTF{#1} % starred
    {\left\lceil#3\right\rceil} % \ceil*[..]{..}
    {#2\lceil#3#2\rceil} % \ceil[..]{..}
}
\begin{document}
\[\ceil[\big]{x} \quad \ceil[\Big]{x} \quad \ceil[\bigg]{x} \quad \ceil[\Bigg]{x} \quad \ceil*[\big]{\frac{1}{2}}\]
\end{document}

The optional argument is ignored in the starred version of \ceil*[..]{..}.

  • 4
    You could eliminate the \IfNoValueTF {\lceil#3\rceil} if you used {s O{} m}. Then the second arg #2 will be defined so only need #2\lceil#3#2\rceil. – Peter Grill Jan 25 '12 at 18:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.