我正在试验我自己的命令和环境,现在我面临着这些问题:
为创建命令\foo[optional_1]...[optional_n]{parameter},
\foo{parameter}[optional]或名为的环境我试过了
\newcommand{\foo}[3][][]{#1#2#3} - failed
\newcommand{\foo}[3][2][][]{#1#2#3} - failed有谁知道一些提示吗?非常感谢。
发布于 2010-05-27 14:02:48
使用xparse包( LaTeX3开发工作的一部分):
\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 \newcommand中略有不同。您可以检测是否给出了一个:
\NewDocumentCommand\foo{mo}{%
\IfNoValueTF{#2}
{Code without #2}
{Code with #2}%
}您将看到,这是通过使用小写字母'o‘来实现的,而大写字母'O’则需要一个默认值(我已经通过包含一个空组将其设为空)。
发布于 2010-05-26 08:53:02
\foo{parameter}[optional]命令;但是,可以使用以下命令创建\foo[optional]{parameter}命令\newcommand{\foo}2{强制:#2;可选:#1}
如果你调用它为\foo{given},它将生成Mandatory: given, optional: def;如果你调用它为\foo[optional]{given},它将生成Mandatory: given, optional: optional。这可能就是你应该这样做的--这会让你的LaTeX代码看起来更好。使用可选参数创建新环境的过程与
\newenvironment{env}2{(#1,#2)\begingroup}{\endgroup}
其中,#同样是可选参数;它同样被写为\begin{env}[opt]{req}...\end{env}。如果你真的想要另一种形式的命令,请参阅我的答案的末尾。
如果你真的想要一个像\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},一切都应该正常工作。
发布于 2010-07-21 20:24:34
还要考虑xargs包。以下是其文档中的示例。
以通常的方式进行设置,
\usepackage{xargs}然后如果你定义
\newcommandx*\coord[3][1=1, 3=n]{(#2_{#1},\ldots,#2_{#3})}(这意味着使用"1“作为第一个参数,如果没有指定,使用"n”作为第三个参数)。然后
$\coord{x}$收益率(sans下标)
(x1,.。。,xn)
和
$\coord[0]{y}$收益率(同样,sans下标,y替换必选参数)
(y0,...,yn)
https://stackoverflow.com/questions/2908908
复制相似问题