ew命令 / ewenvironment - 可选参数

问题描述 投票:0回答:4

我正在尝试自己的命令和环境,现在我面临这些问题:

  1. 如何创建命令
    \foo{parameter}[optional]
    或名为
    \begin{bar}{parameter}[optional]
    的环境?
  2. 如何创建命令
    \foo[optional_1]...[optional_n]{parameter}

我已经尝试过了

\newcommand{\foo}[3][][]{#1#2#3}    - failed
\newcommand{\foo}[3][2][][]{#1#2#3} - failed

有人知道一些提示吗?非常感谢。

latex
4个回答
21
投票
  1. 您不能简单地创建

    \foo{parameter}[optional]
    命令;但是,您可以使用
     创建 
    \foo[optional]{parameter}

    命令
    \newcommand{\foo}[2][default]{Mandatory: #2; optional: #1}
    

    如果你称它为

    \foo{given}
    ,它会产生
    Mandatory: given, optional: default
    ;如果你称它为
    \foo[bonus]{given}
    ,它将产生
    Mandatory: given, optional: bonus
    。这可能就是您应该这样做的方式——这与您的 LaTeX 代码的其余部分一起看起来会更好。创建具有可选参数的新环境的方法与

    类似
    \newenvironment{env}[2][def]{(#1,#2)\begingroup}{\endgroup}
    

    其中

    #1
    又是可选参数;这又被写为
    \begin{env}[opt]{req}...\end{env}
    。如果您真的想要其他形式的命令,请参阅我答案的末尾。

  2. TeX FAQ 有一个关于使用“多个可选参数”编写命令的答案。如何做到这一点有两种选择。基本思想是定义一个带有可选参数的命令,然后运行另一个本身带有可选参数的命令,等等; twoopt 包封装了这个。

如果你
真的

想要像\reversed{mandatory}[optional]这样的命令,你可以这样做。首先,定义一个命令,该命令接受必需的参数,将其存储在宏中,然后将其转发到另一个命令。第二个命令采用可选参数,并使用定义的命令和可选参数。把这些放在一起,我们得到

\makeatletter
\newcommand{\reversed}[1]{\def\reversed@required{#1}\reversed@opt}
\newcommand{\reversed@opt}[1][def]{Required: \reversed@required; optional: #1}
\makeatother

然后您可以使用 
\reversed{mandatory}[optional]

或仅使用

\reversed{mandatory}
,一切都会正常。
    


19
投票

\usepackage{xparse} \NewDocumentCommand\foo{O{}O{}m}{% % Code with optional #1 and #2 with empty defaults } \NewDocumentCommand\foo{mO{}}{% % Code with optional #2 with empty default } \NewDocumentEnvironment{foo}{O{}}{% % Start code with optional #1 }{% % End code with optional #1 }

xparse 中的可选参数与 with 略有不同
ew命令。您可以检测是否已给出:

\NewDocumentCommand\foo{mo}{% \IfNoValueTF{#2} {Code without #2} {Code with #2}% }

您会发现这是通过使用小写“o”来实现的,而大写“O”则需要一个默认值(我通过包含一个空组将其设置为空)。


7
投票

按照通常的方式设置,

\usepackage{xargs}

然后如果你定义

\newcommandx*\coord[3][1=1, 3=n]{(#2_{#1},\ldots,#2_{#3})}

(这意味着如果未指定,则使用“1”作为第一个参数,并使用“n”作为第三个参数)。然后

$\coord{x}$

产量(无下标)

(x1,...,xn)

$\coord[0]{y}$

yields(同样,无下标,y 替换强制参数)

(y0,...,yn)


0
投票

% ---------------------------------- %! TEX program = XeLaTeX % !TeX encoding = UTF-8 % Author: Troy_Daniel % Email: [email protected] % ---------------------------------- \documentclass{article} \usepackage{xcolor} \newcommand{\Caption}[3]{% \textcolor[rgb]{0.36, 0.72, 0.80}{\Large #1} {\def\tmp{#3} \ifx\tmp\empty % the third parameter is not provieded \textcolor[rgb]{0.96, 0.66, 0.35}{\small#2} \else % non-empty third parameter \textcolor[rgb]{0.96, 0.66, 0.35}{\small[#3]#2} \fi}} \begin{document} \Caption{First}{Second}{} \Caption{First}{Second}{Third} \end{document}

结果如下所示,可选参数的不同定义:

Different definitions for optional parameter(s)

© www.soinside.com 2019 - 2024. All rights reserved.