在某些条件下(由选择包选项触发),我想将特定环境更改为边注。但是marginnote
它本身并不是环境,而是一个将其内容作为参数的命令。所以我想做的是替换
\begin{someenvironment}
...
\end{someenvironment}
和
\marginnote{
...
}
但我显然不能用类似的东西来做到这一点
\renewenvironment{someenvironment}
{\marginnote{ }
{ }}
用以环境内容作为参数的命令替换环境的正确方法是什么?
答案1
这environ
包裹可能会有所帮助。您可以使用以下方式定义环境
\NewEnviron{<env>}{%
% environment contents
}
并且环境的内容在宏中可用\BODY
。这是一个最小的例子:
\documentclass{article}
\usepackage{marginnote}% http://ctan.org/pkg/marginnote
\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron{someenvironment}{%
\marginnote{\BODY}% Place contents of <someenvironment> in a \marginnote
}
\begin{document}
Here is some text with a margin note.
\begin{someenvironment}
This is a margin note.
\end{someenvironment}
\end{document}
\NewEnviron
它具有类似宏的外观,因此使用应该相当直观。
答案2
还请注意,您可以使用xparse
(现在直接包含在 LaTeX 中),最近的版本提供b
或+b
参数(以允许多个段落):
\documentclass{article}
\usepackage{xparse}
\usepackage{marginnote}% http://ctan.org/pkg/marginnote
\usepackage{environ}% http://ctan.org/pkg/environ
\NewDocumentEnvironment{someenvironment}{+b}{%
\marginnote{#1}% Place contents of <someenvironment> in a \marginnote
}{}
\begin{document}
Here is some text with a margin note.
\begin{someenvironment}
This is a margin note.
\end{someenvironment}
\end{document}
{...}
有时我通过用替换也会很幸运\bgroup...\egroup
,但似乎它并不适用于所有功能。