有没有办法拥有一个“空”环境来仅仅限制声明的范围?

有没有办法拥有一个“空”环境来仅仅限制声明的范围?

我对 LaTeX 还很陌生,所以如果这是一个初学者的问题,我深感抱歉,但是我还没有找到一个好的方法来查询它。

我观察到,当我使用像这样的环境时\begin{itemize}...\end{itemize},我可以将内容放置\newcommand在环境范围内。

\documentclass{article}

\begin{document}
\begin{itemize}

\newcommand{\FFF}{\epsilon}

\item $\FFF$

\end{itemize}
%$\FFF$ %this is out of scope, so it would cause an error if it were commented back in.

\end{document}

itemize但是,像和 这样的环境enumerate往往会产生特殊效果(例如赋予 含义\item)。我的问题是是否存在一个没有“特殊效果”的环境,其唯一作用是限制声明的范围。

答案1

正如 Alan Munn 所说,使用括号是一种方法。您也可以简单地定义自己的环境:

\newenvironment*{dummyenv}{}{}

然后像平常一样使用它:

\begin{dummyenv}
  \newcommand*{\scopedcommand}{Do stuff}
  \scopedcommand % This works
\end{dummyenv}

两个参数分别newenvironment是在环境内容之前和之后插入的代码。将它们留空实际上定义了一个不执行任何操作的环境。

因此,下面的代码无法编译:

\documentclass[a4paper]{article}                                                 

\newenvironment*{dummyenv}{}{}                                                   

\begin{document}                                                                 
  \begin{dummyenv}                                                               
    \newcommand*{\dummycmd}{This is scoped}                                      
    \dummycmd                                                                    
  \end{dummyenv}                                                                 
  \dummycmd                                                                     
\end{document}

除非你注释掉第二个dummycmd

编辑:另外,意思是:您也可以使用 TeX 基元\begingroup\endgroup来实现这一点。它们构成了 TeX 所称的“半简单”组,并且不能与互换{...}

编辑2:正如 @tohecz 在评论中提醒我的那样,正确的做法(如果你真的想要一个环境,无论出于什么原因)是使用

\begin{@empty}
\end{@empty}

任何其他解决方案也可以起作用,但是,这比定义新环境更清晰。

相关内容