\newcommand 中的条件语句

\newcommand 中的条件语句

我发现自己\newcommand经常使用宏,除了偶尔难以正确定义可选参数外,宏运行良好。但有一个严重的限制,我希望这能表明这是我的无知而不是限制,即使宏定义受参数的特定值约束的能力。一个简单的例子:我发现经常使用表达式 {1, 2, ..., n},我称之为 n 集,并使用以下简单宏:

\newcommand{\myNset}{\{1,2,\dots,n\}}

n如果我可以传递一个整数作为参数,将其设为默认值,并且如果参数恰好是 2 或 3,则生成 {1,2} 或 {1,2,3) 等, 这不是很有帮助吗?当然比笨拙的要好:

\newcommand{\myTwoset}{\{1,2\}}
\newcommand{\myThreeset}{\{1,2,3\}}

等等,当然这些都太笨拙了,根本没用。在哪里划线?10 处?27 处?

这可能只是一个微不足道的例子,但我\newcommand一次又一次地发现这种条件处理宏的应用,例如与创建矩阵有关。这将使我对 LaTeX 的使用达到一个全新的水平。

顺便说一句,我已经阅读了 LaTeX Companion 中的相关页面,但没有成功。

答案1

\documentclass{article}
\newcommand\myNset[1][99]{\{1,2\ifnum#1=3 ,3\else\ifnum#1>3 ,\dots,n\fi\fi\}}

\begin{document}

\myNset
\myNset[3]
\myNset[2]

\end{document}

\myNset[0]并且[1][2]

答案2

通过此 LaTeX3 实现,可选参数也可以是变量:

\documentclass{article}
\usepackage{amsmath,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\Nset}{O{n}}
  {
   \{1
   \str_case:nnF { #1 }
     {
      {1} {}
      {2} {,2}
      {3} {,2,3}
      {4} {,2,3,4}
     }
     {,2,\dots,#1}
   \}
  }
\ExplSyntaxOff

\begin{document}
$\Nset$

$\Nset[1]$

$\Nset[2]$

$\Nset[3]$

$\Nset[4]$

$\Nset[5]$

$\Nset[m]$

$\Nset[k-1]$
\end{document}

在此处输入图片描述

我们用\NewDocumentCommand{\Nset}{O{n}}{...}定义一个具有唯一可选参数的命令,其默认值为n。此命令排版左括号和1,然后根据已知值列表检查参数,在本例中为 1、2、3 和 4,并采取适当的操作(即排版参数中缺少的所有数字,以逗号分隔);如果可选参数未出现在列表中,则执行最后一个操作,即排版,2,\dots,<argument>。最后,找到右括号。

答案3

这是一个基于的解决方案期权包裹:

\documentclass{article}
\usepackage{catoptions}
\newcommand*\Nset[1][1]{%
  \{1%
  \cptifcasse\ifstrcmpTF{#1}
    {1}{}
    {2}{, 2}
    {3}{, 2, 3}
    {4}{, 2, 3, 4}
  \elseif
    , 2, \dots, #1%
  \endif
  \}%
}

\begin{document}
$\Nset$
\par
$\Nset[1]$
\par
$\Nset[3]$
\par
$\Nset[n]$
\end{document} 

相关内容