在环境中包装LaTeX命令

时间:2009-12-09 10:20:25

标签: latex

如何在环境中包装LaTeX命令?本质上,如何将\ somecommand {contents}转换为\ begin {somecommand} contents \ end {somecommand}?我在创建一个新的环境时已经尝试了显而易见的事情:

\newenvironment{somecommand}[0]{
  \somecommand{
}
{
  }
}

但这会导致花括号出现问题。让我举一个更具体的例子。假设您想要创建非常重要的环境,并且您希望使用命令emph来完成此任务。一个直截了当(但不正确)的解决方案是将内容写成

\newenvironment{very-important}[0]{
  \emph{
}
{
  }
}

这里的问题是该命令使用在环境中找到的信息,因此它不是环境的开放命令之一,也不是环境的关闭命令。问题是:你怎么能这样做?

5 个答案:

答案 0 :(得分:20)

这可以使用environ包完成,如下所示:

\usepackage{environ}
...
\NewEnviron{very-important}{\emph{\BODY}}

\BODY包含环境的主体,环境可能是嵌套的。有关详细信息,请参阅文档。

答案 1 :(得分:10)

现在看来,我猜是什么问题。

\newenvironment{very-important}{\startimportant}{}
\def\startimportant#1\end{\emph{#1}\end}

\begin{very-important}
Something
\end{very-important}

此解决方案效果很好。 但恕我直言,将所有文本包装在环境中是个坏主意。为什么? 有两种方法可以对文本做些什么。 例如,您想要更改字体并使用斜体。

  • 第一种方法。 \textit{sentence written in italics}
  • 第二种方法。 {\it sentence written in italics\/}

有什么区别?问题是第一种方法使用第二种方法。 \it宏更改字体,大括号}将其更改回来。 \textit宏读取完整参数,更改字体并再次插入参数: \textit大致定义如下(不完全相同)。

\def\texit#1{{\it#1\/}}

第一种方法总是做额外的工作。它读了两次论点。 几乎总是,你可以做出改变,然后你就可以回来了。

最终为什么要使用这个环境?使用宏。

\veryimportant{
   Any thought
}

答案 2 :(得分:3)

更简单的方法可能是:

\newenvironment{somecommand}[0]{ \somecommand\bgroup } { \egroup }

说明:\bgroup的作用类似于{,而\egroup的作用类似于}

答案 3 :(得分:1)

定义命令

\newcommnad{eqn}{1}{\begin{equation}#1\end{equation}}

会改变

\eqn{x^2=y}

\begin{equation}
  x^2=y
\end{equation}

我认为

答案 4 :(得分:0)

新环境somecommand定义宏\somecommand。 您不能在内部使用名称为\somecommand的宏。

此外你应该写

\newenvironment{name}{openning command}{closing commands}

而不是

\newenvironment{somecommand}[0]{ \somecommand{ } { } }

关闭命令显然有问题。