有没有办法用命令替换环境?

有没有办法用命令替换环境?

在某些条件下(由选择包选项触发),我想将特定环境更改为边注。但是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,但似乎它并不适用于所有功能。

相关内容