\NewEnviron 样式的环境,带有键值参数

\NewEnviron 样式的环境,带有键值参数

我想定义一个环境,在处理之前读取其内容(比如\newEnviron从包中environ),但也允许键值参数(比如从我通常使用的\newkeyenvironment包中)。keycommand

我应该怎么做?

答案1

这是一个选项keyvalenviron

在此处输入图片描述

\documentclass{article}
\usepackage{keyval}% http://ctan.org/pkg/keyval
\usepackage{environ}% http://ctan.org/pkg/environ
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\makeatletter
\define@key{mykeys}{font}{\def\envfont{#1}}%
\makeatother
\NewEnviron{myenv}[1][]{%
  \setkeys{mykeys}{font=\normalfont,#1}% Set default and updated keys
  \envfont\BODY% Set contents in font \envfont
}
\begin{document}
\lipsum[1]
\begin{myenv}[font=\bfseries\itshape]
\lipsum[1]
\end{myenv}
\end{document}

上述示例myenv使用 给出的键值设置环境的字体font。键值存储在系列中,mykeys默认font=\normalfont为。有关设置键值对的更多信息,请参阅如何创建带有键值的命令?

lipsum提供乱数-style 虚拟文本。

答案2

没有什么特别的:假设你已经定义了一个bar键系列

\NewEnviron{foo}[1]{%
  \setkeys{bar}{#1}%
  do something with \BODY
}

或者

\NewEnviron{foo}[1][]{%
  \setkeys{bar}{#1}%
  do something with \BODY
}

将允许语法

\begin{foo}{key1=value1,key2=value2}
text
\end{foo}

或者

\begin{foo}[key1=value1,key2=value2]
text
\end{foo}

选择哪一个取决于许多因素:如果用户至少提供一个键值对,则建议使用第一种形式。

我已经使用过\setkeys,因为我不知道它是如何keycommand工作的(无论如何它应该非常相似)。

相关内容