Cro*_*ley 17 latex newenvironment renewcommand
我正在尝试自己的命令和环境,现在我正面临着这些问题:
\foo{parameter}[optional]或环境\begin{bar}{parameter}[optional]?\foo[optional_1]...[optional_n]{parameter}我试过了
\newcommand{\foo}[3][][]{#1#2#3} - failed
\newcommand{\foo}[3][2][][]{#1#2#3} - failed
Run Code Online (Sandbox Code Playgroud)
有谁知道一些提示?非常感谢.
Ant*_*sky 16
你不能\foo{parameter}[optional]简单地创建一个命令; 但是,您可以使用创建\foo[optional]{parameter}命令
\newcommand{\foo}[2][def]{Mandatory: #2; optional: #1}
Run Code Online (Sandbox Code Playgroud)
如果你称之为\foo{given},它将产生Mandatory: given, optional: def; 如果你称之为\foo[optional]{given},它将产生Mandatory: given, optional: optional.这可能就是你应该如何做的 - 使用其余的LaTeX代码会更好看.使用可选参数创建新环境与完成类似
\newenvironment{env}[2][def]{(#1,#2)\begingroup}{\endgroup}
Run Code Online (Sandbox Code Playgroud)
其中,#再次是可选的参数; 这又写成了\begin{env}[opt]{req}...\end{env}.如果你真的想要一个其他形式的命令,请参阅我的答案的结尾.
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
Run Code Online (Sandbox Code Playgroud)
然后你可以使用\reversed{mandatory}[optional]或只是\reversed{mandatory},一切都应该工作.
Jos*_*ght 13
使用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
}
Run Code Online (Sandbox Code Playgroud)
xparse与\newcommand中的可选参数略有不同.您可以检测是否给出了一个:
\NewDocumentCommand\foo{mo}{%
\IfNoValueTF{#2}
{Code without #2}
{Code with #2}%
}
Run Code Online (Sandbox Code Playgroud)
您将看到这通过使用小写"o"起作用,而大写"O"则需要一个默认值(我通过包含一个空组使其变为空).
还要考虑xargs包.以下是其文档中的示例.
以通常的方式设置,
\usepackage{xargs}
Run Code Online (Sandbox Code Playgroud)
然后如果你定义
\newcommandx*\coord[3][1=1, 3=n]{(#2_{#1},\ldots,#2_{#3})}
Run Code Online (Sandbox Code Playgroud)
(这意味着第一个参数使用"1"(如果未指定),第三个参数使用"n".然后
$\coord{x}$
Run Code Online (Sandbox Code Playgroud)
收益率(无下标)
(x1,...,xn)
和
$\coord[0]{y}$
Run Code Online (Sandbox Code Playgroud)
yield(再次,sans下标,y替换强制参数)
(y0,...,yn)
| 归档时间: |
|
| 查看次数: |
17888 次 |
| 最近记录: |