tikzpicture 环境如何支持多个选项,例如\begin{tikzpicture}[red, thick] ... \end{tikzpicture}
?
根据一些 LaTeX 文档,一个环境不允许有多个选项(参见这个文件)。
请注意,这个问题类似于如何将两个参数传递给 \newenvironment?,但未得到答复。
请注意,此问题对必需参数/参数(用花括号提供)和选项(用方括号提供)进行了区分。
答案1
支持的语法\newenvironment
是
\newenvironment{<name>}[<n>]{<begin-code>}{<end-code>}
或者
\newenvironment{<name>}[<n>][<default>]{<begin-code>}{<end-code>}
这就是您引用的文档中所解释的内容。
第一种类型定义了一个采用<n>
强制参数的环境,因此
\newenvironment{foo}[2]{<begin-code>}{<end-code>}
你必须打电话
\begin{foo}{first}{second}
body
\end{foo}
在第二种模式下,环境接受一个可选参数,其默认值为<default>
;因此
\newenvironment{foo}[2][default]{<begin-code>}{<end-code>}
你可以使用以下方式调用环境
\begin{foo}{argument}
body
\end{foo}
或
\begin{foo}[option]{argument}
body
\end{foo}
的情况tikzpicture
是
\newenvironment{tikzpicture}[1][]{<begin-code>}{<end-code>}
环境如何处理可选参数留给<begin-code>
管理。当你这样做时
\begin{tikzpicture}[red,black]
...
\end{tikzpicture}
有一可选参数,用于处理提取 TikZ 选项。
答案2
从技术上讲,这只是一个可选参数(red,thick
),两个看起来类似\begin{tikzpicture}[red][thick]
或相似。
此外,如果您使用低级 TeX 命令,该陈述并不完全正确;只需考虑一下的签名\newcommand{\command}[number of arguments][default value of first argument]{code}
。
这里发生的事情是,环境获取的一个参数被解析,并沿着逗号拆分为几个子参数,然后在代码中使用。许多包使用了一些派生函数xkeyval
(您可以在此处了解如何使用它),但我确信tikz
它有自己的例程。