Завершение команды LaTeX в среде
Как я могу обернуть команду LaTeX в среде? В сущности, как я могу превратить \somecommand {contents} в \begin {somecommand} содержимое \end {somecommand}? Я пробовал очевидное в создании новой среды как таковой:
\newenvironment{somecommand}[0]{
\somecommand{
}
{
}
}
но это вызывает проблемы с фигурными скобками. Позвольте мне привести более конкретный пример. Предположим, что вы хотите создать среду очень важную, и вы хотите использовать команду emph для ее выполнения. Прямым (но неправильным) решением было бы написать что-то как
\newenvironment{very-important}[0]{
\emph{
}
{
}
}
Проблема заключается в том, что команда работает с информацией, которая находится внутри среды, поэтому она не является одной из команд открытия среды и не является закрывающей командой среды. Вопрос в том, как вы можете это сделать?
Ответы
Ответ 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{ } { } }
У вас, очевидно, проблема с командами закрытия.