排版整数间隔

排版整数间隔

我正在尝试排版这样的整数间隔:[0..m-1]

0但是, 、.和之间的间距m - 1太小了。 有没有什么软件包可以改善这个问题?

答案1

让我们看看如何创建一个类似于\dots但有两个点的命令。首先,我利用 TeX.SE 的智慧,找到如何找到标准定义的内容;然后是一些命令行:

[romano:~] % texdef -t latex dots  
\dots:
macro:->\protect \dots  
\dots :
\long macro:->\ifmmode \mathellipsis \else \textellipsis \fi 

[romano:~] % texdef -t latex mathellipsis
\mathellipsis:
macro:->\mathinner {\ldotp \ldotp \ldotp }

最后:

 \newcommand{\twodots}{\mathinner {\ldotp \ldotp}}

结果是:

双点宏

(这仅适用于数学模式,但您也可以轻松地将其扩展为文本,模仿定义\dots

答案2

我也喜欢这两个点。我常用的代码是

[a\mathrel{{.}\,{.}}\nobreak b]

当然隐藏在宏中。

\documentclass{article}
\usepackage{amsmath}

\newcommand{\isep}{\mathrel{{.}\,{.}}\nobreak}

\begin{document}

$[0\isep m-1]$

\end{document}

在此处输入图片描述

一种更精细的解决方案,用于处理任何类型的间隔,同时保持不强制选择的语法。

\documentclass{article}
\usepackage{amsmath,mleftright}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\interval}{O{}>{\SplitArgument{1}{,}}m}
 {
  \group_begin:
  \keys_set:nn { calcolo/interval } { o, #1 }
  \bool_if:NTF { \l_calcolo_interval_auto_bool }
   {\mleft\l_calcolo_interval_left_tl}
   {\mathopen{\l_calcolo_interval_size_tl\l_calcolo_interval_left_tl}}
  \calcolo_interval_set:nn #2
  \bool_if:NTF { \l_calcolo_interval_auto_bool }
   {\mright\l_calcolo_interval_right_tl}
   {\mathclose{\l_calcolo_interval_size_tl\l_calcolo_interval_right_tl}}
  \group_end:
 }
\cs_new_protected:Nn \calcolo_interval_set:nn
 {
  #1 \mathrel{{.}\,{.}}\nobreak #2
 }
\keys_define:nn { calcolo/interval }
 {
  size .code:n =
   \tl_if_eq:nnTF { #1 } { * }
    { \bool_set_true:N \l_calcolo_interval_auto_bool }
    { \tl_set:Nn \l_calcolo_interval_size_tl { #1 } },
  o .code:n =
   \tl_set:Nn \l_calcolo_interval_left_tl { ( }
   \tl_set:Nn \l_calcolo_interval_right_tl { ) },
  oo .code:n =
   \tl_set:Nn \l_calcolo_interval_left_tl { ( }
   \tl_set:Nn \l_calcolo_interval_right_tl { ) },
  c .code:n =
   \tl_set:Nn \l_calcolo_interval_left_tl { [ }
   \tl_set:Nn \l_calcolo_interval_right_tl { ] },
  cc .code:n =
   \tl_set:Nn \l_calcolo_interval_left_tl { [ }
   \tl_set:Nn \l_calcolo_interval_right_tl { ] },
  oc .code:n =
   \tl_set:Nn \l_calcolo_interval_left_tl { ( }
   \tl_set:Nn \l_calcolo_interval_right_tl { ] },
  co .code:n =
   \tl_set:Nn \l_calcolo_interval_left_tl { [ }
   \tl_set:Nn \l_calcolo_interval_right_tl { ) },
  o .value_forbidden:n = true,
  oo .value_forbidden:n = true,
  c .value_forbidden:n = true,
  cc .value_forbidden:n = true,
  oc .value_forbidden:n = true,
  co .value_forbidden:n = true,
 }

\tl_new:N \l_calcolo_interval_left_tl
\tl_new:N \l_calcolo_interval_right_tl
\tl_new:N \l_calcolo_interval_size_tl
\bool_new:N \l_calcolo_interval_auto_bool
\ExplSyntaxOff


\begin{document}

$\interval{a,b}$

$\interval[c]{a,b}$

$\interval[co]{a,b}$

$\interval[oc]{a,b}$

$\interval[size=\Big]{a,b}$

\bigskip

$\interval[size=*,co]{\dfrac{\dfrac{1}{2}}{\dfrac{3}{4}},b}$

\end{document}

在此处输入图片描述

答案3

mathtools以下是使用和 的解决方案xparse。我定义一个命令\Iintvl{m,n}。您需要一个包含相关分隔符的字体,\llbracket\rrbracketfourierstmaryrd)或等效项(MnSymbolMdSymbol\lsem\rsem)。该命令的星号版本会根据内容调整分隔符的大小,您可以使用可选参数( )微调它们的大小\big, \Big, …

\documentclass{article}
\usepackage{mathtools, stmaryrd}
\usepackage{xparse} \DeclarePairedDelimiterX{\Iintv}[1]{\llbracket}{\rrbracket}{\iintvargs{#1}}
\NewDocumentCommand{\iintvargs}{>{\SplitArgument{1}{,}}m}
{\iintvargsaux#1} %
\NewDocumentCommand{\iintvargsaux}{mm} {#1\mkern1.5mu..\mkern1.5mu#2}

\begin{document}

\[ \Iintv{-2,5} \quad \Iintv*{2^n, 2^{n + 1} } \quad \Iintv*{2^{2^n} + 1, 2^{2^{n + 1}} + 1}\]

\end{document} 

在此处输入图片描述

答案4

比其他的健壮性差得多(当然可以做得更健壮,但这可能就足够了),但它可能是好看且可读的代码

\def\intv#1[#2..#3]{\mathopen{#1[}#2\mathrel{{.}\,{.}}\nobreak#3\mathclose{#1]}}
$
\intv[a..b]
\intv\big[a..b]
\intv\Bigg[\frac{a}{b}..c]
$

如果您需要,\left[ .. \right]我可以添加代码。

相关内容