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$?
Asked
Active
Viewed 4.6e+01k times
211
Ian Thompson
- 43,767
jamaicanworm
- 29,114
3 Answers
261
\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.
egreg
- 1,121,712
-
34Even after more than 10 years of LaTeXing one still learns some new tricks! – yo' Jan 25 '12 at 17:32
-
25
-
@egreg Is there any way to switch the default sizing option, so that
\ceil{x}will do what\ceil*{x}would normally do? – jamaicanworm Apr 21 '12 at 17:38 -
1@jamaicanworm There is, I believe also on this site. But I won't tell you: use
\leftand\rightonly 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 01:36
-
12To 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 07:19
24
Here is a simple xparse implementation of \ceil, similar to that provided by mathtools' \DeclarePairedDelimiter:

\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*[..]{..}.
Werner
- 603,163
-
4You could eliminate the
\IfNoValueTF {\lceil#3\rceil}if you used{s O{} m}. Then the second arg#2will be defined so only need#2\lceil#3#2\rceil. – Peter Grill Jan 25 '12 at 18:29
2
You can define your command with a simple single line as follow:
\newcommand{\ceil}[1]{\lceil {#1} \rceil}
The above command definition tells that your command takes one input [1] and uses that input between the predefined commands \lceil and \rceil via {#1}
Hope it helps.
\lceiland\rceilare the appropriate markups. – Hugh Perkins Aug 21 '17 at 08:15$\lceil x \rceil$was already the solution I was looking for ;) – Christopher K. Aug 29 '19 at 16:24