我想列出一个集合的所有元素。我试过
\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}
有什么方法可以让我做得更好吗?
答案1
这是我的最简单的技巧。
\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}
版本 2
删除$
以便您使用其他数学环境。
\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}
答案2
一个“经典”的定义,其中逗号是数学活动的,并且定义为给出一个逗号后跟一个细空格。
\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}
查看文档,mathtools
了解声明的配对分隔符可接受哪些可选项。
相同但不激活逗号,但使用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}
答案3
@Money Oriented Programmer 的回答略有改进:
- 不需要针对单例和空集的解决方法
- 使用
count
key of,pgffor
因此您需要最新版本。另一种方法是使用\iffirstelem
自定义条件 \set{1,...,50}
您可以使用像或这样方便的符号\set{a,...,g}
(请参阅 pfg/tikz 手册“实用程序 > 重复事物”)- 使用
\ensuremath
允许在数学模式外部和内部使用 - 避免使用
[]
分隔符,因为参数不是可选的,而{}
括号更能暗示实际的集合
代码如下:
\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}
您可能还对以下方面感兴趣布拉克特包裹。
答案4
对于拿着锤子的人来说,所有东西看上去都像钉子。
因此,我也有一个我的小锤子:
\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}