# How can I set the space between elements of a set?

I want to list all elements of a set. I tried

\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\left \{0, 1, 2, 3, 4, 5, 6\right \}$

$\left \{0,\, 1, \,2, \, 3, \,4, \,5, \,6\right \}$
\end{document}


Is there anyway that I do better?

-
What is wrong with $\{ 0, 1, 2, 3, 4, 5, 6 \}$? – Gonzalo Medina May 19 '14 at 3:35

The simplest trick by me.

\documentclass[border=12pt,12pt]{standalone}
\usepackage{pgffor}
\def\set[#1,#2]{$\{#1\foreach \x in {#2}{,\,\x}\}$}

\begin{document}
\set[1,2,3] and \set[1,] and an empty set \set[,]
\end{document}


## Version 2

Removing $ to let you use other math environment. \documentclass[preview,border=12pt,12pt,varwidth]{standalone} \usepackage{amsmath} \usepackage{pgffor} \def\set[#1,#2]{\{#1\foreach \x in {#2}{,\,\x}\}} \begin{document} $\set[1,2,3]$ and$\set[1,]$and an empty set$\set[,]\$
\end{document}


-
@ Money Oriented Progra How can I put this code $\set[1,2,3,\ldots, 100]$ in mathmode? – minthao_2011 May 19 '14 at 4:15
Money Oriented Progra Thank you very much. – minthao_2011 May 19 '14 at 4:35

A “classical” definition, where the comma is math active and defined to give a comma followed by a thin space.

\documentclass{article}
\usepackage{mathtools}

\DeclarePairedDelimiterX{\listset}[1]{\lbrace}{\rbrace}{%
\begingroup
\begingroup\lccode~=, \lowercase{\endgroup
\def~}{\mathchar\commacode\,}%
\mathcode,=\string"8000
#1
\endgroup
}
\AtBeginDocument{\edef\commacode{\the\mathcode,}}

\begin{document}

$\listset{0, 1, 2, 3, 4, 5, 6}$

$\{0,\, 1, \,2, \, 3, \,4, \,5, \,6\}$

$\listset[\big]{0, 1, 2, 3, 4, 5, 6}$

\end{document}


Look in the documentation of mathtools what optional is accepted to a declared paired delimiter.

The same without activating the comma, but using expl3:

\documentclass{article}
\usepackage{mathtools,xparse}

\DeclarePairedDelimiterX{\listset}[1]{\lbrace}{\rbrace}{\listsetaux{#1}}

\ExplSyntaxOn
\NewDocumentCommand{\listsetaux}{m}
{
\seq_set_split:Nnn \l_minthao_listset_seq { , } { #1 }
\seq_use:Nn \l_minthao_listset_seq { ,\, }
}
\seq_new:N \l_minthao_listset_seq
\ExplSyntaxOff

\begin{document}

$\listset{0, 1, 2, 3, 4, 5, 6}$

$\{0,\, 1, \,2, \, 3, \,4, \,5, \,6\}$

$\listset[\big]{0, 1, 2, 3, 4, 5, 6}$

\end{document}

-

A slight improvement on @Money Oriented Programmer's answer:

1. does not need workarounds for singleton and empty sets
2. uses count key of pgffor so you'll need a recent version. An alternative is using an \iffirstelem custom conditional
3. you can use notation like \set{1,...,50} or \set{a,...,g} which can be handy (see the pfg/tikz manual "Utilities > Repeating things")
4. use of \ensuremath to allow use outside and inside of mathmode
5. avoid using [] delimiters since the argument is not optional and {} brackets are more suggestive of an actual set

Here's the code:

\documentclass[border=12pt,12pt,convert=png]{standalone}
\usepackage{pgffor}
\def\set#1{%
\ensuremath{%
\ifx!#1!\emptyset\else
\{%
\foreach[count=\i] \x in {#1}{%
\ifnum\i>1,\,\fi%
\x%
}%
\}
\fi%
}%
}

\begin{document}
\set{1,...,3} and \set{1} and an empty set \set{}
\end{document}


You may also be interested in the braket package.

-
@ Rordaigorl I can not use $\set{1,...,15}$. – minthao_2011 May 19 '14 at 15:26
@minthao_2011 that is probably just because you cannot use  with the standalone class. Use it with a standard class such as article and you will be fine – Bordaigorl May 19 '14 at 16:23
Rordaigorl Thank you very much. – minthao_2011 May 19 '14 at 23:48

To someone with a hammer, everything looks like a nail.

Thus, I too have my little hammer:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xinttools}
\newcommand{\InsertExtraAfterCommas}[2][\,]
{\xintListWithSep{,#1}{\xintCSVtoList {#2}}}

\begin{document}
$\left \{0, 1, 2, 3, 4, 5, 6\right \}$

$\left \{\InsertExtraAfterCommas{0, 1, 2, 3, 4, 5, 6}\right\}$

$\left \{\InsertExtraAfterCommas[\;\;\;]{0, 1, 2, 3, 4, 5, 6}\right\}$
\end{document}


-