Подтвердить что ты не робот

Завершение команды LaTeX в среде

Как я могу обернуть команду LaTeX в среде? В сущности, как я могу превратить \somecommand {contents} в \begin {somecommand} содержимое \end {somecommand}? Я пробовал очевидное в создании новой среды как таковой:

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

но это вызывает проблемы с фигурными скобками. Позвольте мне привести более конкретный пример. Предположим, что вы хотите создать среду очень важную, и вы хотите использовать команду emph для ее выполнения. Прямым (но неправильным) решением было бы написать что-то как

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

Проблема заключается в том, что команда работает с информацией, которая находится внутри среды, поэтому она не является одной из команд открытия среды и не является закрывающей командой среды. Вопрос в том, как вы можете это сделать?

4b9b3361

Ответ 1

Кажется, теперь я могу догадаться, в чем вопрос.

\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

Это можно сделать с помощью пакета environment следующим образом:

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

\BODY содержит тело среды, а среды могут быть вложенными. Подробнее см. В документации.

Ответ 3

Простым способом может быть:

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

Объяснение: \bgroup работает как { и \egroup работает как }.

Ответ 4

определить команду

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

изменит

\eqn{x^2=y}

к

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

Я думаю,

Ответ 5

Новая среда somecommand определяет макрос \somecommand. Вы не можете использовать макрос с тем же именем \somecommand внутри.

Кроме того, вы должны написать

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

а не

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

У вас, очевидно, проблема с командами закрытия.