如何使新环境表现得像现有环境?

如何使新环境表现得像现有环境?

我希望创建一个交替表现为脚注、尾注或注释(即隐藏)的环境。首先,我定义了一个环境“注释”,如下所示:

\newenvironment{note}
 { \footnote{ }
 { } }

现在期待

Hello\begin{note}world\end{note}

将扩展为

Hello\footnote{world}

但事实似乎并非如此。文档编译时没有任何警告,并且 pdf 输出确实包含脚注,但脚注是空的。

可能存在什么问题?我该如何解决?

答案1

要创建一个新的环境,它必须具有以下形式

\newenvironment{<env>}
  {<begin env>}% \begin{<env>}
  {<end env>}% \end{<env>}

其中<begin env>执行于\begin{<env>}并且<end env>执行于\end{<env>}。使用你的方法会引起混淆,即使你思考它可能有效:

\newenvironment{note}
  { \footnote{ }
  { } }

例如,尽管您认为\begin{note}应该扩展为\footnote{并且\end{note}应该扩展为},从而包含环境内容,但 TeX 在定义时创建了环境,并且定义中的括号是不明确的。实际上,实际上\begin{note}扩展为,\footnote{ } { }因为平衡的括号对在同一级别/深度上匹配。

解决这一困境的方法是捕获环境内容第一的- 得益于environ,然后将其传递给\footnote。环境内容在名为 的宏中获取\BODY

在此处输入图片描述

\documentclass{article}
\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron{note}{\footnote{\BODY}}% Environment-form of \footnote
\begin{document}

Hello\footnote{world}. Hello\begin{note}world\end{note}.

\end{document}

请注意,即使采用类似环境的方法,您在其中包含的内容方面仍然受到限制(例如,没有逐字内容)。

答案2

\NewEnviron可能最简单的方法是使用environ打包并定义您的note环境为

\NewEnviron{note}{\footnote{\BODY}}

完整代码

\documentclass{article}
\usepackage{environ}

\NewEnviron{note}{\footnote{\BODY}}

\begin{document}

Hello\begin{note}world\end{note}

\end{document}

输出:

在此处输入图片描述

相关内容